From 06744b5b0266014ae818e77d98e3db71f843eee8 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianchi Date: Mon, 29 May 2023 12:35:04 +0200 Subject: [PATCH] cliet_setup --- inc/custom_msgq.h | 1 + inc/custom_sig.h | 2 ++ src/F4Client.c | 86 +++++++---------------------------------------- src/client.c | 6 ++++ src/custom_msgq.c | 9 +++++ src/custom_sig.c | 55 ++++++++++++++++++++++++++++++ src/server.c | 2 +- 7 files changed, 86 insertions(+), 75 deletions(-) diff --git a/inc/custom_msgq.h b/inc/custom_msgq.h index 0e7546d..761371d 100644 --- a/inc/custom_msgq.h +++ b/inc/custom_msgq.h @@ -37,6 +37,7 @@ typedef struct { } game_end_t; void setupServerMsgq(); +void setupClientMsgq(); void rcvMsg(msg_t *msg); void rcvMove(move_t *move); diff --git a/inc/custom_sig.h b/inc/custom_sig.h index 070321c..2a4349d 100644 --- a/inc/custom_sig.h +++ b/inc/custom_sig.h @@ -6,6 +6,8 @@ extern pid_t _PIDS[2]; void sigHandlerServer(int sig); + +void setupServerSignalHandler(); void setupServerSignalHandler(); #endif \ No newline at end of file diff --git a/src/F4Client.c b/src/F4Client.c index df8729f..1ef0c59 100644 --- a/src/F4Client.c +++ b/src/F4Client.c @@ -18,43 +18,8 @@ #include #include -int game_state; //FIXME: non ancora utilizzato - -tile_t *boardClient; - void checkClientinput(int argc, char *argv[]); -void sigHandlerClient(int sig) { - // Ctrl+C - if (sig == SIGINT) { - //TODO: abbandono - - sig = SIGTERM; - } - - // Terminazione e chiusura terminale - if (sig == SIGTERM || sig == SIGHUP) { - // shm - if (boardClient) { - printf(PCLIENT "Detathing shm\n"); - if (shmdt(boardClient) == -1) { - errExit("shmdt", "sigHandlerServer"); - } - } - exit(0); - } - - // Fine partita - if (sig == SIGUSR1) { - game_end_t winner; - rcvGame_end(&winner); - game_state = winner.winner; - //TODO: - kill(getpid(), SIGTERM); - } -} - - //TODO: mettere main ma non l'ho fatto per makefile int main(int argc, char *argv[]){ @@ -62,54 +27,27 @@ int main(int argc, char *argv[]){ setupClient(argc, argv); - // SIGNAL - printf(PCLIENT "Setting up signal\n"); - sigset_t mySet; - sigfillset(&mySet); - sigdelset(&mySet, SIGINT); - sigdelset(&mySet, SIGTERM); - sigdelset(&mySet, SIGHUP); - sigdelset(&mySet, SIGUSR1); - sigprocmask(SIG_SETMASK, &mySet, NULL); - - if (signal(SIGINT, sigHandlerClient) == SIG_ERR) { - errExit("signal SIGINT", "F4Client"); - } - if (signal(SIGTERM, sigHandlerClient) == SIG_ERR) { - errExit("signal SIGTERM", "F4Client"); - } - if (signal(SIGHUP, sigHandlerClient) == SIG_ERR) { - errExit("signal SIGHUP", "F4Client"); - } - if (signal(SIGUSR1, sigHandlerClient) == SIG_ERR) { - errExit("signal SIGUSR1", "F4Client"); - } // // MSGQ - printf(PCLIENT "Setting up msgq\n"); - key_t msgKey = ftok(KEYFILE, 'M'); - _MSGQID = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR); - if (_MSGQID == -1) { - errExit("msgget", "F4Client"); - } + - // msg - input_server_t input; - msg_t msg; + // msg + input_server_t input; + msg_t msg; - // msgrcv - printf(PCLIENT "Waiting for message...\n"); - rcvMsg(&msg); + // msgrcv + printf(PCLIENT "Waiting for message...\n"); + rcvMsg(&msg); - input = msg.server_in; + input = msg.server_in; // // SHM printf(PCLIENT "Setting up shm\n"); int shmBoardid = getShmid(); - boardClient = shmClientAt(shmBoardid); + _BOARD = shmClientAt(shmBoardid); // // SEM @@ -151,7 +89,7 @@ int main(int argc, char *argv[]){ while (1) { // aspetto il mio turno semOp(semid, msg.player_id, -1); // mettere id eccetera in var - printBoard(boardClient); + printBoard(_BOARD); // input e controllo printf(PCLIENT "Your Turn: "); @@ -159,14 +97,14 @@ int main(int argc, char *argv[]){ int pos; do { scanf("%d", &move.move); - move.move = checkMove(boardClient, move.move - 1); + move.move = checkMove(_BOARD, move.move - 1); } while (move.move == -1); // mando mossa al server sndMove(&move); semOp(semid, msg.player_id, -1); - printBoard(boardClient); + printBoard(_BOARD); printf(PCLIENT "Waiting for oponent\n"); //FIXME: solo se la partita non รจ finita } diff --git a/src/client.c b/src/client.c index c1f9609..a443a87 100644 --- a/src/client.c +++ b/src/client.c @@ -19,7 +19,13 @@ void checkClientinput(int argc, char *argv[]); void setupClient(int argc, char *argv[]) { + // CHECK INPUT checkClientinput(argc, argv); + + // MSGQ + setupClientMsgq(); + + } void checkClientinput(int argc, char *argv[]){ diff --git a/src/custom_msgq.c b/src/custom_msgq.c index 8972eaf..92f125c 100644 --- a/src/custom_msgq.c +++ b/src/custom_msgq.c @@ -19,6 +19,15 @@ void setupServerMsgq() { sndId(); } +void setupClientMsgq() { + printf(PCLIENT "Setting up msgq\n"); + key_t msgKey = ftok(KEYFILE, 'M'); + _MSGQID = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR); + if (_MSGQID == -1) { + errExit("msgget", "F4Client"); + } +} + void openMsgq() { key_t msgKey = ftok(KEYFILE, 'M'); _MSGQID = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR); diff --git a/src/custom_sig.c b/src/custom_sig.c index 25dd9a9..8477f5b 100644 --- a/src/custom_sig.c +++ b/src/custom_sig.c @@ -101,4 +101,59 @@ void setSignal(int sig) { if (signal(sig, sigHandlerServer) == SIG_ERR) { errExit("signal", "f4Server"); } +} + + +void sigHandlerClient(int sig) { + // Ctrl+C + if (sig == SIGINT) { + //TODO: abbandono + + sig = SIGTERM; + } + + // Terminazione e chiusura terminale + if (sig == SIGTERM || sig == SIGHUP) { + // shm + if (_BOARD) { + printf(PCLIENT "Detathing shm\n"); + if (shmdt(_BOARD) == -1) { + errExit("shmdt", "sigHandlerServer"); + } + } + exit(0); + } + + // Fine partita + if (sig == SIGUSR1) { + game_end_t winner; + rcvGame_end(&winner); + //TODO: + kill(getpid(), SIGTERM); + } +} + + +void setupClientSignalHandler(){ + printf(PCLIENT "Setting up signal\n"); + sigset_t mySet; + sigfillset(&mySet); + sigdelset(&mySet, SIGINT); + sigdelset(&mySet, SIGTERM); + sigdelset(&mySet, SIGHUP); + sigdelset(&mySet, SIGUSR1); + sigprocmask(SIG_SETMASK, &mySet, NULL); + + if (signal(SIGINT, sigHandlerClient) == SIG_ERR) { + errExit("signal SIGINT", "F4Client"); + } + if (signal(SIGTERM, sigHandlerClient) == SIG_ERR) { + errExit("signal SIGTERM", "F4Client"); + } + if (signal(SIGHUP, sigHandlerClient) == SIG_ERR) { + errExit("signal SIGHUP", "F4Client"); + } + if (signal(SIGUSR1, sigHandlerClient) == SIG_ERR) { + errExit("signal SIGUSR1", "F4Client"); + } } \ No newline at end of file diff --git a/src/server.c b/src/server.c index d47bee2..9a560ec 100644 --- a/src/server.c +++ b/src/server.c @@ -20,7 +20,7 @@ input_server_t _INPUT_S; input_server_t checkServerInput(int argc, char *argv[]); void setupServer(int argc, char *argv[]){ - // CHECK_INPUT + // CHECK INPUT _INPUT_S = checkServerInput(argc, argv); _ROWS = _INPUT_S.rows;