tmp
This commit is contained in:
parent
5f197dc386
commit
3ce987fe90
4
Makefile
4
Makefile
|
@ -67,6 +67,6 @@ ARGSCLIENT := test
|
|||
test: server client
|
||||
|
||||
server:
|
||||
gcc src/F4Server.c src/custom_sem.c src/custom_shm.c src/custom_signal.c src/errExit.c src/forza4.c src/server.c -o bin/F4Server -I inc/
|
||||
gcc src/F4Server.c src/custom_sem.c src/custom_shm.c src/custom_signal.c src/errExit.c src/forza4.c src/server.c src/nonsodovemetterle.c -o bin/F4Server -I inc/
|
||||
client:
|
||||
gcc src/F4Client.c src/custom_sem.c src/custom_shm.c src/custom_signal.c src/errExit.c src/forza4.c src/server.c -o bin/F4Client -I inc/
|
||||
gcc src/F4Client.c src/custom_sem.c src/custom_shm.c src/custom_signal.c src/errExit.c src/forza4.c src/nonsodovemetterle.c -o bin/F4Client -I inc/
|
|
@ -35,7 +35,6 @@ typedef struct {
|
|||
long mtype; // type 1
|
||||
int player_id;
|
||||
input_server_t server_in;
|
||||
char *name_player1, *name_player2;
|
||||
} msg_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -43,4 +42,12 @@ typedef struct {
|
|||
int move;
|
||||
} move_t;
|
||||
|
||||
typedef struct {
|
||||
long mtype; // type 3
|
||||
int id;
|
||||
char *name_player;
|
||||
} player_names_t;
|
||||
|
||||
#define MAX_NAME 16
|
||||
|
||||
#endif
|
|
@ -12,8 +12,7 @@
|
|||
#include <structures.h>
|
||||
#include <custom_shm.h>
|
||||
#include <errExit.h>
|
||||
|
||||
void printfClient(char *msg);
|
||||
#include <nonsodovemetterle.h>
|
||||
|
||||
tile_t *boardClient = NULL;
|
||||
|
||||
|
@ -27,11 +26,14 @@ void sigHandlerClient(int sig) {
|
|||
if (sig == SIGTERM) {
|
||||
// shm
|
||||
if (boardClient) {
|
||||
printf("\n");
|
||||
printfClient("Detathing shm");
|
||||
if (shmdt(boardClient) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
@ -41,6 +43,8 @@ void sigHandlerClient(int sig) {
|
|||
//TODO: mettere main ma non l'ho fatto per makefile
|
||||
int main(int argc, char *argv[]){
|
||||
|
||||
//TODO: controllo input
|
||||
|
||||
input_server_t input;
|
||||
|
||||
// SIGNAL
|
||||
|
@ -90,7 +94,7 @@ int main(int argc, char *argv[]){
|
|||
printfClient("Setting up sem\n");
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
int semid;
|
||||
if ((semid = semget(semKey, 2, S_IRUSR | S_IWUSR | IPC_CREAT)) == -1) {
|
||||
if ((semid = semget(semKey, 3, S_IRUSR | S_IWUSR | IPC_CREAT)) == -1) {
|
||||
errExit("getsem", "F4Client");
|
||||
}
|
||||
//
|
||||
|
@ -98,26 +102,37 @@ int main(int argc, char *argv[]){
|
|||
|
||||
|
||||
|
||||
semOp(semid, 0, -1); // aspetta che il server gli dia il permesso di connettersi
|
||||
|
||||
semOp(semid, msg.player_id, -1); // aspetta che il server gli dia il permesso di connettersi
|
||||
printfClient("Connecting to server...\n");
|
||||
semOp(semid, 2, 1); // finito operazioni di connessione
|
||||
|
||||
semOp(semid, 1, -1); // finito operazioni di connessione
|
||||
|
||||
// mando il mio nome al server
|
||||
printf("%s\n", argv[1]);
|
||||
player_names_t name = {.mtype = 3, .id = msg.player_id, .name_player = argv[1]};
|
||||
if (msgsnd(msgid, &name, sizeof(player_names_t) - sizeof(long), 0) == -1) {
|
||||
errExit("msgsnd", "mandare nome");
|
||||
}
|
||||
|
||||
printfClient("Searching for oponent...\n");
|
||||
|
||||
|
||||
//partita
|
||||
while (1) { //FIXME: potenzialmente da cambiare
|
||||
|
||||
|
||||
move_t move = {.mtype = 2};
|
||||
// PARTITA
|
||||
while (1) { //FIXME: potenzialmente da cambiare questo while (ma forse bastano i segnali)
|
||||
semOp(semid, msg.player_id, -1); // aspetto il mio turno
|
||||
|
||||
|
||||
printfServer("Tocca a te: \n");
|
||||
scanf("%d", &move.move);
|
||||
|
||||
if (msgsnd(msgid, &move, sizeof(move_t) - sizeof(long), 0) == -1) {
|
||||
errExit("msgsnd", "partita_client");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void printfClient(char *string){
|
||||
printf("\033[94m<Client>\033[39m %s", string);
|
||||
}
|
|
@ -14,6 +14,7 @@
|
|||
#include <custom_shm.h>
|
||||
#include <errExit.h>
|
||||
#include <forza4.h>
|
||||
#include <nonsodovemetterle.h>
|
||||
|
||||
int semid = 0;
|
||||
int msgid = 0;
|
||||
|
@ -21,8 +22,6 @@ int shmid = 0;
|
|||
|
||||
tile_t *board = NULL;
|
||||
|
||||
void printfServer(char *msg);
|
||||
|
||||
void sigHandlerServer(int sig) {
|
||||
if (sig == SIGINT) {
|
||||
//TODO:
|
||||
|
@ -34,9 +33,9 @@ void sigHandlerServer(int sig) {
|
|||
if (sig == SIGTERM) {
|
||||
//TODO: killare figli
|
||||
|
||||
printf("\n");
|
||||
// msgq
|
||||
if (msgid) {
|
||||
printf("\n");
|
||||
printfServer("Deleting msg\n");
|
||||
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
|
||||
errExit("msgctl", "sigHandlerServer");
|
||||
|
@ -45,7 +44,8 @@ void sigHandlerServer(int sig) {
|
|||
|
||||
// sem
|
||||
if (semid) {
|
||||
printfServer("Deleting sem\n");
|
||||
printf("\n");
|
||||
printfServer("Deleting sem");
|
||||
if (semctl(semid, 0, IPC_RMID, 0) == -1) {
|
||||
errExit("semctl", "sigHandlerServer");
|
||||
}
|
||||
|
@ -53,16 +53,21 @@ void sigHandlerServer(int sig) {
|
|||
|
||||
// shm
|
||||
if (board) {
|
||||
printfServer("Deleting and detathing shm");
|
||||
printf("\n");
|
||||
printfServer("Detathing shm");
|
||||
if (shmdt(board) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
if (shmid){
|
||||
printf("\n");
|
||||
printfServer("Deleting shm");
|
||||
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
|
||||
errExit("shmctl", "SigHandlerSever");
|
||||
}
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
@ -106,12 +111,12 @@ int main(int argc, char *argv[]){
|
|||
};
|
||||
|
||||
// msgsnd
|
||||
if (msgsnd(msgid, &msg, sizeof(msg_t)-sizeof(long), 0) == -1) {
|
||||
if (msgsnd(msgid, &msg, sizeof(msg_t) - sizeof(long), 0) == -1) {
|
||||
errExit("msgsnd1", "F4Server");
|
||||
}
|
||||
|
||||
msg.player_id = 1;
|
||||
if (msgsnd(msgid, &msg, sizeof(msg_t)-sizeof(long), 0) == -1) {
|
||||
if (msgsnd(msgid, &msg, sizeof(msg_t) - sizeof(long), 0) == -1) {
|
||||
errExit("msgsnd2", "F4Server");
|
||||
}
|
||||
|
||||
|
@ -126,7 +131,7 @@ int main(int argc, char *argv[]){
|
|||
//
|
||||
printfServer("Setting up sem\n");
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
semid = semget(semKey, 2, S_IRUSR | S_IWUSR | IPC_CREAT);
|
||||
semid = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (semid == -1) {
|
||||
errExit("getsem", "F4Server");
|
||||
}
|
||||
|
@ -135,16 +140,53 @@ int main(int argc, char *argv[]){
|
|||
//
|
||||
|
||||
|
||||
|
||||
semOp(semid, 0, 1); // aperurta semaforo per connessione dei due client
|
||||
semOp(semid, 0, 1);
|
||||
// aperurta semaforo per connessione dei due client
|
||||
printfServer("Waiting for players...\n");
|
||||
semOp(semid, 1, 0); // aspetto che si connettano i due client
|
||||
semOp(semid, 0, 1);
|
||||
semOp(semid, 1, 1);
|
||||
|
||||
|
||||
// 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)
|
||||
semOp(semid, 2, -1);
|
||||
|
||||
player_names_t names; // lo so si possono usare nomi piu chiari ma problema tuo (mi riferisco a te e me futuro)
|
||||
char **name = (char**)malloc(2 * sizeof(char *)); //FIXME: non riesco a farlo statico
|
||||
for (int h=0; h<2; h++) {
|
||||
name[h] = (char*)malloc(MAX_NAME * sizeof(char));
|
||||
}
|
||||
|
||||
// ricevuta nome primo client
|
||||
if (msgrcv(msgid, &names, sizeof(player_names_t) - sizeof(long), 3, 0) == -1) {
|
||||
errExit("msgrcv", "ricevuta primo nome");
|
||||
}
|
||||
printf("TEST\n");
|
||||
printf("%d\n", names.id);
|
||||
printf("%s\n", names.name_player);
|
||||
name[names.id] = names.name_player;
|
||||
printf("%s\n", names.name_player);
|
||||
|
||||
printfServer("Player ");
|
||||
printf("%s connected\n", name[names.id]); //
|
||||
|
||||
// aspetto secondo client
|
||||
semOp(semid, 2, -1);
|
||||
// ricevuta nome secondo client
|
||||
if (msgrcv(msgid, &names, sizeof(player_names_t) - sizeof(long), 3, 0) == -1) {
|
||||
errExit("msgrcv", "ricevuta secondo nome");
|
||||
}
|
||||
name[names.id] = names.name_player;
|
||||
|
||||
printfServer("Player ");
|
||||
printf("%s connected\n", name[names.id]);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// PARTITA
|
||||
printfServer("Starting game\n");
|
||||
|
||||
|
||||
// faccio quello che devo fare
|
||||
|
||||
int turns_left = input.rows * input.collums;
|
||||
int turn = 0;
|
||||
move_t move;
|
||||
|
@ -153,13 +195,17 @@ int main(int argc, char *argv[]){
|
|||
semOp(semid, turn, 1);
|
||||
turn = (turn + 1) % 2; // FIXME: si puo scrivere meglio?
|
||||
|
||||
printfServer("Player");
|
||||
printf("%d turn\n", turn);
|
||||
printfServer("");
|
||||
printf("%s's turn\n", name[turn]);
|
||||
|
||||
if (msgrcv(msgid, &move, sizeof(move_t) - sizeof(long), 2, 0) == -1) {
|
||||
errExit("msgrcv", "F4Client");
|
||||
}
|
||||
|
||||
//TMP
|
||||
printf("move: %d\n", move.move);
|
||||
printf("turns left: %d\n", turns_left - 1);
|
||||
|
||||
|
||||
} while (--turns_left && !checkWin(board, move.move, input.rows, input.collums));
|
||||
|
||||
|
@ -175,7 +221,3 @@ int main(int argc, char *argv[]){
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void printfServer(char *string){
|
||||
printf("\033[94m<Server>\033[39m %s", string);
|
||||
}
|
|
@ -24,7 +24,7 @@ int getSemid(key_t key, int size){
|
|||
|
||||
// mette i semafori a 0 e 2
|
||||
void resetServerSem(int semid){
|
||||
unsigned short val[2] = {0, 2}; // STO PENSANDO DI METTERE 1 1 PERCHE NON VUOLE FUNZIONARE MA ADESSO DEVO CENARE
|
||||
unsigned short val[3] = {0, 0, 0}; // player1, player2, server
|
||||
union semun arg;
|
||||
arg.array = val;
|
||||
|
||||
|
|
Loading…
Reference in New Issue