MCPcopy Create free account
hub / github.com/ZDoom/Raze / Host_CheckForConnects

Function Host_CheckForConnects

source/common/engine/i_net.cpp:536–630  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

534}
535
536bool Host_CheckForConnects (void *userdata)
537{
538 PreGamePacket packet;
539 int numplayers = (int)(intptr_t)userdata;
540 sockaddr_in *from;
541 int node;
542
543 while ( (from = PreGet (&packet, sizeof(packet), false)) )
544 {
545 if (packet.Fake != PRE_FAKE)
546 {
547 continue;
548 }
549 switch (packet.Message)
550 {
551 case PRE_CONNECT:
552 node = FindNode (from);
553 if (doomcom.numnodes == numplayers)
554 {
555 if (node == -1)
556 {
557 const uint8_t *s_addr_bytes = (const uint8_t *)&from->sin_addr;
558 I_NetMessage ("Got extra connect from %d.%d.%d.%d:%d",
559 s_addr_bytes[0], s_addr_bytes[1], s_addr_bytes[2], s_addr_bytes[3],
560 from->sin_port);
561 packet.Message = PRE_ALLFULL;
562 PreSend (&packet, 2, from);
563 }
564 }
565 else
566 {
567 if (node == -1)
568 {
569 node = doomcom.numnodes++;
570 sendaddress[node] = *from;
571 I_NetMessage ("Got connect from node %d.", node);
572 }
573
574 // Let the new guest (and everyone else) know we got their message.
575 SendConAck (doomcom.numnodes, numplayers);
576 }
577 break;
578
579 case PRE_DISCONNECT:
580 node = FindNode (from);
581 if (node >= 0)
582 {
583 I_NetMessage ("Got disconnect from node %d.", node);
584 doomcom.numnodes--;
585 while (node < doomcom.numnodes)
586 {
587 sendaddress[node] = sendaddress[node+1];
588 node++;
589 }
590
591 // Let remaining guests know that somebody left.
592 SendConAck (doomcom.numnodes, numplayers);
593 }

Callers

nothing calls this directly

Calls 5

PreGetFunction · 0.85
FindNodeFunction · 0.85
I_NetMessageFunction · 0.85
PreSendFunction · 0.85
SendConAckFunction · 0.85

Tested by

no test coverage detected