| 534 | } |
| 535 | |
| 536 | bool 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 | } |
nothing calls this directly
no test coverage detected