#include #include #include #include #include #include #include #include #include #include int _MSGQID; void msgRcv(void *msgp, size_t size, long mtype); void msgSnd(void *msgp, size_t size); void openMsgq(); void sndId(); void rcvId(); void setupServerMsgq() { openMsgq(); sndId(); } void setupClientMsgq() { openMsgq(); rcvId(); } void openMsgq() { key_t msgKey = ftok(KEYFILE, MSGQKEY); _MSGQID = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR); if (_MSGQID == -1){ errExitMsg("msgget"); } } void sndId() { msg_t msg = { .mtype = 1, .server_in = _INPUT_S, .player_id = 0, .server_pid = getpid() }; sndMsg(&msg); msg.player_id = 1; sndMsg(&msg); } void rcvId() { printf(PCLIENT "Waiting for message...\n"); msg_t msg; rcvMsg(&msg); setRows(msg.server_in.rows); setCollums(msg.server_in.collums); setTokens(msg.server_in.player1Token, msg.server_in.player2Token); ID = msg.player_id; SERVER_PID = msg.server_pid; } void msgRcv(void *msgp, size_t size, long mtype) { int res; do { res = msgrcv(_MSGQID, msgp, size, mtype, 0); } while (errno == EINTR); if (res == -1) { errExit("msgrcv", "msgRcv"); } } void rcvMsg(msg_t *msg) { msgRcv(msg, sizeof(msg_t) - sizeof(long), MSG); } void rcvMove(move_t *move) { msgRcv(move, sizeof(move_t) - sizeof(long), MOVE); } void rcvPlayer(player_ds *player) { msgRcv(player, sizeof(player_ds) - sizeof(long), PLAYER); } void rcvGame_end(game_end_t *game) { msgRcv(game, sizeof(game_end_t) - sizeof(long), GAME_END); } void msgSnd(void *msgp, size_t size) { int res; do { res = msgsnd(_MSGQID, msgp, size, 0); } while (errno == EINTR); if (res == -1) { errExitMsg("msgsnd"); } } void sndMsg(msg_t *msg) { msgSnd(msg, sizeof(msg_t) - sizeof(long)); } void sndMove(move_t *move) { msgSnd(move, sizeof(move_t) - sizeof(long)); } void sndPlayer(player_ds *player) { msgSnd(player, sizeof(player_ds) - sizeof(long)); } void sndGame_end(game_end_t *game) { msgSnd(game, sizeof(game_end_t) - sizeof(long)); }