OpenClonk
C4Network2ClientList Class Reference

#include <C4Network2Client.h>

Collaboration diagram for C4Network2ClientList:
[legend]

Public Member Functions

 C4Network2ClientList (C4Network2IO *pIO)
 
 ~C4Network2ClientList ()
 
C4Network2Client * GetClientByID (int32_t iID) const
 
C4Network2Client * GetNextClientAfterID (int32_t iSmallerClientID) const
 
C4Network2Client * GetClient (const char *szName) const
 
C4Network2Client * GetClient (const C4ClientCore &CCore, int32_t iMaxDiffLevel=C4ClientCoreDL_IDMatch)
 
C4Network2Client * GetClient (C4Network2IOConnection *pConn) const
 
C4Network2Client * GetLocal () const
 
C4Network2Client * GetHost ()
 
C4Network2Client * GetNextClient (C4Network2Client *pClient)
 
unsigned int Count ()
 
void Init (C4ClientList *pClientList, bool fHost)
 
C4Network2Client * RegClient (C4Client *pClient)
 
void DeleteClient (C4Network2Client *pClient)
 
void Clear ()
 
bool BroadcastMsgToConnClients (const C4NetIOPacket &rPkt)
 
bool BroadcastMsgToClients (const C4NetIOPacket &rPkt)
 
bool SendMsgToHost (C4NetIOPacket rPkt)
 
bool SendMsgToClient (int32_t iClient, C4NetIOPacket &&rPkt)
 
void HandlePacket (char cStatus, const C4PacketBase *pBasePkt, C4Network2IOConnection *pConn)
 
void SendAddresses (C4Network2IOConnection *pConn)
 
void DoConnectAttempts ()
 
void ResetReady ()
 
bool AllClientsReady () const
 
void UpdateClientActivity ()
 

Protected Attributes

C4Network2IO * pIO
 
C4Network2Client * pFirst
 
C4Network2Client * pLocal
 
C4ClientList * pClientList
 
bool fHost
 

Detailed Description

Definition at line 143 of file C4Network2Client.h.

Constructor & Destructor Documentation

◆ C4Network2ClientList()

C4Network2ClientList::C4Network2ClientList ( C4Network2IO *  pIO)

Definition at line 325 of file C4Network2Client.cpp.

326  : pIO(pIO), pFirst(nullptr), pLocal(nullptr)
327 {
328 
329 }
C4Network2Client * pLocal
C4Network2Client * pFirst

◆ ~C4Network2ClientList()

C4Network2ClientList::~C4Network2ClientList ( )

Definition at line 331 of file C4Network2Client.cpp.

332 {
333  Clear();
334 }

References Clear().

Here is the call graph for this function:

Member Function Documentation

◆ AllClientsReady()

bool C4Network2ClientList::AllClientsReady ( ) const

Definition at line 620 of file C4Network2Client.cpp.

621 {
622  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
623  if (!pClient->isLocal() && pClient->isWaitedFor() && !pClient->isReady())
624  return false;
625  return true;
626 }
C4Network2Client * getNext() const

References C4Network2Client::getNext(), and pFirst.

Referenced by C4Network2::CheckStatusAck().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BroadcastMsgToClients()

bool C4Network2ClientList::BroadcastMsgToClients ( const C4NetIOPacket &  rPkt)

Definition at line 489 of file C4Network2Client.cpp.

