5 #include "client/client.h"
6 #include "client/client_auth.h"
7 #include "client/client_map.h"
8 #include "client/client_player.h"
9 #include "client/game.h"
10 #include "client/input.h"
12 #include "signal_handlers.h"
17 DragonnetPeer *client;
19 static bool finished = false;
21 static bool on_recv(unused DragonnetPeer *peer, DragonnetTypeId type, unused void *pkt)
23 while (client_auth.state == AUTH_INIT)
26 return (client_auth.state == AUTH_WAIT) == (type == DRAGONNET_TYPE_ToClientAuth);
29 static void on_disconnect(unused DragonnetPeer *peer)
36 static void on_ToClientAuth(unused DragonnetPeer *peer, ToClientAuth *pkt)
39 client_auth.state = AUTH_SUCCESS;
40 printf("Authenticated successfully\n");
42 client_auth.state = AUTH_INIT;
43 printf("Authentication failed, please try again\n");
47 static void on_ToClientBlock(unused DragonnetPeer *peer, ToClientBlock *pkt)
49 MapBlock *block = map_get_block(client_map.map, pkt->pos, true);
51 map_deserialize_block(block, pkt->data);
52 client_map_block_received(block);
55 static void on_ToClientInfo(unused DragonnetPeer *peer, ToClientInfo *pkt)
57 client_map_set_simulation_distance(pkt->simulation_distance);
61 static void on_ToClientPos(unused DragonnetPeer *peer, ToClientPos *pkt)
63 client_player_set_position(pkt->pos);
66 static void on_ToClientTimeOfDay(unused DragonnetPeer *peer, ToClientTimeOfDay *pkt)
68 set_time_of_day(pkt->time_of_day);
71 int main(int argc, char **argv)
74 fprintf(stderr, "Missing address\n");
78 if (! (client = dragonnet_connect(argv[1]))) {
79 fprintf(stderr, "Failed to connect to server\n");
83 client->on_disconnect = &on_disconnect;
84 client->on_recv = &on_recv;
85 client->on_recv_type[DRAGONNET_TYPE_ToClientAuth ] = (void *) &on_ToClientAuth;
86 client->on_recv_type[DRAGONNET_TYPE_ToClientBlock ] = (void *) &on_ToClientBlock;
87 client->on_recv_type[DRAGONNET_TYPE_ToClientInfo ] = (void *) &on_ToClientInfo;
88 client->on_recv_type[DRAGONNET_TYPE_ToClientPos ] = (void *) &on_ToClientPos;
89 client->on_recv_type[DRAGONNET_TYPE_ToClientTimeOfDay] = (void *) &on_ToClientTimeOfDay;
91 signal_handlers_init();
94 dragonnet_peer_run(client);
96 if (! client_auth_init())
102 dragonnet_peer_shutdown(client);
103 client_auth_deinit();
104 client_player_deinit();
107 pthread_t recv_thread = client->recv_thread;
109 pthread_join(recv_thread, NULL);