summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c53
1 files changed, 50 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index c6d398b..0687c9c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,10 +2,12 @@
#include <curses.h>
#include "ui.h"
#include "game.h"
+#include "net.h"
+#include "player.h"
int main(int argc, char **argv)
{
- uint16_t port = 0;
+ char* port = 0;
char *addr;
bool servermode = false;
@@ -16,13 +18,58 @@ int main(int argc, char **argv)
}
else if (argc == 2) // Server mode
{
+ int ssock;
+ int* csocks;
+ struct player_list players;
+ int opponents = 3;
+ char* nickname = "deki";
servermode = true;
- port = atoi(argv[1]);
+ port = argv[1];
+
+ // start listening
+ ssock = server_start("12345");
+
+ // accept client connections
+ csocks = server_get_players(ssock, opponents);
+
+ players.count = opponents + 1;
+ players.names[0] = nickname;
+
+ for(int i=0; i<opponents; i++)
+ {
+ // wait for greeting from client i and read nick
+ char* name = server_recv(csocks[i], msg_type_hello);
+ players.names[i+1] = name;
+ printf("player connected: len:%d, name:%s\n", strlen(name), name);
+ }
+
+ // start game and send player list to clients
+ server_start_game(csocks, opponents, &players);
+
+ close(ssock);
+ free(csocks);
}
else if (argc == 3) // Client mode
{
+ int sock;
+ struct player_list* players;
+ char* nickname = "schnippi";
addr = argv[1];
- port = atoi(argv[2]);
+ port = argv[2];
+
+ // connect to server
+ sock = client_connect_server(addr, port);
+
+ // greet server and tell nickname
+ client_hello(sock, nickname);
+
+ // retrieve list of all players from server
+ players = client_recv(sock, msg_type_start_game);
+ for(int i=0; i<players->count; i++)
+ printf("Player %d: %s\n", i, players->names[i]);
+
+ close(sock);
+ free(players);
}
ui_init();