490 {
491  // Send a msg to all clients, including clients that are not connected to
492  // this computer (will get forwarded by host).
493 
494  C4PacketFwd Fwd; Fwd.SetListType(true);
495  // lock
496  pIO->BeginBroadcast(false);
497  // select connections for broadcast
498  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
499  if (!pClient->isHost())
500  if (pClient->isConnected())
501  {
502  pClient->getMsgConn()->SetBroadcastTarget(true);
503  Fwd.AddClient(pClient->getID());
504  }
505  // broadcast
506  bool fSuccess = pIO->Broadcast(rPkt);
507  // unlock
508  pIO->EndBroadcast();
509  // clients: send forward request to host
510  if (!fHost)
511  {
512  Fwd.SetData(rPkt);
513  fSuccess &= SendMsgToHost(MkC4NetIOPacket(PID_FwdReq, Fwd));
514  }
515  return fSuccess;
516 }
C4NetIOPacket MkC4NetIOPacket(char cStatus, const class C4PacketBase &Pkt, const C4NetIO::addr_t &addr=C4NetIO::addr_t())
Definition: C4PacketBase.h:40
@ PID_FwdReq
Definition: C4PacketBase.h:92
bool SendMsgToHost(C4NetIOPacket rPkt)
void BeginBroadcast(bool fSelectAll=false)
bool Broadcast(const C4NetIOPacket &rPkt)
void EndBroadcast()
void SetData(const StdBuf &Pkt)
Definition: C4Packet2.cpp:453
void AddClient(int32_t iClient)
Definition: C4Packet2.cpp:463
void SetListType(bool fnNegativeList)
Definition: C4Packet2.cpp:458

References C4PacketFwd::AddClient(), C4Network2IO::BeginBroadcast(), C4Network2IO::Broadcast(), C4Network2IO::EndBroadcast(), fHost, C4Network2Client::getNext(), MkC4NetIOPacket(), pFirst, PID_FwdReq, pIO, SendMsgToHost(), C4PacketFwd::SetData(), and C4PacketFwd::SetListType().

Referenced by C4GameLobby::Countdown::Abort(), C4Network2::ChangeGameStatus(), C4Network2::CheckStatusAck(), C4GameLobby::Countdown::Countdown(), C4GameControlNetwork::DoInput(), C4GameControlNetwork::ExecSyncControl(), C4Network2::LeagueEnd(), C4GameLobby::Countdown::OnSec1Timer(), and C4GameControlNetwork::SetCtrlMode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BroadcastMsgToConnClients()

bool C4Network2ClientList::BroadcastMsgToConnClients ( const C4NetIOPacket &  rPkt)

Definition at line 471 of file C4Network2Client.cpp.

472 {
473  // Send a msg to all clients that are currently directly reachable.
474 
475  // lock
476  pIO->BeginBroadcast(false);
477  // select connections for broadcast
478  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
479  if (pClient->isConnected())
480  pClient->getMsgConn()->SetBroadcastTarget(true);
481  // broadcast
482  bool fSuccess = pIO->Broadcast(rPkt);
483  // unlock
484  pIO->EndBroadcast();
485  // finished
486  return fSuccess;
487 }

References C4Network2IO::BeginBroadcast(), C4Network2IO::Broadcast(), C4Network2IO::EndBroadcast(), C4Network2Client::getNext(), pFirst, and pIO.

Referenced by C4Network2Client::AddAddr(), C4GameControlNetwork::CheckCompleteCtrl(), C4GameControlNetwork::Init(), C4GameControlNetwork::PackCompleteCtrl(), and C4Network2Client::SendAddresses().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Clear()

void C4Network2ClientList::Clear ( )

Definition at line 454 of file C4Network2Client.cpp.

455 {
456  // remove link to main client list
457  if (pClientList)
458  {
459  C4ClientList *poClientList = pClientList;
460  pClientList = nullptr;
461  poClientList->ClearNetwork();
462  }
463  // delete clients
464  while (pFirst)
465  {
467  }
468  pLocal = nullptr;
469 }
void ClearNetwork()
Definition: C4Client.cpp:262
C4ClientList * pClientList
void DeleteClient(C4Network2Client *pClient)

References C4ClientList::ClearNetwork(), DeleteClient(), pClientList, pFirst, and pLocal.

Referenced by C4Network2::Clear(), C4ClientList::ClearNetwork(), C4ClientList::InitNetwork(), and ~C4Network2ClientList().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Count()

unsigned int C4Network2ClientList::Count ( )

Definition at line 379 of file C4Network2Client.cpp.

380 {
381  unsigned int ret(0);
382  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext) ret++;
383  return ret;
384 }
C4Network2Client * pNext

References pFirst, and C4Network2Client::pNext.

