1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-
-
+
-
|
// all server side masterserver and pinging functionality
#include "cube.h"
static ENetSocket mssock = ENET_SOCKET_NULL;
static void
httpgetsend(ENetAddress &ad, OFString *hostname, OFString *req, OFString *ref,
OFString *agent)
{
if (ad.host == ENET_HOST_ANY) {
[OFStdOut writeFormat:@"looking up %@...\n", hostname];
@autoreleasepool {
enet_address_set_host(&ad, hostname.UTF8String);
enet_address_set_host(&ad, hostname.UTF8String);
}
if (ad.host == ENET_HOST_ANY)
return;
}
if (mssock != ENET_SOCKET_NULL)
enet_socket_destroy(mssock);
mssock = enet_socket_create(ENET_SOCKET_TYPE_STREAM, NULL);
if (mssock == ENET_SOCKET_NULL) {
|
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
-
-
-
+
+
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
-
|
static ENetBuffer masterb;
static void
updatemasterserver(int seconds)
{
// send alive signal to masterserver every hour of uptime
if (seconds > updmaster) {
@autoreleasepool {
OFString *path = [OFString
stringWithFormat:@"%@register.do?action=add",
OFString *path = [OFString
stringWithFormat:@"%@register.do?action=add", masterpath];
masterpath];
httpgetsend(masterserver, masterbase, path,
@"cubeserver", @"Cube Server");
httpgetsend(masterserver, masterbase, path, @"cubeserver",
@"Cube Server");
}
masterrep[0] = 0;
masterb.data = masterrep;
masterb.dataLength = MAXTRANS - 1;
updmaster = seconds + 60 * 60;
}
}
static void
checkmasterreply()
{
bool busy = mssock != ENET_SOCKET_NULL;
httpgetrecieve(masterb);
if (busy && mssock == ENET_SOCKET_NULL)
printf("masterserver reply: %s\n", stripheader(masterrep));
}
uchar *
retrieveservers(uchar *buf, int buflen)
{
@autoreleasepool {
OFString *path = [OFString
stringWithFormat:@"%@retrieve.do?item=list", masterpath];
httpgetsend(masterserver, masterbase, path, @"cubeserver",
@"Cube Server");
OFString *path =
[OFString stringWithFormat:@"%@retrieve.do?item=list", masterpath];
httpgetsend(
masterserver, masterbase, path, @"cubeserver", @"Cube Server");
}
ENetBuffer eb;
buf[0] = 0;
eb.data = buf;
eb.dataLength = buflen - 1;
while (mssock != ENET_SOCKET_NULL)
httpgetrecieve(eb);
return stripheader(buf);
|
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
|
enet_socket_send(pongsock, &addr, &buf, 1);
}
}
void
servermsinit(OFString *master_, OFString *sdesc, bool listen)
{
@autoreleasepool {
const char *master = master_.UTF8String;
const char *mid = strstr(master, "/");
if (!mid)
mid = master;
masterpath = @(mid);
masterbase = [[OFString alloc] initWithUTF8String:master
length:mid - master];
serverdesc = sdesc;
const char *master = master_.UTF8String;
const char *mid = strstr(master, "/");
if (!mid)
mid = master;
masterpath = @(mid);
masterbase = [[OFString alloc] initWithUTF8String:master
length:mid - master];
serverdesc = sdesc;
if (listen) {
ENetAddress address = { ENET_HOST_ANY,
if (listen) {
ENetAddress address = { ENET_HOST_ANY, CUBE_SERVINFO_PORT };
CUBE_SERVINFO_PORT };
pongsock = enet_socket_create(
ENET_SOCKET_TYPE_DATAGRAM, &address);
if (pongsock == ENET_SOCKET_NULL)
fatal(@"could not create server info socket\n");
}
}
pongsock =
enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM, &address);
if (pongsock == ENET_SOCKET_NULL)
fatal(@"could not create server info socket\n");
}
}
}
|