#include #include #include #include #include #include "chat.h" #define IDFileName "chat.ior" #define OUTCOMM "OUT" #define PERIOD 1 int main(int argc, char *argv[]) { /* chatobject */ chat srv; /* ORB */ CORBA_Environment ev; CORBA_ORB orb; /* ServerIDstring */ char idstring[1024]; FILE *idstringfile; /* helper variables */ CORBA_long nm, pm = -1; char myname[namelen+1], iline[messlen+1]; char *nname, *nmess; /* select() sets */ fd_set read_fds, orig_fds; int fdmax; /* init ORB */ CORBA_exception_init(&ev); orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev); strncpy(myname, (argc > 1) ? argv[1] : "noname", namelen); /* read server id */ if (! (idstringfile = fopen(IDFileName, "r"))) { fprintf(stderr, "No ID file %s!\n", IDFileName); exit(-1); } fgets(idstring, 1024, idstringfile); fclose(idstringfile); /* make contact */ srv = CORBA_ORB_string_to_object(orb, idstring, &ev); if (! srv) { printf("Server not found!\n"); exit(1); } if (! chat_join(srv, myname, &nm, &ev)) { printf("Join failed!\n"); exit(2); } /* clip */ while(strncmp(iline, OUTCOMM, strlen(OUTCOMM))) { wt.tv_sec = PERIOD; wt.tv_usec = 0; read_fds = orig_fds; if (select(fdmax+1, &read_fds, NULL, NULL, &wt) == -1) { perror("select"); chat_disconnect(srv, myname, &ev); exit(1); } /* clip */ fgets(iline, messlen, stdin); /* clip */ if (!strncmp(iline, OUTCOMM, strlen(OUTCOMM))) chat_disconnect(srv, myname, &ev); else pm = chat_postmessage(srv, myname, iline, &ev); } /* clip */ CORBA_free(nname); CORBA_free(nmess); } } /* while */ /* shutdown orb */ CORBA_Object_release(srv, &ev); CORBA_Object_release((CORBA_Object)orb, &ev); exit(0); }