Referenced by C4Network2::OnClientDisconnect(), and C4GameLobby::Countdown::OnSec1Timer().

Here is the caller graph for this function:

◆ DeleteClient()

void C4Network2ClientList::DeleteClient ( C4Network2Client *  pClient)

Definition at line 432 of file C4Network2Client.cpp.

433 {
434  // close connections
435  pClient->CloseConns("removing client");
436  // remove from list
437  if (pClient == pFirst)
438  pFirst = pClient->getNext();
439  else
440  {
441  C4Network2Client *pPrev;
442  for (pPrev = pFirst; pPrev && pPrev->getNext(); pPrev = pPrev->getNext())
443  if (pPrev->getNext() == pClient)
444  break;
445  if (pPrev && pPrev->getNext() == pClient)
446  pPrev->pNext = pClient->getNext();
447  }
448  // remove auto-accept
449  pIO->RemoveAutoAccept(pClient->getCore());
450  // delete
451  delete pClient;
452 }
void CloseConns(const char *szMsg)
const C4ClientCore & getCore() const
void RemoveAutoAccept(const C4ClientCore &CCore)

References C4Network2Client::CloseConns(), C4Network2Client::getCore(), C4Network2Client::getNext(), pFirst, pIO, C4Network2Client::pNext, and C4Network2IO::RemoveAutoAccept().

Referenced by Clear(), and C4ClientList::Remove().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoConnectAttempts()

void C4Network2ClientList::DoConnectAttempts ( )

Definition at line 601 of file C4Network2Client.cpp.

602 {
603  // check interval
604  time_t t; time(&t);
605  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
606  {
607  if (!pClient->isLocal() && !pClient->isRemoved() && pClient->getNextConnAttempt() && pClient->getNextConnAttempt() <= t)
608  // attempt connect
609  pClient->DoConnectAttempt(pIO);
610  }
611 }

References C4Network2Client::getNext(), pFirst, and pIO.

Referenced by C4Network2::Execute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetClient() [1/3]

C4Network2Client * C4Network2ClientList::GetClient ( C4Network2IOConnection *  pConn) const

Definition at line 363 of file C4Network2Client.cpp.

364 {
365  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext)
366  if (pClient->hasConn(pConn))
367  return pClient;
368  return nullptr;
369 }

References pFirst, and C4Network2Client::pNext.

◆ GetClient() [2/3]

C4Network2Client * C4Network2ClientList::GetClient ( const C4ClientCore &  CCore,
int32_t  iMaxDiffLevel = C4ClientCoreDL_IDMatch 
)

Definition at line 371 of file C4Network2Client.cpp.

372 {
373  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext)
374  if (pClient->getCore().getDiffLevel(CCore) <= iMaxDiffLevel)
375  return pClient;
376  return nullptr;
377 }

References pFirst, and C4Network2Client::pNext.

◆ GetClient() [3/3]

C4Network2Client * C4Network2ClientList::GetClient ( const char *  szName) const

Definition at line 355 of file C4Network2Client.cpp.

356 {
357  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext)
358  if (SEqual(pClient->getName(), szName))
359  return pClient;
360  return nullptr;
361 }
bool SEqual(const char *szStr1, const char *szStr2)
Definition: Standard.h:93

References pFirst, C4Network2Client::pNext, and SEqual().

Referenced by C4Network2::HandleConn(), C4Network2::HandleLobbyPacket(), C4Network2::HandlePacket(), HandlePacket(), C4Network2Players::HandlePacket(), C4Network2::Join(), and C4Network2::OnDisconn().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetClientByID()

C4Network2Client * C4Network2ClientList::GetClientByID ( int32_t  iID) const

Definition at line 336 of file C4Network2Client.cpp.

337 {
338  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext)
339  if (pClient->getID() == iID)
340  return pClient;
341  return nullptr;
342 }

References pFirst, and C4Network2Client::pNext.

