non funzia piu neanche ctrl c

This commit is contained in:
Lorenzo Bianchi 2023-05-31 11:52:32 +02:00
parent 3bd1b32212
commit 607acddaf2
7 changed files with 45 additions and 25 deletions

View File

@ -1,16 +1,9 @@
- sistemare include (FARE SOLO ALLA FINE ALTRIMENTI SPRECO DI TEMPO COME LA TUA VITA)
- testare chiusura figli perche i miei terminali si chiudono da soli
- al momomento i client non sanno ancora le dimensioni del campo (le hanno ricevute ma non settate)
(in realta non so perche funzioni la checkwin al momento)
- ho messo input del server globale, alcune funzioni non ne usufruiscono ancora (tip shm);
- define per i semafori invece di usare 1/-1
- abbandono player
- pulire f4client mettendo var con nomi normali
- ho scoperto solo adesso che c'é set_rows ecc, forse non lho sempre usato facendo invece _ROWS = ...
- ho scoperto solo adesso che c'é set_rows ecc, forse non lho sempre usato facendo invece _ROWS = ...
- messaggio speciale per abbandono
- se le ipcs non si sono chiuse bene non funzia

View File

@ -2,6 +2,7 @@
#define CLIENT_H
extern int ID;
extern pid_t SERVER_PID;
void setupClient(int argc, char *argv[]);

View File

@ -18,6 +18,7 @@ extern int _MSGQID;
typedef struct {
long mtype; // type 1
int player_id;
pid_t server_pid;
input_server_t server_in;
} msg_t;

View File

@ -96,7 +96,7 @@ int main(int argc, char *argv[]){
printf(PSERVER "Game ended\n");
}
game_end_t game_end = {.mtype = 4, .winner = result};
game_end_t game_end = {.mtype = GAME_END, .winner = result};
sndGame_end(&game_end);
sndGame_end(&game_end);

View File

@ -17,6 +17,7 @@
#include <forza4.h>
int ID;
pid_t SERVER_PID;
void checkClientinput(int argc, char *argv[]);

View File

@ -2,6 +2,7 @@
#include <errno.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <custom_msgq.h>
#include <errExit.h>
@ -39,7 +40,8 @@ void sndId() {
msg_t msg = {
.mtype = 1,
.server_in = _INPUT_S,
.player_id = 0
.player_id = 0,
.server_pid = getpid()
};
sndMsg(&msg);
@ -57,6 +59,7 @@ void rcvId() {
setCollums(msg.server_in.collums);
setTokens(msg.server_in.player1Token, msg.server_in.player2Token);
ID = msg.player_id;
SERVER_PID = msg.server_pid;
}

View File

@ -17,11 +17,11 @@
pid_t _PIDS[2];
void setSignal(int sig);
void setServerSignal(int sig);
void sigIntHandler2(int sig) {
printf("\n");
kill(getpid(), SIGTERM);
printf("%d\n", getpid());
exit(0);
}
void sigHandlerServer(int sig) {
@ -33,9 +33,26 @@ void sigHandlerServer(int sig) {
if (sig == SIGALRM) {
printf(PSERVER "Time to exit (%d sec) expired\n", TIME_TO_RESET);
signal(SIGINT, sigHandlerServer);
signal(SIGINT, sigIntHandler2);
perror("");
}
if (sig = SIGUSR1) {
// il giocatore che abbandona mi manda gia il messaggio dicendo che ha vinto l'altro
game_end_t game;
rcvGame_end(&game);
sndGame_end(&game);
sndGame_end(&game);
kill(_PIDS[0], SIGUSR1); //FIXME: fare una funzione per queste robe perche anche gia scritta a fine F4Server
kill(_PIDS[1], SIGUSR1);
_PIDS[0] = 0;
_PIDS[1] = 0;
sig = SIGTERM;
}
if (sig == SIGTERM || sig == SIGHUP) {
if (_PIDS[0] > 0) {
@ -79,6 +96,7 @@ void sigHandlerServer(int sig) {
exit(0);
}
}
void setupServerSignalHandler() {
@ -89,16 +107,18 @@ void setupServerSignalHandler() {
sigdelset(&mySet, SIGTERM);
sigdelset(&mySet, SIGHUP);
sigdelset(&mySet, SIGALRM);
sigdelset(&mySet, SIGUSR1);
sigprocmask(SIG_SETMASK, &mySet, NULL);
setSignal(SIGINT);
setSignal(SIGTERM);
setSignal(SIGHUP);
setSignal(SIGALRM);
setServerSignal(SIGINT);
setServerSignal(SIGTERM);
setServerSignal(SIGHUP);
setServerSignal(SIGALRM);
setServerSignal(SIGUSR1);
}
void setSignal(int sig) {
void setServerSignal(int sig) {
if (signal(sig, sigHandlerServer) == SIG_ERR) {
errExit("signal", "f4Server");
}
@ -108,9 +128,9 @@ void setSignal(int sig) {
void sigHandlerClient(int sig) {
// Ctrl+C
if (sig == SIGINT) {
//TODO: abbandono
exit(0);
printf(PCLIENT "Quitting game\n");
game_end_t game = {.mtype = GAME_END, .winner = ID ^ 1};
sndGame_end(&game);
}
// Terminazione e chiusura terminale
@ -122,6 +142,7 @@ void sigHandlerClient(int sig) {
errExit("shmdt", "sigHandlerServer");
}
}
exit(0);
}