printf
This commit is contained in:
parent
9c5ba65529
commit
c4fb8a61ef
4
Makefile
4
Makefile
|
@ -78,6 +78,6 @@ test: comp
|
|||
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 src/nonsodovemetterle.c -o bin/F4Server -I inc/
|
||||
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/nonsodovemetterle.c -o bin/F4Client -I inc/
|
||||
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 -o bin/F4Client -I inc/
|
4
TODO.txt
4
TODO.txt
|
@ -9,4 +9,6 @@
|
|||
|
||||
- ho messo input del server globale, alcune funzioni non ne usufruiscono ancora (tip shm);
|
||||
|
||||
- printfServer mette \n all'inizio quindi non stampa lultima riga al momento
|
||||
- printfServer mette \n all'inizio quindi non stampa lultima riga al momento
|
||||
|
||||
- ho fatto le define per i semafori invece di usare 1/-1
|
|
@ -1,8 +1,13 @@
|
|||
#ifndef SEMAPHORE_H
|
||||
#define SEMAPHORE_H
|
||||
|
||||
#define CLIENT0 0
|
||||
#define CLIENT1 1
|
||||
#define SERVER 2
|
||||
|
||||
void setupServerSem();
|
||||
|
||||
int getSemid(key_t key, int size);
|
||||
void semOp(int semid, short sem_num, short sem_op);
|
||||
void resetServerSem(int semid);
|
||||
|
||||
#endif
|
|
@ -1,7 +0,0 @@
|
|||
#ifndef NONSODOVEMETTERLE_H
|
||||
#define NONSODOVEMETTERLE_H
|
||||
|
||||
void printfServer(char *msg);
|
||||
void printfClient(char *msg);
|
||||
|
||||
#endif
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define PSERVER "\033[34m<Server>\033[39m "
|
||||
#define PCLIENT "\033[94m<Client>\033[39m "
|
||||
#define PHELP "\033[92m<Help>\033[39m "
|
||||
|
||||
// semaphore
|
||||
union semun {
|
||||
int val;
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include <structures.h>
|
||||
#include <custom_shm.h>
|
||||
#include <errExit.h>
|
||||
#include <nonsodovemetterle.h>
|
||||
#include <custom_msgq.h>
|
||||
#include <forza4.h>
|
||||
|
||||
|
@ -36,7 +35,7 @@ void sigHandlerClient(int sig) {
|
|||
if (sig == SIGTERM || sig == SIGHUP) {
|
||||
// shm
|
||||
if (boardClient) {
|
||||
printfClient("Detathing shm");
|
||||
printf(PCLIENT "Detathing shm\n");
|
||||
if (shmdt(boardClient) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
|
@ -61,7 +60,7 @@ int main(int argc, char *argv[]){
|
|||
checkClientinput(argc, argv);
|
||||
|
||||
// SIGNAL
|
||||
printfClient("Setting up signal\n");
|
||||
printf(PCLIENT "Setting up signal\n");
|
||||
sigset_t mySet;
|
||||
sigfillset(&mySet);
|
||||
sigdelset(&mySet, SIGINT);
|
||||
|
@ -85,7 +84,7 @@ int main(int argc, char *argv[]){
|
|||
//
|
||||
|
||||
// MSGQ
|
||||
printfClient("Setting up msgq");
|
||||
printf(PCLIENT "Setting up msgq\n");
|
||||
key_t msgKey = ftok(KEYFILE, 'M');
|
||||
_MSGQID = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (_MSGQID == -1) {
|
||||
|
@ -97,7 +96,7 @@ int main(int argc, char *argv[]){
|
|||
msg_t msg;
|
||||
|
||||
// msgrcv
|
||||
printfClient("Waiting for message...");
|
||||
printf(PCLIENT "Waiting for message...\n");
|
||||
rcvMsg(&msg);
|
||||
|
||||
input = msg.server_in;
|
||||
|
@ -105,13 +104,13 @@ int main(int argc, char *argv[]){
|
|||
|
||||
|
||||
// SHM
|
||||
printfClient("Setting up shm");
|
||||
printf(PCLIENT "Setting up shm");
|
||||
int shmBoardid = getShmid(input.rows, input.collums);
|
||||
boardClient = shmClientAt(shmBoardid);
|
||||
//
|
||||
|
||||
// SEM
|
||||
printfClient("Setting up sem");
|
||||
printf(PCLIENT "Setting up sem\n");
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
int semid;
|
||||
if ((semid = semget(semKey, 3, S_IRUSR | S_IWUSR | IPC_CREAT)) == -1) {
|
||||
|
@ -123,7 +122,7 @@ int main(int argc, char *argv[]){
|
|||
|
||||
// aspetto che il server mi dia il permesso di collegarmi e segnalo collegamento al server
|
||||
semOp(semid, msg.player_id, -1);
|
||||
printfClient("Connecting to server...");
|
||||
printf(PCLIENT "Connecting to server...\n");
|
||||
semOp(semid, 2, 1);
|
||||
|
||||
|
||||
|
@ -132,11 +131,11 @@ int main(int argc, char *argv[]){
|
|||
strcpy(player.name_player, argv[1]);
|
||||
sndPlayer(&player);
|
||||
|
||||
printfClient("Searching for oponent...");
|
||||
printf(PCLIENT "Searching for oponent...\n");
|
||||
|
||||
semOp(semid, msg.player_id, -1);
|
||||
|
||||
printfClient("Opponent found");
|
||||
printf(PCLIENT "Opponent found\n");
|
||||
|
||||
|
||||
|
||||
|
@ -147,17 +146,19 @@ int main(int argc, char *argv[]){
|
|||
// aspetto il mio turno
|
||||
semOp(semid, msg.player_id, -1);
|
||||
|
||||
printBoard(boardClient);
|
||||
|
||||
// input e controllo
|
||||
printfServer("Your Turn: ");
|
||||
printf("Your Turn: ");
|
||||
do {
|
||||
scanf("%d", &move.move);
|
||||
scanf("%d", &move.move); //FIXME: c'è di meglio che scanf?
|
||||
move.move--;
|
||||
//FIXME: current_move = checkMove(move.move);
|
||||
} while(move.move < 0);
|
||||
|
||||
// mando mossa al server
|
||||
sndMove(&move);
|
||||
printfClient("Waiting for oponent"); //FIXME: solo se la partita non è finita
|
||||
printf(PCLIENT "Waiting for oponent\n"); //FIXME: solo se la partita non è finita
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -165,12 +166,12 @@ int main(int argc, char *argv[]){
|
|||
|
||||
void checkClientinput(int argc, char *argv[]){
|
||||
if (argc < 2) {
|
||||
printf("\033[92m<Help>\033[39m ./F4Client PLAYER_NAME\n"
|
||||
printf(PHELP "./F4Client PLAYER_NAME\n"
|
||||
"\t- PLAYER_NAME \t\tplayer name\n"
|
||||
);
|
||||
exit(EXIT_SUCCESS);
|
||||
} else if (argc > 2) {
|
||||
printfClient("To many arguments!");
|
||||
printf(PCLIENT "To many arguments!");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include <custom_shm.h>
|
||||
#include <errExit.h>
|
||||
#include <forza4.h>
|
||||
#include <nonsodovemetterle.h>
|
||||
#include <custom_msgq.h>
|
||||
#include <custom_sig.h>
|
||||
|
||||
|
@ -27,13 +26,13 @@ int main(int argc, char *argv[]){
|
|||
input = check_input(argc, argv);
|
||||
|
||||
// SIGNAL
|
||||
printfServer("Setting up signals");
|
||||
printf(PSERVER "Setting up signals\n");
|
||||
setupServerSignalHandler();
|
||||
//
|
||||
|
||||
|
||||
// MSGQ
|
||||
printfServer("Setting up msgq");
|
||||
printf(PSERVER "Setting up msgq\n");
|
||||
setupServerMsgq();
|
||||
|
||||
//
|
||||
|
@ -41,25 +40,19 @@ int main(int argc, char *argv[]){
|
|||
// SHM
|
||||
//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
|
||||
printfServer("Setting up shm");
|
||||
printf(PSERVER "Setting up shm\n");
|
||||
shmid = getShmid(input.rows, input.collums);
|
||||
board = shmServerAt(shmid);
|
||||
//
|
||||
|
||||
// SEM
|
||||
printfServer("Setting up sem");
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
semid = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (semid == -1) {
|
||||
errExit("getsem", "F4Server");
|
||||
}
|
||||
|
||||
resetServerSem(semid);
|
||||
printf(PSERVER "Setting up sem\n");
|
||||
setupServerSem();
|
||||
//
|
||||
|
||||
|
||||
// aperurta semaforo per connessione dei due client
|
||||
printfServer("Waiting for players...");
|
||||
printf(PSERVER "Waiting for players...\n");
|
||||
semOp(semid, 0, 1);
|
||||
semOp(semid, 1, 1);
|
||||
|
||||
|
@ -78,8 +71,7 @@ int main(int argc, char *argv[]){
|
|||
strcpy(name[player.id], player.name_player);
|
||||
pids[player.id] = player.pid;
|
||||
|
||||
printfServer("Player ");
|
||||
printf("%s connected", name[player.id]);
|
||||
printf(PSERVER "Player %s connected", name[player.id]);
|
||||
|
||||
// aspetto secondo client
|
||||
semOp(semid, 2, -1);
|
||||
|
@ -89,15 +81,14 @@ int main(int argc, char *argv[]){
|
|||
strcpy(name[player.id], player.name_player);
|
||||
pids[player.id] = player.pid;
|
||||
|
||||
printfServer("Player ");
|
||||
printf("%s connected", name[player.id]);
|
||||
printf(PSERVER "Player %s connected", name[player.id]);
|
||||
|
||||
semOp(semid, 0, 1);
|
||||
semOp(semid, 1, 1);
|
||||
|
||||
|
||||
// PARTITA
|
||||
printfServer("Starting game");
|
||||
printf(PSERVER "Starting game\n");
|
||||
setCollums(input.collums);
|
||||
setRows(input.rows);
|
||||
|
||||
|
@ -110,8 +101,7 @@ int main(int argc, char *argv[]){
|
|||
semOp(semid, turn, 1);
|
||||
turn ^= 1;
|
||||
|
||||
printfServer("");
|
||||
printf("%s's turn\n", name[turn]);
|
||||
printf(PSERVER "%s's turn\n", name[turn]);
|
||||
|
||||
rcvMove(&move);
|
||||
|
||||
|
@ -124,10 +114,10 @@ int main(int argc, char *argv[]){
|
|||
|
||||
|
||||
if (!result) { //FIXME: change printf
|
||||
printfServer("Game ended in a draw");
|
||||
printf(PSERVER "Game ended in a draw\n");
|
||||
|
||||
} else {
|
||||
printfServer("Game ended");
|
||||
printf(PSERVER "Game ended\n");
|
||||
}
|
||||
game_end_t game_end = {.mtype = 4, .winner = result};
|
||||
sndGame_end(&game_end);
|
||||
|
|
|
@ -6,6 +6,18 @@
|
|||
#include <structures.h>
|
||||
#include <errExit.h>
|
||||
|
||||
void resetServerSem(int semid);
|
||||
|
||||
void setupServerSem() {
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
semid = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (semid == -1) {
|
||||
errExit("getsem", "F4Server");
|
||||
}
|
||||
|
||||
resetServerSem(semid);
|
||||
}
|
||||
|
||||
void semOp(int semid, short sem_num, short sem_op) {
|
||||
struct sembuf sop = {.sem_num = sem_num, .sem_op = sem_op, .sem_flg = 0};
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
#include <custom_sig.h>
|
||||
#include <structures.h>
|
||||
#include <nonsodovemetterle.h>
|
||||
#include <errExit.h>
|
||||
#include <custom_msgq.h>
|
||||
|
||||
|
@ -25,7 +24,7 @@ void sigHandlerServer(int sig) {
|
|||
// UPDATE: funzia ma è piu bella la mia sol?
|
||||
// sigint_count--;
|
||||
// if (sigint_count > 0) {
|
||||
// printfServer("Press again Ctrl^C to exit ");
|
||||
// printf(PSERVER "Press again Ctrl^C to exit ");
|
||||
// printf("(whitin %d sec)\n", TIME_TO_RESET);
|
||||
// alarm(TIME_TO_RESET);
|
||||
// } else {
|
||||
|
@ -35,38 +34,36 @@ void sigHandlerServer(int sig) {
|
|||
// }
|
||||
|
||||
// if (sig == SIGALRM) {
|
||||
// printfServer("");
|
||||
// printf(PSERVER "");
|
||||
// printf("Time to exit (%d sec) expired", TIME_TO_RESET);
|
||||
// sigint_count = 2;
|
||||
// }
|
||||
|
||||
if (sig == SIGINT) {
|
||||
printfServer("Press again Ctrl^C to exit ");
|
||||
printf("(whitin %d sec)\n", TIME_TO_RESET);
|
||||
printf(PSERVER "Press again Ctrl^C to exit (whitin %d sec)\n", TIME_TO_RESET);
|
||||
signal(SIGINT, sigIntHandler2);
|
||||
alarm(TIME_TO_RESET);
|
||||
}
|
||||
|
||||
if (sig == SIGALRM) {
|
||||
printfServer("");
|
||||
printf("Time to exit (%d sec) expired", TIME_TO_RESET);
|
||||
printf(PSERVER "ime to exit (%d sec) expired\n", TIME_TO_RESET);
|
||||
signal(SIGINT, sigHandlerServer);
|
||||
}
|
||||
|
||||
|
||||
if (sig == SIGTERM || sig == SIGHUP) {
|
||||
if (pids[0] > 0) {
|
||||
printfServer("Terminating player one");
|
||||
printf(PSERVER "Terminating player one\n");
|
||||
kill(pids[0], SIGTERM);
|
||||
}
|
||||
if (pids[1] > 0) {
|
||||
printfServer("Terminating player two");
|
||||
printf(PSERVER "Terminating player two\n");
|
||||
kill(pids[1], SIGTERM);
|
||||
}
|
||||
|
||||
// msgq
|
||||
if (_MSGQID) {
|
||||
printfServer("Deleting msg");
|
||||
printf(PSERVER "Deleting msg\n");
|
||||
if (msgctl(_MSGQID, IPC_RMID, NULL) == -1) { //TODO: funzione
|
||||
errExit("msgctl", "sigHandlerServer");
|
||||
}
|
||||
|
@ -74,7 +71,7 @@ void sigHandlerServer(int sig) {
|
|||
|
||||
// sem
|
||||
if (semid) {
|
||||
printfServer("Deleting sem");
|
||||
printf(PSERVER "Deleting sem\n");
|
||||
if (semctl(semid, 0, IPC_RMID, 0) == -1) {
|
||||
errExit("semctl", "sigHandlerServer");
|
||||
}
|
||||
|
@ -82,19 +79,18 @@ void sigHandlerServer(int sig) {
|
|||
|
||||
// shm
|
||||
if (board) {
|
||||
printfServer("Detathing shm");
|
||||
printf(PSERVER "Detathing shm\n");
|
||||
if (shmdt(board) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
if (shmid){
|
||||
printfServer("Deleting shm");
|
||||
printf(PSERVER "Deleting shm\n");
|
||||
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
|
||||
errExit("shmctl", "SigHandlerSever");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
void printfServer(char *string){
|
||||
printf("\n\033[34m<Server>\033[39m %s", string);
|
||||
}
|
||||
|
||||
void printfClient(char *string){
|
||||
printf("\n\033[94m<Client>\033[39m %s", string);
|
||||
}
|
Loading…
Reference in New Issue