Referenced by C4GameControlNetwork::CalcPerformance(), GetHost(), C4Network2::HandleLobbyPacket(), C4Network2::HandlePacket(), HandlePacket(), C4Network2Players::HandlePacket(), C4Network2::OnConnectFail(), C4Network2::OnDisconn(), and SendMsgToClient().

Here is the caller graph for this function:

◆ GetHost()

C4Network2Client * C4Network2ClientList::GetHost ( )

Definition at line 386 of file C4Network2Client.cpp.

387 {
389 }
const int32_t C4ClientIDHost
Definition: C4Client.h:25
C4Network2Client * GetClientByID(int32_t iID) const

References C4ClientIDHost, and GetClientByID().

Referenced by C4Network2::HandleConn(), C4Network2::OnDisconn(), and SendMsgToHost().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLocal()

C4Network2Client* C4Network2ClientList::GetLocal ( ) const
inline

Definition at line 162 of file C4Network2Client.h.

162 { return pLocal; }

References pLocal.

Referenced by C4Network2Client::DoConnectAttempt(), C4Network2Client::DoTCPSimultaneousOpen(), C4Network2::DrawStatus(), C4Viewport::Execute(), C4Network2::InitNetIO(), C4Network2::LeagueNotifyDisconnect(), C4Network2::OnPuncherConnect(), and C4MessageInput::ProcessCommand().

Here is the caller graph for this function:

◆ GetNextClient()

C4Network2Client * C4Network2ClientList::GetNextClient ( C4Network2Client *  pClient)

Definition at line 391 of file C4Network2Client.cpp.

392 {
393  return pClient ? pClient->pNext : pFirst;
394 }

References pFirst, and C4Network2Client::pNext.

Referenced by C4MainMenu::ActivateHost(), C4Network2Stats::C4Network2Stats(), C4Network2::DeactivateInactiveClients(), C4Network2::DrawStatus(), C4Network2Stats::ExecuteSecond(), C4Network2::OnGameSynchronized(), C4Network2::UpdateChaseTarget(), C4Console::UpdateNetMenu(), C4GameSave::WriteDescNetworkClients(), and C4Network2Stats::~C4Network2Stats().

Here is the caller graph for this function:

◆ GetNextClientAfterID()

C4Network2Client * C4Network2ClientList::GetNextClientAfterID ( int32_t  iSmallerClientID) const

Definition at line 344 of file C4Network2Client.cpp.

345 {
346  // return client with smallest ID > iSmallerClientID
347  C4Network2Client *pBest = nullptr;
348  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->pNext)
349  if (pClient->getID() > iSmallerClientID)
350  if (!pBest || pBest->getID() > pClient->getID())
351  pBest = pClient;
352  return pBest;
353 }
int32_t getID() const

References C4Network2Client::getID(), pFirst, and C4Network2Client::pNext.

Here is the call graph for this function:

◆ HandlePacket()

void C4Network2ClientList::HandlePacket ( char  cStatus,
const C4PacketBase *  pBasePkt,
C4Network2IOConnection *  pConn 
)

Definition at line 543 of file C4Network2Client.cpp.

544 {
545  // find associated client
546  C4Network2Client *pClient = GetClient(pConn);
547  if (!pClient) return;
548 
549 #define GETPKT(type, name) \
550  assert(pBasePkt); const type &name = \
551  static_cast<const type &>(*pBasePkt);
552 
553  switch (cStatus)
554  {
555 
556  case PID_Addr: // address propagation
557  {
558  GETPKT(C4PacketAddr, rPkt)
559  // find client
560  pClient = GetClientByID(rPkt.getClientID());
561  if (pClient)
562  {
563  C4Network2Address addr = rPkt.getAddr();
564  // IP zero? Set to IP from where the packet came
565  if (addr.isIPNull())
566  {
567  addr.SetIP(pConn->getPeerAddr());
568  }
569  // add (no announce)
570  if (pClient->AddAddr(addr, true))
571  // new address? Try to connect
572  pClient->DoConnectAttempt(pIO);
573  }
574  }
575  break;
576 
577  case PID_TCPSimOpen:
578  {
580  pClient = GetClientByID(rPkt.getClientID());
581  if (pClient)
582  {
583  C4Network2Address addr = rPkt.getAddr();
584  pClient->DoTCPSimultaneousOpen(pIO, addr);
585  }
586  }
587  break;
588 
589  }
590 
591 #undef GETPKT
592 }
#define GETPKT(type, name)
@ PID_TCPSimOpen
Definition: C4PacketBase.h:113
@ PID_Addr
Definition: C4PacketBase.h:107
const C4NetIO::addr_t & getAddr() const
void SetIP(C4NetIO::addr_t ip)
bool isIPNull() const
bool DoConnectAttempt(class C4Network2IO *pIO)
bool DoTCPSimultaneousOpen(class C4Network2IO *pIO, const C4Network2Address &addr)
bool AddAddr(const C4Network2Address &addr, bool fAnnounce)
C4Network2Client * GetClient(const char *szName) const
const C4NetIO::addr_t & getPeerAddr() const
Definition: C4Network2IO.h:266

