#include #include "socketfun.h" #include "jrb.h" #include "dllist.h" #include "fields.h" #include #define NFN 65 static char *fns[NFN] = { "Adam", "Andrei", "Anika", "Barbara", "Bill", "Blanche", "Brad", "Buddy", "Carla", "Catherine", "Charlie", "Chemique", "Cindy", "Dave", "Dizzy", "Eden", "Elena", "Elizabeth", "Ellen", "Emily", "Glenn", "Helen", "Jamal", "Jamie", "Jane", "Jay", "Jean", "Jeff", "Jennifer", "Jian", "Jim", "John", "Katie", "Kevin", "Kitty", "Kyra", "LaShonda", "Lazar", "Leonard", "Mark", "Mary", "Miles", "Mingo", "Misty", "Molly", "Pat", "Peg", "Peyton", "Phil", "Priest", "Raynoch", "Rob", "Semeka", "Sergei", "Shira", "Suzy", "Sviatoslav", "Tamika", "Terry", "Thor", "Tom", "Wallace", "Wanda", "Wendy", "Xavier" }; void *connection_reader(fdp) int *fdp; { char buf[100]; int j; while(1) { j = read(*fdp, buf, 100); if (j > 0) write(1, buf, j); else return NULL; } } main(argc, argv) int argc; char **argv; { int fd; int nevents; int seed; int NLN; int i; char **lns; IS is; JRB t, tmp; char *s, nam[100]; int r; FILE *fout; pthread_t tid; Dllist dl, dtmp; if (argc != 6) { fprintf(stderr, "usage: inclient1 host port nevents seed lnfile\n"); exit(1); } fd = request_connection(argv[1], atoi(argv[2])); pthread_create(&tid, NULL, connection_reader, &fd); nevents = atoi(argv[3]); seed = atoi(argv[4]); srandom(seed); is = new_inputstruct(argv[5]); if (is == NULL) { perror(argv[5]); exit(1); } dl = new_dllist(); NLN = 0; while (get_line(is) == 1) { dll_append(dl, new_jval_s((char *) strdup(is->fields[0]))); NLN++; } lns = (char **) malloc(sizeof(char *)*NLN); for (i = 0; i < NLN; i++) { dtmp = dll_first(dl); lns[i] = dtmp->val.s; dll_delete_node(dtmp); } free_dllist(dl); t = make_jrb(); fout = fdopen(fd, "w"); for (i = 0; i < nevents; i++) { if (i < 50 || random()%11 < 5) { strcpy(nam, fns[random()%NFN]); strcat(nam, " "); strcat(nam, lns[random()%NLN]); s = (char *) strdup(nam); r = random(); jrb_insert_int(t, r, new_jval_s(s)); fprintf(fout, "ADD %s %d %03d-%02d-%04d\n", s, random()%100, random()%1000, random()%100, random()%10000); fflush(fout); } else if (random()%6 == 0 && i < nevents - 1) { fprintf(fout, "PRINT\n"); fflush(fout); } else { if (!jrb_empty(t)) { tmp = jrb_first(t); s = (char *) tmp->val.s; jrb_delete_node(tmp); fprintf(fout, "DELETE %s\n", s); fflush(fout); free(s); } } } fprintf(fout, "PRINT\n"); fprintf(fout, "DONE\n"); fflush(fout); pthread_exit(NULL); }