summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.c53
-rw-r--r--src/net.c4
2 files changed, 52 insertions, 5 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();
diff --git a/src/net.c b/src/net.c
index 46331f1..8c80c2b 100644
--- a/src/net.c
+++ b/src/net.c
@@ -225,7 +225,7 @@ void server_start_game(int* clients, const uint8_t clientcount, const struct pla
* @param[in] sock Socket to use
* @return Username of client
*/
-char* server_recv_hello(int sock)
+static char* server_recv_hello(int sock)
{
char buf[12], *name;
uint8_t namelen;
@@ -276,7 +276,7 @@ void* server_recv(int sock, uint8_t wanted)
return result;
}
-struct player_list* client_recv_player_list(int sock)
+static struct player_list* client_recv_player_list(int sock)
{
uint8_t buf[200];
struct player_list* players;