#include #include #include #include #include #include #include #include #include #include"message.h" static int nQueueID = -1; int mode = 1; const char *p_name = ""; void print_usage_and_die() { exit(-1); } void free_resources(void) { } void print_error(const char *szMessage) { if (szMessage != (const char *) 0) { fprintf (stderr, szMessage); } free_resources(); exit(EXIT_FAILURE); } void allocate_resources(void) { if ((nQueueID = msgget(KEY, PERM)) == -1) { print_error("Can't access message queue!\n"); } } void blah_handler(int signal) { if(mode) { mode = 1; //printf("send"); } else { mode = 0; //printf("recieve"); } printf("mode: %d ", mode); } void register_client(char * nickname) { message_t message; message.nType = 2; strcpy(message.s_nick, nickname); if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1) { exit(-1); } } int main(int argc, char** argv) { int c; int running = 1; message_t message; char s_message[256]; p_name = argv[0]; char nickname[21] = "default"; int clientID = -1; nQueueID = KEY; if(argc < 2) { print_usage_and_die(); } while((c = getopt(argc, argv, "n:m:")) != EOF) { switch(c) { case 'n': if(strlen(optarg) > 20) { printf("nickname darf nicht länger als 20 zeichen sein"); exit(-1); } strcpy(nickname, optarg); running = 1; break; case 'm': nQueueID = (int)optarg; break; default: print_usage_and_die(); } } (void)signal(SIGINT, blah_handler); //(void)signal(EOF, blah_handler); allocate_resources(); //register_client(nickname); while(1) { if(mode) { fgets(s_message, 255, stdin); strcpy(message.s_message, s_message); strcpy(message.s_nick, nickname); message.nType = MESSAGE_TYPE; message.clientID = clientID; if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1) { exit(-1); } mode = 0; } else { if(msgrcv(nQueueID, &message, sizeof(message) - sizeof(long), 0,0) == -1) { //exit(-1); }/* if(message.nType == 2) { if(strcmp(message.s_nick, nickname) == 0) clientID = clientID;//message.clientID; } else {*/ printf(message.s_message); } } return EXIT_SUCCESS; }