summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game.c7
-rw-r--r--src/main.c18
-rw-r--r--src/net/server.c4
-rw-r--r--src/net/server.h2
4 files changed, 17 insertions, 14 deletions
diff --git a/src/game.c b/src/game.c
index 9087832..6798f64 100644
--- a/src/game.c
+++ b/src/game.c
@@ -92,7 +92,7 @@ static void main_loop_server(socket_list_t* client_socks)
void start_game(const bool servermode, const char* addr, const char* port, const uint8_t num_players)
{
- assert(addr != NULL && port != NULL);
+ assert(port != NULL); // addr can be NULL for server -> listen on every address
bool server_process = false;
@@ -112,7 +112,7 @@ void start_game(const bool servermode, const char* addr, const char* port, const
data_store_t *data = data_store();
- server_sock = server_start(port);
+ server_sock = server_start(addr, port);
server_get_players(server_sock, &client_socks, num_players);
data->player_list.count = num_players;
@@ -139,6 +139,9 @@ void start_game(const bool servermode, const char* addr, const char* port, const
sleep(1); // TODO make sure server process is listening
+ if(addr == NULL)
+ addr = "localhost";
+
sock = client_connect_server(addr, port);
data_store_t *data = data_store();
diff --git a/src/main.c b/src/main.c
index 71beb56..dda53ac 100644
--- a/src/main.c
+++ b/src/main.c
@@ -8,9 +8,10 @@
static void print_usage(const char* name)
{
- const char* usage = "Usage: %s [-u nickname] [-s server] [-n num_players] -p port\n"
- "\tserver\t\thostname/address of server; only required on client\n"
- "\tnum_players\tnumber of players; optional on server (default: 2)\n";
+ const char* usage = "Usage: %s [-u nickname] [-s address] [-n num_players] [-l] -p port\n"
+ "\t-s address\t\thostname/address to connect to (client) or listen on (server)\n"
+ "\t-n num_players\t\tnumber of players; only on server (default: 2)\n"
+ "\t-l\t\t\tstart server\n";
fprintf(stderr, usage, name);
exit(EXIT_FAILURE);
}
@@ -21,10 +22,10 @@ int main(int argc, char *argv[])
uint8_t num_players = 2;
char* port = NULL;
char* addr = NULL;
- bool servermode = true;
+ bool servermode = false;
data_store_t *ds = data_store();
- const char* accepted = "u:s:p:n:h";
+ const char* accepted = "u:s:p:n:hl";
while((opt = getopt(argc, argv, accepted)) != -1)
{
switch(opt)
@@ -38,11 +39,13 @@ int main(int argc, char *argv[])
break;
case 's': // hostname
addr = optarg;
- servermode = false;
break;
case 'n': // number of users
num_players = atoi(optarg);
break;
+ case 'l':
+ servermode = true;
+ break;
case 'h': // help
default:
print_usage(argv[0]);
@@ -53,9 +56,6 @@ int main(int argc, char *argv[])
if(port == NULL)
print_usage(argv[0]);
- if(servermode)
- addr = "localhost";
-
if(strlen(ds->nickname) == 0)
{
const char* env_nick = getenv("USER");
diff --git a/src/net/server.c b/src/net/server.c
index c40b0ac..4c8aeb7 100644
--- a/src/net/server.c
+++ b/src/net/server.c
@@ -29,7 +29,7 @@ int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pi
* @param[in] port Port on which server should listen
* @return Listening socket
*/
-int server_start(const char* port)
+int server_start(const char* addr, const char* port)
{
assert(port != NULL);
@@ -43,7 +43,7 @@ int server_start(const char* port)
hints.ai_flags = AI_PASSIVE; // wildcard IP
hints.ai_protocol = 0; // any protocol
- status = getaddrinfo(NULL, port, &hints, &result);
+ status = getaddrinfo(addr, port, &hints, &result);
if(status != 0)
{
printf("getaddrinfo: %s\n", gai_strerror(status));
diff --git a/src/net/server.h b/src/net/server.h
index fb1d30b..b5c0524 100644
--- a/src/net/server.h
+++ b/src/net/server.h
@@ -16,7 +16,7 @@ typedef struct
} socket_list_t;
int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pid);
-int server_start(const char* port);
+int server_start(const char* addr, const char* port);
void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count);
void server_prep_hello(msg_t *m, const player_list_entry_t* player);