References C4Network2Client::AddAddr(), C4Network2Client::DoConnectAttempt(), C4Network2Client::DoTCPSimultaneousOpen(), C4Network2Address::getAddr(), GetClient(), GetClientByID(), C4Network2IOConnection::getPeerAddr(), GETPKT, C4Network2Address::isIPNull(), PID_Addr, PID_TCPSimOpen, pIO, and C4Network2Address::SetIP().

Referenced by C4Network2IO::CallHandlers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Init()

void C4Network2ClientList::Init ( C4ClientList *  pClientList,
bool  fHost 
)

Definition at line 396 of file C4Network2Client.cpp.

397 {
398  // save flag
399  fHost = fnHost;
400  // initialize
401  pClientList = pnClientList;
402  pClientList->InitNetwork(this);
403 }
void InitNetwork(class C4Network2ClientList *pNetClients)
Definition: C4Client.cpp:251

References fHost, C4ClientList::InitNetwork(), and pClientList.

Referenced by C4Network2::InitHost().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegClient()

C4Network2Client * C4Network2ClientList::RegClient ( C4Client *  pClient)

Definition at line 405 of file C4Network2Client.cpp.

406 {
407  // security
408  if (pClient->getNetClient())
409  return pClient->getNetClient();
410  // find insert position
411  C4Network2Client *pPos = pFirst, *pLast = nullptr;
412  for (; pPos; pLast = pPos, pPos = pPos->getNext())
413  if (pPos->getID() > pClient->getID())
414  break;
415  assert(!pLast || pLast->getID() != pClient->getID());
416  // create new client
417  C4Network2Client *pNetClient = new C4Network2Client(pClient);
418  // add to list
419  pNetClient->pNext = pPos;
420  (pLast ? pLast->pNext : pFirst) = pNetClient;
421  pNetClient->pParent = this;
422  // local?
423  if (pClient->isLocal())
424  pLocal = pNetClient;
425  else
426  // set auto-accept
427  pIO->AddAutoAccept(pClient->getCore());
428  // add
429  return pNetClient;
430 }
bool isLocal() const
Definition: C4Client.h:116
int32_t getID() const
Definition: C4Client.h:105
C4Network2Client * getNetClient() const
Definition: C4Client.h:117
const C4ClientCore & getCore() const
Definition: C4Client.h:104
class C4Network2ClientList * pParent
void AddAutoAccept(const C4ClientCore &CCore)

References C4Network2IO::AddAutoAccept(), C4Client::getCore(), C4Client::getID(), C4Network2Client::getID(), C4Client::getNetClient(), C4Network2Client::getNext(), C4Client::isLocal(), pFirst, pIO, pLocal, C4Network2Client::pNext, and C4Network2Client::pParent.

Referenced by C4ClientList::Add(), and C4ClientList::InitNetwork().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetReady()

void C4Network2ClientList::ResetReady ( )

Definition at line 613 of file C4Network2Client.cpp.

614 {
615  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
616  if (pClient->isWaitedFor())
617  pClient->SetStatus(NCS_NotReady);
618 }
@ NCS_NotReady

