diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 9 | ||||
| -rw-r--r-- | src/net.h | 2 | ||||
| -rw-r--r-- | src/net_server.c | 20 | ||||
| -rw-r--r-- | src/player.c | 21 | ||||
| -rw-r--r-- | src/player.h | 3 |
5 files changed, 15 insertions, 40 deletions
@@ -245,18 +245,19 @@ void start_game(const bool servermode, const char* addr, const char* port) { int server_sock; socket_list_t client_socks; - uint8_t num_opponents = 1; + uint8_t num_players = 1; server_sock = server_start(port); - server_get_players(server_sock, &client_socks, num_opponents); + server_get_players(server_sock, &client_socks, num_players); + data->players.count = num_players; - for(int i=0; i<num_opponents; i++) + for(int i=0; i<num_players; i++) { net_recv(client_socks.sockets[i], msg_type_hello); printf("Player connected: %s\n", data->players.players[i].player_name); } - for(int i=0; i<num_opponents; i++) + for(int i=0; i<num_players; i++) { net_send(client_socks.sockets[i], msg_type_start_game, NULL); } @@ -54,7 +54,7 @@ bool net_send(int sock, const msg_type_t type, void* param); // Server side functions int server_start(const char* port); void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count); -char* server_recv_hello(const uint8_t* payload, const uint8_t payload_len); +bool server_recv_hello(const uint8_t* payload, const uint8_t payload_len); card* server_recv_selected_card(const uint8_t* payload, const uint8_t payload_len); uint8_t* server_recv_selected_stack(const uint8_t* payload, const uint8_t payload_len); uint8_t server_send_start_game(uint8_t* payload, const uint8_t payload_len); diff --git a/src/net_server.c b/src/net_server.c index 7127428..327a695 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -108,23 +108,21 @@ void server_get_players(int serversock, socket_list_t* client_socks, const uint8 * @param[in] sock Socket to use * @return Username of client */ -char* server_recv_hello(const uint8_t* payload, const uint8_t payload_len) +bool server_recv_hello(const uint8_t* payload, const uint8_t payload_len) { - assert(payload != NULL); + assert(payload != NULL && payload_len < MAX_PLAYER_NAME_LENGTH && payload_len > 0); - char* name; + data_store* ds = datamodel(); - name = malloc(payload_len+1); - if(name == NULL) + for(int i=0; i<ds->players.count; i++) { - printf("sender_recv_hello: Out of memory\n"); - exit(EXIT_FAILURE); + if(strlen(ds->players.players[i].player_name) > 0) // search for first empty (not yet assigned) slot + continue; + memcpy(ds->players.players[i].player_name, payload, payload_len); + ds->players.players[i].player_name[payload_len] = '\0'; } - memcpy(name, payload, payload_len); - name[payload_len] = '\0'; - - return name; + return true; } card* server_recv_selected_card(const uint8_t* payload, const uint8_t payload_len) diff --git a/src/player.c b/src/player.c deleted file mode 100644 index f4b6490..0000000 --- a/src/player.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "player.h" -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -player_list* create_playerlist(void) -{ - player_list* pl = malloc(sizeof(player_list)); - memset(pl, 0, sizeof(player_list)); - - return pl; -} - -void cleanup_playerlist(player_list* pl) -{ - assert(pl != NULL); - - //for(int i=0; i<MAX_PLAYERS; i++) - // free(pl->names[i]); - free(pl); -} diff --git a/src/player.h b/src/player.h index aad8fcf..4540702 100644 --- a/src/player.h +++ b/src/player.h @@ -12,7 +12,4 @@ typedef struct pnoc_t players[MAX_PLAYERS]; } player_list; -player_list* create_playerlist(void); -void cleanup_playerlist(player_list* pl); - #endif // OXEN_PLAYER_H |
