︙ | | |
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
-
+
-
+
|
resolverresults = [[OFMutableArray alloc] init];
resolverlimit = limit;
resolversem = SDL_CreateSemaphore(0);
while (threads > 0) {
ResolverThread *rt = [ResolverThread thread];
rt.name = @"resolverthread";
[resolverthreads addObject:rt];
[resolverthreads addObject: rt];
[rt start];
--threads;
}
}
void
resolverstop(size_t i, bool restart)
{
@synchronized(ResolverThread.class) {
ResolverThread *rt = resolverthreads[i];
[rt stop];
if (restart) {
rt = [ResolverThread thread];
rt.name = @"resolverthread";
resolverthreads[i] = rt;
[rt start];
} else
[resolverthreads removeObjectAtIndex:i];
[resolverthreads removeObjectAtIndex: i];
}
}
void
resolverclear()
{
@synchronized(ResolverThread.class) {
|
︙ | | |
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
-
+
|
}
}
void
resolverquery(OFString *name)
{
@synchronized(ResolverThread.class) {
[resolverqueries addObject:name];
[resolverqueries addObject: name];
SDL_SemPost(resolversem);
}
}
bool
resolvercheck(OFString **name, ENetAddress *address)
{
|
︙ | | |
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
-
+
-
+
-
+
|
return servers[n].name;
}
void
addserver(OFString *servername)
{
for (ServerInfo *si in servers)
if ([si.name isEqual:servername])
if ([si.name isEqual: servername])
return;
if (servers == nil)
servers = [[OFMutableArray alloc] init];
[servers addObject:[ServerInfo infoWithName:servername]];
[servers addObject: [ServerInfo infoWithName: servername]];
}
COMMAND(addserver, ARG_1STR, ^(OFString *servername) {
COMMAND(addserver, ARG_1STR, ^ (OFString *servername) {
addserver(servername);
})
void
pingservers()
{
ENetBuffer buf;
|
︙ | | |
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
-
+
|
OFString *name = nil;
ENetAddress addr = { ENET_HOST_ANY, CUBE_SERVINFO_PORT };
while (resolvercheck(&name, &addr)) {
if (addr.host == ENET_HOST_ANY)
continue;
for (ServerInfo *si in servers) {
if ([name isEqual:si.name]) {
if ([name isEqual: si.name]) {
si.address = addr;
addr.host = ENET_HOST_ANY;
break;
}
}
}
}
|
︙ | | |
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
|
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
-
-
+
+
-
+
-
-
-
+
+
-
-
-
+
+
+
-
+
|
checkresolver();
checkpings();
if (lastmillis - lastinfo >= 5000)
pingservers();
[servers sort];
__block int maxmenu = 16;
[servers enumerateObjectsUsingBlock:^(
ServerInfo *si, size_t i, bool *stop) {
[servers enumerateObjectsUsingBlock:
^ (ServerInfo *si, size_t i, bool *stop) {
if (si.address.host != ENET_HOST_ANY && si.ping != 9999) {
if (si.protocol != PROTOCOL_VERSION)
si.full = [OFString stringWithFormat:
@"%@ [different cube protocol]",
@"%@ [different cube protocol]", si.name];
si.name];
else
si.full = [OFString
stringWithFormat:@"%d\t%d\t%@, %@: %@ %@",
si.full = [OFString stringWithFormat:
@"%d\t%d\t%@, %@: %@ %@",
si.ping, si.numplayers,
si.map.length > 0 ? si.map : @"[unknown]",
modestr(si.mode), si.name, si.sdesc];
} else
si.full = [OFString stringWithFormat:
(si.address.host != ENET_HOST_ANY
? @"%@ [waiting for server response]"
: @"%@ [unknown host]\t"),
(si.address.host != ENET_HOST_ANY
? @"%@ [waiting for server response]"
: @"%@ [unknown host]\t"),
si.name];
// cut off too long server descriptions
if (si.full.length > 50)
si.full = [si.full substringToIndex:50];
si.full = [si.full substringToIndex: 50];
menumanual(1, i, si.full);
if (!--maxmenu)
return;
}];
}
|
︙ | | |
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
|
-
+
-
+
|
for (ServerInfo *si in servers)
resolverquery(si.name);
refreshservers();
menuset(1);
}
COMMAND(servermenu, ARG_NONE, ^{
COMMAND(servermenu, ARG_NONE, ^ {
servermenu();
})
COMMAND(updatefrommaster, ARG_NONE, ^{
COMMAND(updatefrommaster, ARG_NONE, ^ {
const int MAXUPD = 32000;
unsigned char buf[MAXUPD];
unsigned char *reply = retrieveservers(buf, MAXUPD);
if (!*reply || strstr((char *)reply, "<html>") ||
strstr((char *)reply, "<HTML>"))
conoutf(@"master server not replying");
else {
|
︙ | | |