MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / serverReceive

Function serverReceive

engine/Poseidon/Network/NetTransportNet.cpp:278–423  ·  view source on GitHub ↗

Regular data received by the NetServer...

Source from the content-addressed store, hash-verified

276// Checks _enum, _client and _server. If everything is nullptr, destroys the global NetPool!
277static void checkPool()
278{
279 poolLock.enter();
280 if (!_enum && !_client && !_server)
281 {
282 destroyPool();
283 }
284 poolLock.leave();
285}
286
287Ref<NetMessage> mergeMessageList(NetMessage* msg)
288{
289 if (!msg)
290 {
291 return nullptr;
292 }
293 unsigned size = 0;
294 NetMessage* ptr = msg;
295 NetMessage* last;
296 do
297 {
298 size += ptr->getLength();
299 last = ptr;
300 } while ((ptr = ptr->next));
301 Ref<NetMessage> composite = NetMessagePool::pool()->newMessage(size, msg->getChannel());
302 if (!composite)
303 {
304 return nullptr;
305 }
306 composite->setFrom(last);
307 unsigned8* data = (unsigned8*)composite->getData();
308 for (ptr = msg; ptr; ptr = ptr->next)
309 {
310 memcpy(data, ptr->getData(), ptr->getLength());
311 data += ptr->getLength();
312 }
313 composite->setLength(size);
314 return composite;
315}
316
317// Regular data received by the NetServer...
318NetStatus serverReceive(NetMessage* msg, NetStatus event, void* data)
319{
320 // thread-safe
321 if (!_server || !msg)
322 {
323 return nsNoMoreCallbacks; // nothing to do
324 }
325 unsigned len = msg->getLength();
326 if (!len)
327 {
328 return nsNoMoreCallbacks; // message is too small
329 }
330 struct sockaddr_in dist;
331 msg->getDistant(dist);
332 unsigned flags = msg->getFlags();
333 bool isMagic = (flags & MSG_MAGIC_FLAG) != 0;
334 if (isMagic)
335 { // magic-messages:

Callers

nothing calls this directly

Calls 15

getServerPeerFunction · 0.85
sockaddrKeyFunction · 0.85
mergeMessageListFunction · 0.85
getLengthMethod · 0.80
getDistantMethod · 0.80
getFlagsMethod · 0.80
getPeerIdMethod · 0.80
getSerialMethod · 0.80
enterUsrMethod · 0.80
channelToPlayerMethod · 0.80
getChannelMethod · 0.80
finishDestroyPlayerMethod · 0.80

Tested by

no test coverage detected