player connection

This commit is contained in:
Lorenzo Bianchi 2023-05-17 15:57:10 +02:00
parent a31aedcdc4
commit f30ad21a7f
4 changed files with 28 additions and 22 deletions

View File

@ -67,8 +67,8 @@ MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
MKFILE_DIR := $(dir $(mkfile_path))
ARGSSERVER := 6 7 O X
ARGSCLIENT1 := cacca
ARGSCLIENT2 := molla
ARGSCLIENT1 := Cacca
ARGSCLIENT2 := Molla
test: comp
x-terminal-emulator -e $(MKFILE_DIR)$(TARGET2) $(ARGSCLIENT1)

View File

@ -50,6 +50,6 @@ typedef struct {
int id;
char name_player[MAX_NAME];
pid_t pid;
} player_names_t;
} player_ds;
#endif

View File

@ -110,17 +110,18 @@ int main(int argc, char *argv[]){
semOp(semid, 2, 1); // finito operazioni di connessione
// mando il mio nome al server
player_names_t name = {.mtype = 3, .id = msg.player_id, .pid = getpid()};
strcpy(name.name_player, argv[1]);
if (msgsnd(msgid, &name, sizeof(player_names_t) - sizeof(long), 0) == -1) {
errExit("msgsnd", "mandare nome");
}
// mando i miei dati al server
player_ds player = {.mtype = 3, .id = msg.player_id, .pid = getpid()};
strcpy(player.name_player, argv[1]);
if (msgsnd(msgid, &player, sizeof(player_ds) - sizeof(long), 0) == -1) {
errExit("msgsnd", "mandare nome");
}
printf("%s\n", name.name_player);
printfClient("Searching for oponent...\n");
semOp(semid, msg.player_id, -1);
printfServer("Opponent found\n");
move_t move = {.mtype = 2};

View File

@ -37,8 +37,12 @@ void sigHandlerServer(int sig) {
if (sig == SIGTERM || sig == SIGHUP) {
printf("\n");
printfServer("Terminating players");
kill(pids[0], SIGTERM);
kill(pids[1], SIGTERM);
if (pids[0] > 0) {
kill(pids[0], SIGTERM);
}
if (pids[1] > 0){
kill(pids[1], SIGTERM);
}
// msgq
if (msgid) {
@ -160,34 +164,35 @@ int main(int argc, char *argv[]){
//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;
player_ds player;
char name[2][MAX_NAME];
pids[2];
// ricevuta nome primo client
if (msgrcv(msgid, &names, sizeof(player_names_t) - sizeof(long), 3, 0) == -1) {
if (msgrcv(msgid, &player, sizeof(player_ds) - sizeof(long), 3, 0) == -1) {
errExit("msgrcv", "ricevuta primo nome");
}
strcpy(name[names.id], names.name_player);
pids[names.id] = names.pid;
strcpy(name[player.id], player.name_player);
pids[player.id] = player.pid;
printfServer("Player ");
printf("%s connected\n", name[names.id]);
printf("%s connected\n", name[player.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) {
if (msgrcv(msgid, &player, sizeof(player_ds) - sizeof(long), 3, 0) == -1) {
errExit("msgrcv", "ricevuta secondo nome");
}
// name[names.id] = names.name_player;
strcpy(name[player.id], player.name_player);
pids[player.id] = player.pid;
printfServer("Player ");
printf("%s connected\n", name[names.id]);
printf("%s connected\n", name[player.id]);
semOp(semid, 0, 1);
semOp(semid, 1, 1);
// PARTITA