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

Function ctrlReceive

engine/Poseidon/Network/NetTransportNet.cpp:426–689  ·  view source on GitHub ↗

Control (broadcast) data received by the NetServer...

Source from the content-addressed store, hash-verified

424 msg = mergeMessageList(sup->m_splitUrgent);
425 sup->m_splitUrgent = nullptr;
426 }
427 else
428 { // another message-part => remember it!
429 if (!sup->m_splitUrgent)
430 {
431 sup->m_splitUrgent = msg;
432 }
433 else
434 {
435 sup->m_lastSplitUrgent->next = msg;
436 }
437 (sup->m_lastSplitUrgent = msg)->next = nullptr;
438 _server->leaveRcv();
439 return nsNoMoreCallbacks;
440 }
441 }
442 else if (closing)
443 { // the last message-part to be merged..
444 if (!sup->m_split || !sup->m_lastSplit)
445 { // closing fragment with no opener — drop it, don't deref null
446 _server->leaveRcv();
447 return nsNoMoreCallbacks;
448 }
449 sup->m_lastSplit->next = msg;
450 msg->next = nullptr;
451 msg = mergeMessageList(sup->m_split);
452 sup->m_split = nullptr;
453 }
454 else
455 { // another message-part => remember it!
456 if (!sup->m_split)
457 {
458 sup->m_split = msg;
459 }
460 else
461 {
462 sup->m_lastSplit->next = msg;
463 }
464 (sup->m_lastSplit = msg)->next = nullptr;
465 _server->leaveRcv();
466 return nsNoMoreCallbacks;
467 }
468#ifdef NET_LOG_MERGE
469#ifdef NET_LOG_BRIEF
470 NetLog("Pe(%u):rMerS(%u,%u,%x,%x)", getServerPeer()->getPeerId(), msg->getLength(), msg->getSerial(),
471 (unsigned)msg->getFlags(), msg->id);
472#else
473 NetLog("Peer(%u)::serverReceive: merging user message (len=%3u, serial=%4u, flags=%04x, ID=%x)",
474 getServerPeer()->getPeerId(), msg->getLength(), msg->getSerial(), (unsigned)msg->getFlags(), msg->id);
475#endif
476#endif
477 }
478
479 _server->insertReceived(msg);
480
481 _server->leaveRcv();
482
483 return nsNoMoreCallbacks;

Callers

nothing calls this directly

Calls 15

getServerPeerFunction · 0.85
GetTickCountFunction · 0.85
sockaddrKeyFunction · 0.85
getLengthMethod · 0.80
getFlagsMethod · 0.80
getDistantMethod · 0.80
getPeerIdMethod · 0.80
getSerialMethod · 0.80
enterUsrMethod · 0.80
tryConsumeMethod · 0.80
getChannelMethod · 0.80
setDistantMethod · 0.80

Tested by

no test coverage detected