References C4Network2Client::getNext(), NCS_NotReady, and pFirst.

Referenced by C4Network2::ChangeGameStatus().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SendAddresses()

void C4Network2ClientList::SendAddresses ( C4Network2IOConnection *  pConn)

Definition at line 594 of file C4Network2Client.cpp.

595 {
596  // send all client addresses known
597  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
598  pClient->SendAddresses(pConn);
599 }

References C4Network2Client::getNext(), and pFirst.

Referenced by C4Network2::HandleJoinData(), and C4Network2::SendJoinData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SendMsgToClient()

bool C4Network2ClientList::SendMsgToClient ( int32_t  iClient,
C4NetIOPacket &&  rPkt 
)

Definition at line 528 of file C4Network2Client.cpp.

529 {
530  // find client
531  C4Network2Client *pClient = GetClientByID(iClient);
532  if (!pClient) return false;
533  // connected? send directly
534  if (pClient->isConnected())
535  return pClient->SendMsg(rPkt);
536  // forward
537  C4PacketFwd Fwd; Fwd.SetListType(false);
538  Fwd.AddClient(iClient);
539  Fwd.SetData(rPkt);
541 }
bool isConnected() const
bool SendMsg(C4NetIOPacket rPkt) const

References C4PacketFwd::AddClient(), GetClientByID(), C4Network2Client::isConnected(), MkC4NetIOPacket(), PID_FwdReq, C4Network2Client::SendMsg(), SendMsgToHost(), C4PacketFwd::SetData(), and C4PacketFwd::SetListType().

Referenced by C4Network2::OnDisconn().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SendMsgToHost()

bool C4Network2ClientList::SendMsgToHost ( C4NetIOPacket  rPkt)

Definition at line 518 of file C4Network2Client.cpp.

519 {
520  // find host
521  C4Network2Client *pHost = GetHost();
522  if (!pHost) return false;
523  // send message
524  if (!pHost->getMsgConn()) return false;
525  return pHost->SendMsg(rPkt);
526 }
C4Network2IOConnection * getMsgConn() const
C4Network2Client * GetHost()

References GetHost(), C4Network2Client::getMsgConn(), and C4Network2Client::SendMsg().

Referenced by BroadcastMsgToClients(), C4GameControlNetwork::CheckCompleteCtrl(), C4Network2::CheckStatusReached(), C4GameControlNetwork::DoInput(), C4Network2Players::JoinLocalPlayer(), C4Network2::RequestActivate(), C4Network2Players::RequestPlayerInfoUpdate(), and SendMsgToClient().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateClientActivity()

void C4Network2ClientList::UpdateClientActivity ( )

Definition at line 628 of file C4Network2Client.cpp.

629 {
630  for (C4Network2Client *pClient = pFirst; pClient; pClient = pClient->getNext())
631  if (pClient->isActivated())
632  if (::Players.GetAtClient(pClient->getID()))
633  pClient->SetLastActivity(Game.FrameCounter);
634 }
C4Game Game
Definition: C4Globals.cpp:52
C4PlayerList Players
int32_t FrameCounter
Definition: C4Game.h:129
C4Player * GetAtClient(int iClient, int iIndex=0) const

References C4Game::FrameCounter, Game, C4PlayerList::GetAtClient(), C4Network2Client::getNext(), pFirst, and Players.

Referenced by C4Network2::DeactivateInactiveClients().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fHost

bool C4Network2ClientList::fHost
protected

Definition at line 154 of file C4Network2Client.h.

Referenced by BroadcastMsgToClients(), and Init().

◆ pClientList

C4ClientList* C4Network2ClientList::pClientList
protected

Definition at line 153 of file C4Network2Client.h.

Referenced by Clear(), and Init().

◆ pFirst

◆ pIO

C4Network2IO* C4Network2ClientList::pIO
protected

◆ pLocal

C4Network2Client* C4Network2ClientList::pLocal
protected

Definition at line 152 of file C4Network2Client.h.

Referenced by Clear(), GetLocal(), and RegClient().


The documentation for this class was generated from the following files: