This commit is contained in:
Lorenzo Bianchi 2023-05-16 17:07:35 +02:00
parent 33bbc9b578
commit d674dbbc7f
3 changed files with 26 additions and 11 deletions

View File

@ -33,7 +33,7 @@ typedef enum {
//message queue
typedef struct {
long mtype; // type 1
int board_id;
int player_id;
input_server_t server_in;
char *name_player1, *name_player2;
} msg_t;

View File

@ -20,6 +20,7 @@ void sigHandlerClient(int sig) {
if (sig == SIGTERM) {
//TODO: in teoria non fa niente di speciale qua, in quanto il server dovrebbe chiudere tutto
// invece no ce almeno la detach da fare
}
exit(0);
@ -88,5 +89,13 @@ int client(){
semOp(semid, 1, -1); // finito operazioni di connessione
//partita
while (1) { //FIXME: potenzialmente da cambiare
semOp(semid, msg.player_id, -1); // aspetto il mio turno
}
return 0;
}

View File

@ -75,6 +75,8 @@ int main(int argc, char *argv[]){
// MSGQ
//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
key_t msgKey = ftok(KEYFILE, 'M');
msgid = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR);
if (msgid == -1){
@ -83,8 +85,8 @@ int main(int argc, char *argv[]){
// msg
msg_t msg = {
.mtype = 1,
.server_in = input
//.playerid = 1;
.server_in = input,
.player_id = 0
};
// msgsnd
@ -92,7 +94,7 @@ int main(int argc, char *argv[]){
errExit("msgsnd1", "F4Server");
}
//msg.playerid = 2;
msg.player_id = 1;
if (msgsnd(msgid, &msg, sizeof(msg_t)-sizeof(long), 0) == -1) {
errExit("msgsnd2", "F4Server");
}
@ -123,25 +125,29 @@ int main(int argc, char *argv[]){
// faccio quello che devo fare
int turns_left = input.rows * input.collums;
int turn = 0;
move_t move;
do {
if(turns_left % 2) { //TODO: da scegliere chi fare iniziare
semOp(semid, 0, 1);
}else {
semOp(semid, 1, 1);
}
semOp(semid, turn, 1);
turn = (turn + 1) % 2; // FIXME: si puo scrivere meglio?
if (msgrcv(msgid, &move, sizeof(move_t) - sizeof(long), 2, 0) == -1) {
errExit("msgrcv", "F4Client");
}
} while(--turns_left && !checkWin(board, move.move, input.rows, input.collums));
} while (--turns_left && !checkWin(board, move.move, input.rows, input.collums));
if (!turns_left && checkWinAll(board, input.rows, input.collums) == 0) {
//TODO: draw
} else {
//TODO: win
}
//TODO: end of game
return 0;
}