6 static bool disconnect_handler(Client *client, bool good)
9 server_disconnect_client(client, DISCO_NO_SEND, NULL);
13 static bool auth_handler(Client *client, bool good)
15 char *name = read_string(client->fd, NAME_MAX);
25 u8 success = linked_list_put(&client->server->clients, name, client);
27 printf("Authentication %s: %s -> %s\n", success ? "success" : "failure", client->address, name);
31 client->state = CS_ACTIVE;
36 pthread_mutex_lock(&client->mtx);
37 bool ret = write_u32(client->fd, CC_AUTH) && write_u8(client->fd, success);
38 pthread_mutex_unlock(&client->mtx);
43 static bool getblock_handler(Client *client, bool good)
47 if (! read_v3s32(client->fd, &pos))
53 MapBlock *block = map_get_block(client->server->map, pos, false);
55 pthread_mutex_lock(&client->mtx);
56 bool ret = write_u32(client->fd, CC_BLOCK) && map_serialize_block(client->fd, block);
57 pthread_mutex_unlock(&client->mtx);
65 static bool setnode_handler(Client *client, bool good)
69 if (! read_v3s32(client->fd, &pos))
74 if (! map_deserialize_node(client->fd, &node))
78 map_set_node(client->server->map, pos, node);
83 static bool kick_handler(Client *client, bool good)
85 char *target_name = read_string(client->fd, NAME_MAX);
91 Client *target = linked_list_get(&client->server->clients, target_name);
93 server_disconnect_client(target, 0, "kicked");
100 CommandHandler command_handlers[SERVER_COMMAND_COUNT] = {
102 {&disconnect_handler, "DISCONNECT", CS_CREATED | CS_ACTIVE},
103 {&auth_handler, "AUTH", CS_CREATED},
104 {&getblock_handler, "GETBLOCK", CS_ACTIVE},
105 {&setnode_handler, "SETNODE", CS_ACTIVE},
106 {&kick_handler, "KICK", CS_ACTIVE},