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)
|
- 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
|
- 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
|
|
@ -2,6 +2,7 @@
|
||||||
#define CLIENT_H
|
#define CLIENT_H
|
||||||
|
|
||||||
extern int ID;
|
extern int ID;
|
||||||
|
extern pid_t SERVER_PID;
|
||||||
|
|
||||||
void setupClient(int argc, char *argv[]);
|
void setupClient(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ extern int _MSGQID;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
long mtype; // type 1
|
long mtype; // type 1
|
||||||
int player_id;
|
int player_id;
|
||||||
|
pid_t server_pid;
|
||||||
input_server_t server_in;
|
input_server_t server_in;
|
||||||
} msg_t;
|
} msg_t;
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ int main(int argc, char *argv[]){
|
||||||
printf(PSERVER "Game ended\n");
|
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);
|
||||||
sndGame_end(&game_end);
|
sndGame_end(&game_end);
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <forza4.h>
|
#include <forza4.h>
|
||||||
|
|
||||||
int ID;
|
int ID;
|
||||||
|
pid_t SERVER_PID;
|
||||||
|
|
||||||
void checkClientinput(int argc, char *argv[]);
|
void checkClientinput(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <custom_msgq.h>
|
#include <custom_msgq.h>
|
||||||
#include <errExit.h>
|
#include <errExit.h>
|
||||||
|
@ -39,7 +40,8 @@ void sndId() {
|
||||||
msg_t msg = {
|
msg_t msg = {
|
||||||
.mtype = 1,
|
.mtype = 1,
|
||||||
.server_in = _INPUT_S,
|
.server_in = _INPUT_S,
|
||||||
.player_id = 0
|
.player_id = 0,
|
||||||
|
.server_pid = getpid()
|
||||||
};
|
};
|
||||||
|
|
||||||
sndMsg(&msg);
|
sndMsg(&msg);
|
||||||
|
@ -57,6 +59,7 @@ void rcvId() {
|
||||||
setCollums(msg.server_in.collums);
|
setCollums(msg.server_in.collums);
|
||||||
setTokens(msg.server_in.player1Token, msg.server_in.player2Token);
|
setTokens(msg.server_in.player1Token, msg.server_in.player2Token);
|
||||||
ID = msg.player_id;
|
ID = msg.player_id;
|
||||||
|
SERVER_PID = msg.server_pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,11 @@
|
||||||
|
|
||||||
pid_t _PIDS[2];
|
pid_t _PIDS[2];
|
||||||
|
|
||||||
void setSignal(int sig);
|
void setServerSignal(int sig);
|
||||||
|
|
||||||
void sigIntHandler2(int sig) {
|
void sigIntHandler2(int sig) {
|
||||||
printf("\n");
|
printf("%d\n", getpid());
|
||||||
kill(getpid(), SIGTERM);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sigHandlerServer(int sig) {
|
void sigHandlerServer(int sig) {
|
||||||
|
@ -33,9 +33,26 @@ void sigHandlerServer(int sig) {
|
||||||
|
|
||||||
if (sig == SIGALRM) {
|
if (sig == SIGALRM) {
|
||||||
printf(PSERVER "Time to exit (%d sec) expired\n", TIME_TO_RESET);
|
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 (sig == SIGTERM || sig == SIGHUP) {
|
||||||
if (_PIDS[0] > 0) {
|
if (_PIDS[0] > 0) {
|
||||||
|
@ -79,6 +96,7 @@ void sigHandlerServer(int sig) {
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupServerSignalHandler() {
|
void setupServerSignalHandler() {
|
||||||
|
@ -89,16 +107,18 @@ void setupServerSignalHandler() {
|
||||||
sigdelset(&mySet, SIGTERM);
|
sigdelset(&mySet, SIGTERM);
|
||||||
sigdelset(&mySet, SIGHUP);
|
sigdelset(&mySet, SIGHUP);
|
||||||
sigdelset(&mySet, SIGALRM);
|
sigdelset(&mySet, SIGALRM);
|
||||||
|
sigdelset(&mySet, SIGUSR1);
|
||||||
|
|
||||||
sigprocmask(SIG_SETMASK, &mySet, NULL);
|
sigprocmask(SIG_SETMASK, &mySet, NULL);
|
||||||
|
|
||||||
setSignal(SIGINT);
|
setServerSignal(SIGINT);
|
||||||
setSignal(SIGTERM);
|
setServerSignal(SIGTERM);
|
||||||
setSignal(SIGHUP);
|
setServerSignal(SIGHUP);
|
||||||
setSignal(SIGALRM);
|
setServerSignal(SIGALRM);
|
||||||
|
setServerSignal(SIGUSR1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSignal(int sig) {
|
void setServerSignal(int sig) {
|
||||||
if (signal(sig, sigHandlerServer) == SIG_ERR) {
|
if (signal(sig, sigHandlerServer) == SIG_ERR) {
|
||||||
errExit("signal", "f4Server");
|
errExit("signal", "f4Server");
|
||||||
}
|
}
|
||||||
|
@ -108,9 +128,9 @@ void setSignal(int sig) {
|
||||||
void sigHandlerClient(int sig) {
|
void sigHandlerClient(int sig) {
|
||||||
// Ctrl+C
|
// Ctrl+C
|
||||||
if (sig == SIGINT) {
|
if (sig == SIGINT) {
|
||||||
//TODO: abbandono
|
printf(PCLIENT "Quitting game\n");
|
||||||
|
game_end_t game = {.mtype = GAME_END, .winner = ID ^ 1};
|
||||||
exit(0);
|
sndGame_end(&game);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terminazione e chiusura terminale
|
// Terminazione e chiusura terminale
|
||||||
|
@ -122,6 +142,7 @@ void sigHandlerClient(int sig) {
|
||||||
errExit("shmdt", "sigHandlerServer");
|
errExit("shmdt", "sigHandlerServer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue