modifica variabili globali (nome e static)

This commit is contained in:
Edi De Candido 2023-05-23 12:37:44 +02:00
parent df06c131a2
commit be6bc918ea
6 changed files with 39 additions and 40 deletions

View File

@ -5,7 +5,7 @@
#define MAX_NAME 16 #define MAX_NAME 16
int _MSGQID; static int _MSGQID;
#define MSG 1 #define MSG 1
#define MOVE 2 #define MOVE 2

View File

@ -32,13 +32,13 @@ typedef enum {
PLAYER2 PLAYER2
} tile_t; } tile_t;
int semid; static int _SEMID;
int shmid; static int _SHMID;
tile_t *board; static tile_t *_BOARD;
pid_t pids[2]; static pid_t _PIDS[2];
input_server_t input; static input_server_t _INPUT_S;
#endif #endif

View File

@ -23,7 +23,7 @@ int main(int argc, char *argv[]){
printf("Il mio pid per killarmi: %d\n", getpid()); //TMP printf("Il mio pid per killarmi: %d\n", getpid()); //TMP
// CHECK_INPUT // CHECK_INPUT
input = check_input(argc, argv); _INPUT_S = check_input(argc, argv);
// SIGNAL // SIGNAL
printf(PSERVER "Setting up signals\n"); printf(PSERVER "Setting up signals\n");
@ -37,8 +37,8 @@ int main(int argc, char *argv[]){
//TODO: forse bisogna fare il reset della shm, perche in teoria mette a 0 quando crea //TODO: forse bisogna fare il reset della shm, perche in teoria mette a 0 quando crea
//ma nel caso in cui il campo non si fosse chiuso per qualche motivo forse quando lo riapre non lo azzera //ma nel caso in cui il campo non si fosse chiuso per qualche motivo forse quando lo riapre non lo azzera
printf(PSERVER "Setting up shm\n"); printf(PSERVER "Setting up shm\n");
shmid = getShmid(input.rows, input.collums); _SHMID = getShmid(_INPUT_S.rows, _INPUT_S.collums);
board = shmServerAt(shmid); _BOARD = shmServerAt(_SHMID);
// //
// SEM // SEM
@ -49,52 +49,51 @@ int main(int argc, char *argv[]){
// aperurta semaforo per connessione dei due client // aperurta semaforo per connessione dei due client
printf(PSERVER "Waiting for players...\n"); printf(PSERVER "Waiting for players...\n");
semOp(semid, 0, 1); semOp(_SEMID, 0, 1);
semOp(semid, 1, 1); semOp(_SEMID, 1, 1);
// aspetto che si connettano i due client // aspetto che si connettano i due client
//FIXME: forse non serve perche tanto deve aspettare che i player gli mandono un messaggio con il loro nome (a cose servono i semafori se ci sono i messaggi che fanno l'attesa non in polling aaaaaaaaa) //FIXME: forse non serve perche tanto deve aspettare che i player gli mandono un messaggio con il loro nome (a cose servono i semafori se ci sono i messaggi che fanno l'attesa non in polling aaaaaaaaa)
semOp(semid, 2, -1); semOp(_SEMID, 2, -1);
player_ds player; player_ds player;
char name[2][MAX_NAME]; char name[2][MAX_NAME];
pids[2];
// ricevuta nome primo client // ricevuta nome primo client
rcvPlayer(&player); rcvPlayer(&player);
strcpy(name[player.id], player.name_player); strcpy(name[player.id], player.name_player);
pids[player.id] = player.pid; _PIDS[player.id] = player.pid;
printf(PSERVER "Player %s connected\n", name[player.id]); printf(PSERVER "Player %s connected\n", name[player.id]);
// aspetto secondo client // aspetto secondo client
semOp(semid, 2, -1); semOp(_SEMID, 2, -1);
// ricevuta nome secondo client // ricevuta nome secondo client
rcvPlayer(&player); rcvPlayer(&player);
strcpy(name[player.id], player.name_player); strcpy(name[player.id], player.name_player);
pids[player.id] = player.pid; _PIDS[player.id] = player.pid;
printf(PSERVER "Player %s connected\n", name[player.id]); printf(PSERVER "Player %s connected\n", name[player.id]);
semOp(semid, 0, 1); semOp(_SEMID, 0, 1);
semOp(semid, 1, 1); semOp(_SEMID, 1, 1);
// PARTITA // PARTITA
printf(PSERVER "Starting game\n"); printf(PSERVER "Starting game\n");
setCollums(input.collums); setCollums(_INPUT_S.collums);
setRows(input.rows); setRows(_INPUT_S.rows);
int turns_left = input.rows * input.collums; int turns_left = _INPUT_S.rows * _INPUT_S.collums;
int turn = 0; int turn = 0;
tile_t result; tile_t result;
move_t move; move_t move;
do { do {
semOp(semid, turn, 1); semOp(_SEMID, turn, 1);
turn ^= 1; turn ^= 1;
printf(PSERVER "%s's turn\n", name[turn]); printf(PSERVER "%s's turn\n", name[turn]);
@ -104,12 +103,12 @@ int main(int argc, char *argv[]){
//TMP //TMP
printf("move: %d\n", move.move); printf("move: %d\n", move.move);
insertMove(board, move.move, turn); insertMove(_BOARD, move.move, turn);
printf("turns left: %d\n", turns_left - 1); printf("turns left: %d\n", turns_left - 1);
} while (--turns_left && !(result = checkWin(board, move.move))); } while (--turns_left && !(result = checkWin(_BOARD, move.move)));
if (!result) { //FIXME: change printf if (!result) { //FIXME: change printf
@ -123,8 +122,8 @@ int main(int argc, char *argv[]){
sndGame_end(&game_end); sndGame_end(&game_end);
sndGame_end(&game_end); sndGame_end(&game_end);
kill(pids[0], SIGUSR1); kill(_PIDS[0], SIGUSR1);
kill(pids[1], SIGUSR1); kill(_PIDS[1], SIGUSR1);
//TODO: end of game //TODO: end of game

View File

@ -27,7 +27,7 @@ void openMsgq() {
void sndId() { void sndId() {
msg_t msg = { msg_t msg = {
.mtype = 1, .mtype = 1,
.server_in = input, .server_in = _INPUT_S,
.player_id = 0 .player_id = 0
}; };

View File

@ -10,12 +10,12 @@ void resetServerSem(int semid);
void setupServerSem() { void setupServerSem() {
key_t semKey = ftok(KEYFILE, 'S'); key_t semKey = ftok(KEYFILE, 'S');
semid = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR); _SEMID = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR);
if (semid == -1) { if (_SEMID == -1) {
errExit("getsem", "F4Server"); errExit("getsem", "F4Server");
} }
resetServerSem(semid); resetServerSem(_SEMID);
} }
void semOp(int semid, short sem_num, short sem_op) { void semOp(int semid, short sem_num, short sem_op) {

View File

@ -52,13 +52,13 @@ void sigHandlerServer(int sig) {
if (sig == SIGTERM || sig == SIGHUP) { if (sig == SIGTERM || sig == SIGHUP) {
if (pids[0] > 0) { if (_PIDS[0] > 0) {
printf(PSERVER "Terminating player one\n"); printf(PSERVER "Terminating player one\n");
kill(pids[0], SIGTERM); kill(_PIDS[0], SIGTERM);
} }
if (pids[1] > 0) { if (_PIDS[1] > 0) {
printf(PSERVER "Terminating player two\n"); printf(PSERVER "Terminating player two\n");
kill(pids[1], SIGTERM); kill(_PIDS[1], SIGTERM);
} }
// msgq // msgq
@ -70,23 +70,23 @@ void sigHandlerServer(int sig) {
} }
// sem // sem
if (semid) { if (_SEMID) {
printf(PSERVER "Deleting sem\n"); printf(PSERVER "Deleting sem\n");
if (semctl(semid, 0, IPC_RMID, 0) == -1) { if (semctl(_SEMID, 0, IPC_RMID, 0) == -1) {
errExit("semctl", "sigHandlerServer"); errExit("semctl", "sigHandlerServer");
} }
} }
// shm // shm
if (board) { if (_BOARD) {
printf(PSERVER "Detathing shm\n"); printf(PSERVER "Detathing shm\n");
if (shmdt(board) == -1) { if (shmdt(_BOARD) == -1) {
errExit("shmdt", "sigHandlerServer"); errExit("shmdt", "sigHandlerServer");
} }
} }
if (shmid){ if (_SHMID){
printf(PSERVER "Deleting shm\n"); printf(PSERVER "Deleting shm\n");
if (shmctl(shmid, IPC_RMID, NULL) == -1) { if (shmctl(_SHMID, IPC_RMID, NULL) == -1) {
errExit("shmctl", "SigHandlerSever"); errExit("shmctl", "SigHandlerSever");
} }
} }