diff --git a/Makefile b/Makefile index a431782..3d28093 100644 --- a/Makefile +++ b/Makefile @@ -82,4 +82,4 @@ comp: server_c client_c server_c: gcc src/F4Server.c src/custom_sem.c src/custom_shm.c src/custom_sig.c src/custom_msgq.c src/errExit.c src/forza4.c src/server.c -o bin/F4Server -I inc/ client_c: - gcc src/F4Client.c src/custom_sem.c src/custom_shm.c src/custom_sig.c src/custom_msgq.c src/errExit.c src/forza4.c src/server.c -o bin/F4Client -I inc/ \ No newline at end of file + gcc src/F4Client.c src/custom_sem.c src/custom_shm.c src/custom_sig.c src/custom_msgq.c src/errExit.c src/forza4.c src/client.c src/server.c -o bin/F4Client -I inc/ \ No newline at end of file diff --git a/inc/client.h b/inc/client.h new file mode 100644 index 0000000..b717afb --- /dev/null +++ b/inc/client.h @@ -0,0 +1,6 @@ +#ifndef CLIENT_H +#define CLIENT_H + +void setupClient(int argc, char *argv[]); + +#endif \ No newline at end of file diff --git a/inc/custom_shm.h b/inc/custom_shm.h index 330515e..5b808cc 100644 --- a/inc/custom_shm.h +++ b/inc/custom_shm.h @@ -7,8 +7,8 @@ extern int _SHMID; void setupServerShm(); -int getShmid(int row, int col); -tile_t * shmServerAt(int shmid); +int getShmid(); +tile_t * shmServerAt(); tile_t * shmClientAt(int shmid); void shmDt(void *shm_ptr); void shmServerRm(int shmid); diff --git a/inc/server.h b/inc/server.h index 5ae6ad9..39a13a1 100644 --- a/inc/server.h +++ b/inc/server.h @@ -19,6 +19,4 @@ typedef struct { void setupServer(int argc, char *argv[]); -input_server_t check_input(int argc, char *argv[]); - #endif \ No newline at end of file diff --git a/src/F4Client.c b/src/F4Client.c index afc3f5e..df8729f 100644 --- a/src/F4Client.c +++ b/src/F4Client.c @@ -16,8 +16,9 @@ #include #include #include +#include -int game_state; +int game_state; //FIXME: non ancora utilizzato tile_t *boardClient; @@ -59,7 +60,7 @@ int main(int argc, char *argv[]){ printf("Il mio pid per killarmi: %d\n", getpid()); //TMP - checkClientinput(argc, argv); + setupClient(argc, argv); // SIGNAL printf(PCLIENT "Setting up signal\n"); @@ -107,7 +108,7 @@ int main(int argc, char *argv[]){ // SHM printf(PCLIENT "Setting up shm\n"); - int shmBoardid = getShmid(input.rows, input.collums); + int shmBoardid = getShmid(); boardClient = shmClientAt(shmBoardid); // @@ -171,20 +172,4 @@ int main(int argc, char *argv[]){ } return 0; -} - -void checkClientinput(int argc, char *argv[]){ - if (argc < 2) { - printf(PHELP "./F4Client PLAYER_NAME\n" - "\t- PLAYER_NAME \t\tplayer name\n" - ); - exit(EXIT_SUCCESS); - } else if (argc > 2) { - printf(PCLIENT "To many arguments!"); - exit(EXIT_FAILURE); - } - - if (!argv[1] || strlen(argv[1]) > MAX_NAME) { - errExitMsg("Invalid player name"); - } } \ No newline at end of file diff --git a/src/F4Server.c b/src/F4Server.c index e706c08..c05ea8a 100644 --- a/src/F4Server.c +++ b/src/F4Server.c @@ -24,54 +24,49 @@ int main(int argc, char *argv[]){ setupServer(argc, argv); - // aperta semaforo per connessione dei due client printf(PSERVER "Waiting for players...\n"); - semOp(_SEMID, 0, 1); - semOp(_SEMID, 1, 1); + semOp(_SEMID, CLIENT0, 1); + semOp(_SEMID, CLIENT1, 1); - // aspetto che si connettano i due client - semOp(_SEMID, 2, -1); player_ds player; char name[2][MAX_NAME]; - // ricevuta nome primo client + // aspetto PRIMO client + semOp(_SEMID, SERVER, -1); + // ricevo nome primo client rcvPlayer(&player); - strcpy(name[player.id], player.name_player); _PIDS[player.id] = player.pid; - printf(PSERVER "Player %s connected\n", name[player.id]); - // aspetto secondo client - semOp(_SEMID, 2, -1); + // aspetto SECONDO client + semOp(_SEMID, SERVER, -1); // ricevo nome secondo client rcvPlayer(&player); - strcpy(name[player.id], player.name_player); _PIDS[player.id] = player.pid; - printf(PSERVER "Player %s connected\n", name[player.id]); - semOp(_SEMID, 0, 1); - semOp(_SEMID, 1, 1); + // avvisto inizio partita + semOp(_SEMID, CLIENT0, 1); + semOp(_SEMID, CLIENT1, 1); // PARTITA printf(PSERVER "Starting game\n"); - int turns_left = _INPUT_S.rows * _INPUT_S.collums; int turn = 0; tile_t result; move_t move; do { - // apro semaforo al player + // apro semaforo al player di turno semOp(_SEMID, turn, 1); printf(PSERVER "%s's turn\n", name[turn]); @@ -88,12 +83,13 @@ int main(int argc, char *argv[]){ // dico al player che la mossa รจ stata effettuata per fargli stampare il campo semOp(_SEMID, turn, 1); + // next turn turn ^= 1; } while (--turns_left && !(result = checkWin(_BOARD, move.move))); - if (!result) { //FIXME: change printf + if (!result) { printf(PSERVER "Game ended in a draw\n"); } else { diff --git a/src/client.c b/src/client.c new file mode 100644 index 0000000..c1f9609 --- /dev/null +++ b/src/client.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +void checkClientinput(int argc, char *argv[]); + +void setupClient(int argc, char *argv[]) { + checkClientinput(argc, argv); +} + +void checkClientinput(int argc, char *argv[]){ + if (argc < 2) { + printf(PHELP "./F4Client PLAYER_NAME\n" + "\t- PLAYER_NAME \t\tplayer name\n" + ); + exit(EXIT_SUCCESS); + } else if (argc > 2) { + printf(PCLIENT "To many arguments!"); + exit(EXIT_FAILURE); + } + + if (!argv[1] || strlen(argv[1]) > MAX_NAME) { + errExitMsg("Invalid player name"); + } +} \ No newline at end of file diff --git a/src/custom_shm.c b/src/custom_shm.c index fcf9b19..9d5a345 100644 --- a/src/custom_shm.c +++ b/src/custom_shm.c @@ -8,26 +8,31 @@ int _SHMID; +int getShmid(); +tile_t *shmServerAt(); + void setupServerShm() { - _SHMID = getShmid(_ROWS, _COLLUMS); - _BOARD = shmServerAt(_SHMID); + _SHMID = getShmid(); + _BOARD = shmServerAt(); for (int i=0; i < _ROWS * _COLLUMS; i++) { _BOARD[i] = EMPTY; } } -int getShmid(int row, int col) { - int shmid = shmget(ftok(KEYFILE, 'z'), row * col * sizeof(tile_t), IPC_CREAT | S_IRUSR | S_IWUSR); +int getShmid() { + int shmid = shmget(ftok(KEYFILE, 'z'), _ROWS * _COLLUMS * sizeof(tile_t), IPC_CREAT | S_IRUSR | S_IWUSR); + printf("%d\n", shmid); if (shmid == -1) { errExit("shmget", "getShmid"); } + return shmid; } -tile_t * shmServerAt(int shmid) { - tile_t *board = (tile_t *)shmat(shmid, NULL, 0); +tile_t *shmServerAt() { + tile_t *board = (tile_t *)shmat(_SHMID, NULL, 0); if (board == SHMERR) { errExit("shmat", "shmServerAt"); } @@ -44,7 +49,7 @@ tile_t * shmClientAt(int shmid) { return board; } -void shmDt(void *shm_ptr) { +void shmDt(void *shm_ptr) { //FIXME: sono tutte var globali if (shmdt(shm_ptr) == -1) { errExit("shmdt", "shmDt"); } diff --git a/src/server.c b/src/server.c index 30b0b5d..d47bee2 100644 --- a/src/server.c +++ b/src/server.c @@ -17,9 +17,11 @@ input_server_t _INPUT_S; +input_server_t checkServerInput(int argc, char *argv[]); + void setupServer(int argc, char *argv[]){ // CHECK_INPUT - _INPUT_S = check_input(argc, argv); + _INPUT_S = checkServerInput(argc, argv); _ROWS = _INPUT_S.rows; _COLLUMS = _INPUT_S.collums; @@ -42,7 +44,7 @@ void setupServer(int argc, char *argv[]){ } -input_server_t check_input(int argc, char *argv[]){ +input_server_t checkServerInput(int argc, char *argv[]){ if (argc < 5) { printf("\033[92m\033[39m ./F4Server ROW COL PLAYER1 PLAYER2\n" "\t- ROW \t\tnumber of rows\n"