non funzia piu neanche ctrl c
This commit is contained in:
parent
3bd1b32212
commit
607acddaf2
15
TODO.txt
15
TODO.txt
|
@ -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 = ...
|
||||
|
||||
- messaggio speciale per abbandono
|
||||
|
||||
- se le ipcs non si sono chiuse bene non funzia
|
|
@ -2,6 +2,7 @@
|
|||
#define CLIENT_H
|
||||
|
||||
extern int ID;
|
||||
extern pid_t SERVER_PID;
|
||||
|
||||
void setupClient(int argc, char *argv[]);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <forza4.h>
|
||||
|
||||
int ID;
|
||||
pid_t SERVER_PID;
|
||||
|
||||
void checkClientinput(int argc, char *argv[]);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue