]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - client.c
Server can handle multiple clients
[dragonblocks_alpha.git] / client.c
1 #include <sys/socket.h>
2 #include <netinet/in.h>
3 #include <arpa/inet.h>
4 #include <unistd.h>
5 #include "map.h"
6 #include "util.h"
7
8 int main(int argc, char **argv)
9 {
10         program_name = argv[0];
11
12         int sockfd = socket(AF_INET, SOCK_STREAM, 0);
13
14         if (sockfd == -1)
15                 syscall_error("socket");
16
17         if (argc <= 1)
18                 internal_error("missing address");
19
20         struct in_addr addr_buf;
21
22         if (inet_aton(argv[1], &addr_buf) == 0)
23                 internal_error("invalid address");
24
25         struct sockaddr_in addr = {
26                 .sin_family = AF_INET,
27                 .sin_port = get_port_from_args(argc, argv, 2),
28                 .sin_addr = addr_buf,
29         };
30
31         if (connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == -1)
32                 syscall_error("connect");
33
34         Map *map = map_create(NULL);
35
36         MapBlock *block = map_deserialize_block(sockfd);
37         if (block)
38                 map_create_block(map, (v3s32) {0, 0, 0}, block);
39         else
40                 internal_error("invalid block recieved");
41
42         MapNode node = map_get_node(map, (v3s32) {0, 0, 0});
43         printf("%d\n", node.type);
44
45         close(sockfd);
46
47         map_delete(map);
48 }