edi sega a smash
This commit is contained in:
parent
d674dbbc7f
commit
5196c1a526
4
Makefile
4
Makefile
|
@ -20,6 +20,8 @@ TARGET1 := $(BIN_DIR)/F4Server
|
|||
TARGET2 := $(BIN_DIR)/F4Client
|
||||
INCLUDE := -I $(INC_DIR)
|
||||
|
||||
ARGS := 6 7 O X
|
||||
|
||||
|
||||
# [--------------------FUNCTION--------------------]
|
||||
# SRCS extract all file in src/
|
||||
|
@ -35,7 +37,7 @@ all: execute
|
|||
#---------------------------------------------------
|
||||
execute: linking_s linking_c
|
||||
@ echo execute...
|
||||
@ ./$(TARGET1)
|
||||
@ ./$(TARGET1) $(ARGS)
|
||||
@ echo ...terminate
|
||||
#---------------------------------------------------
|
||||
linking_s: $(OBJS) $(BIN_DIR)
|
||||
|
|
|
@ -12,15 +12,25 @@
|
|||
#include <custom_shm.h>
|
||||
#include <errExit.h>
|
||||
|
||||
void printfClient(char *msg);
|
||||
|
||||
tile_t *boardClient = NULL;
|
||||
|
||||
void sigHandlerClient(int sig) {
|
||||
if (sig == SIGINT) {
|
||||
//TODO:
|
||||
|
||||
sig = SIGTERM;
|
||||
}
|
||||
|
||||
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
|
||||
// shm
|
||||
if (boardClient) {
|
||||
printfClient("Detathing shm");
|
||||
if (shmdt(boardClient) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
@ -28,11 +38,12 @@ void sigHandlerClient(int sig) {
|
|||
|
||||
|
||||
//TODO: mettere main ma non l'ho fatto per makefile
|
||||
int client(){
|
||||
int client(int argc, char *argv[]){
|
||||
|
||||
input_server_t input;
|
||||
|
||||
// SIGNAL
|
||||
printfClient("Setting up signal\n");
|
||||
sigset_t mySet;
|
||||
sigfillset(&mySet);
|
||||
sigdelset(&mySet, SIGINT);
|
||||
|
@ -48,6 +59,7 @@ int client(){
|
|||
//
|
||||
|
||||
// MSGQ
|
||||
printfClient("Setting up msgq\n");
|
||||
key_t msgKey = ftok(KEYFILE, 'M');
|
||||
int msgid = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (msgid == -1) {
|
||||
|
@ -58,6 +70,7 @@ int client(){
|
|||
msg_t msg;
|
||||
|
||||
// msgrcv
|
||||
printfClient("Waiting for message...\n");
|
||||
if (msgrcv(msgid, &msg, sizeof(msg_t) - sizeof(long), 1, 0) == -1) {
|
||||
errExit("msgrcv", "F4Client");
|
||||
}
|
||||
|
@ -67,11 +80,13 @@ int client(){
|
|||
|
||||
|
||||
// SHM
|
||||
printfClient("Setting up shm\n");
|
||||
int shmBoardid = getShmid(input.rows, input.collums);
|
||||
tile_t *board = shmClientAt(shmBoardid);
|
||||
boardClient = shmClientAt(shmBoardid);
|
||||
//
|
||||
|
||||
// SEM
|
||||
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) {
|
||||
|
@ -84,18 +99,24 @@ int client(){
|
|||
|
||||
semOp(semid, 0, -1); // aspetta che il server gli dia il permesso di connettersi
|
||||
|
||||
printf("\033[94m<Client>\033[39m Connecting to server...\n");
|
||||
|
||||
printfClient("Connecting to server...\n");
|
||||
|
||||
semOp(semid, 1, -1); // finito operazioni di connessione
|
||||
|
||||
|
||||
printfClient("Searching for oponent...\n");
|
||||
|
||||
|
||||
//partita
|
||||
while (1) { //FIXME: potenzialmente da cambiare
|
||||
semOp(semid, msg.player_id, -1); // aspetto il mio turno
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void printfClient(char *string){
|
||||
printf("\033[94m<Client>\033[39m%s", string);
|
||||
}
|
|
@ -15,40 +15,54 @@
|
|||
#include <errExit.h>
|
||||
#include <forza4.h>
|
||||
|
||||
int semid = 0;
|
||||
int msgid = 0;
|
||||
int shmid = 0;
|
||||
|
||||
int semid;
|
||||
int msgid;
|
||||
int shmid;
|
||||
tile_t *board = NULL;
|
||||
|
||||
tile_t *board;
|
||||
void printfServer(char *msg);
|
||||
|
||||
void sigHandlerServer(int sig) {
|
||||
if (sig == SIGINT) {
|
||||
//TODO:
|
||||
|
||||
|
||||
// per il secondo SIGINT basta modificare il sig in SIGTERM
|
||||
sig = SIGTERM; // per il secondo SIGINT basta modificare il sig in SIGTERM
|
||||
}
|
||||
|
||||
if (sig == SIGTERM) {
|
||||
//TODO: killare figli
|
||||
|
||||
printf("\n");
|
||||
// msgq
|
||||
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
|
||||
errExit("msgctl", "sigHandlerServer");
|
||||
if (msgid) {
|
||||
printfServer("Deleting msg\n");
|
||||
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
|
||||
errExit("msgctl", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
|
||||
// sem
|
||||
if (semctl(semid, 0, IPC_RMID, 0) == -1) {
|
||||
errExit("semctl", "sigHandlerServer");
|
||||
if (semid) {
|
||||
printfServer("Deleting sem\n");
|
||||
if (semctl(semid, 0, IPC_RMID, 0) == -1) {
|
||||
errExit("semctl", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
|
||||
// shm
|
||||
if (shmdt(board) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
if (board) {
|
||||
printfServer("Deleting and detathing shm");
|
||||
if (shmdt(board) == -1) {
|
||||
errExit("shmdt", "sigHandlerServer");
|
||||
}
|
||||
}
|
||||
if (shmid){
|
||||
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
|
||||
errExit("shmctl", "SigHandlerSever");
|
||||
}
|
||||
}
|
||||
if (shmctl(shmid, IPC_RMID, NULL) == -1)
|
||||
errExit("shmctl", "SigHandlerSever");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
@ -59,6 +73,7 @@ int main(int argc, char *argv[]){
|
|||
input_server_t input = check_input(argc, argv);
|
||||
|
||||
// SIGNAL
|
||||
printfServer("Setting up signals\n");
|
||||
sigset_t mySet;
|
||||
sigfillset(&mySet);
|
||||
sigdelset(&mySet, SIGINT);
|
||||
|
@ -75,8 +90,9 @@ int main(int argc, char *argv[]){
|
|||
|
||||
|
||||
// MSGQ
|
||||
printfServer("Setting up msgq\n");
|
||||
//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
|
||||
key_t msgKey = ftok(KEYFILE, 'M');
|
||||
msgid = msgget(msgKey, IPC_CREAT | S_IRUSR | S_IWUSR);
|
||||
if (msgid == -1){
|
||||
|
@ -102,11 +118,13 @@ int main(int argc, char *argv[]){
|
|||
//
|
||||
|
||||
// SHM
|
||||
printfServer("Setting up shm\n");
|
||||
shmid = getShmid(input.rows, input.collums);
|
||||
board = shmServerAt(shmid);
|
||||
//
|
||||
|
||||
// SEM
|
||||
//
|
||||
printfServer("Setting up sem\n");
|
||||
key_t semKey = ftok(KEYFILE, 'S');
|
||||
semid = semget(semKey, 2, S_IRUSR | S_IWUSR | IPC_CREAT);
|
||||
if (semid == -1) {
|
||||
|
@ -117,8 +135,9 @@ int main(int argc, char *argv[]){
|
|||
//
|
||||
|
||||
|
||||
|
||||
|
||||
semOp(semid, 0, 2); // aperurta semaforo per connessione dei due client
|
||||
printfServer("Waiting for players...\n");
|
||||
semOp(semid, 0, 0); // aspetto che si connettano i due client
|
||||
|
||||
|
||||
|
@ -132,6 +151,9 @@ 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);
|
||||
|
||||
if (msgrcv(msgid, &move, sizeof(move_t) - sizeof(long), 2, 0) == -1) {
|
||||
errExit("msgrcv", "F4Client");
|
||||
}
|
||||
|
@ -150,4 +172,8 @@ int main(int argc, char *argv[]){
|
|||
//TODO: end of game
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void printfServer(char *string){
|
||||
printf("\033[94m<Server>\033[39m %s", string);
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <structures.h>
|
||||
|
||||
void setCollums(int rows) {
|
||||
void setRows(int rows) {
|
||||
_ROWS = rows;
|
||||
}
|
||||
|
||||
|
@ -39,17 +39,17 @@ int checkWin(tile_t *board, int pos, int rows, int collums) {
|
|||
return board[pos];
|
||||
}
|
||||
|
||||
int result = checkLine(board, pos, VERTICAL);
|
||||
result = checkLine(board, pos, VERTICAL);
|
||||
if (result) {
|
||||
return board[pos];
|
||||
}
|
||||
|
||||
int result = checkLine(board, pos, DIAGONAL);
|
||||
result = checkLine(board, pos, DIAGONAL);
|
||||
if (result) {
|
||||
return board[pos];
|
||||
}
|
||||
|
||||
int result = checkLine(board, pos, DIAGONAL_INV);
|
||||
result = checkLine(board, pos, DIAGONAL_INV);
|
||||
if (result) {
|
||||
return board[pos];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue