Proud::CNetServer 클래스 참조abstract

게임용 네트워크 서버 더 자세히 ...

Proud::CNetServer에 대한 상속 다이어그램 :

Public 멤버 함수

virtual bool CloseConnection (HostID clientHostID)=0
 
virtual void CloseEveryConnection ()=0
 
virtual HostID CreateP2PGroup (const HostID *clientHostIDs, int count, ByteArray customField=ByteArray(), CP2PGroupOption &option=CP2PGroupOption::Default, HostID assignedHostID=HostID_None)=0
 
HostID CreateP2PGroup (ByteArray customField=ByteArray(), CP2PGroupOption &option=CP2PGroupOption::Default, HostID assignedHostID=HostID_None)
 
HostID CreateP2PGroup (HostID memberID, ByteArray customField=ByteArray(), CP2PGroupOption &option=CP2PGroupOption::Default, HostID assignedHostID=HostID_None)
 
virtual bool DestroyP2PGroup (HostID groupHostID)=0
 
virtual void DestroyEmptyP2PGroups ()=0
 
virtual String DumpGroupStatus ()=0
 
virtual int GetClientCount ()=0
 
virtual void GetStats (CNetServerStats &outVal)=0
 
virtual int GetClientHostIDs (HostID *output, int outputLength)=0
 
virtual bool GetJoinedP2PGroups (HostID clientHostID, HostIDArray &output)=0
 
double GetLastPingSec (HostID clientID, ErrorType *error=NULL)
 
virtual int GetLastUnreliablePingMs (HostID clientID, ErrorType *error=NULL)=0
 
double GetRecentPingSec (HostID clientID, ErrorType *error=NULL)
 
virtual int GetRecentUnreliablePingMs (HostID clientID, ErrorType *error=NULL)=0
 
virtual int GetP2PRecentPingMs (HostID HostA, HostID HostB)=0
 
virtual bool GetP2PGroupInfo (HostID groupHostID, CP2PGroup &output)=0
 
virtual bool IsValidHostID (HostID id)=0
 
virtual void GetP2PGroups (CP2PGroups &output)=0
 
virtual int GetP2PGroupCount ()=0
 
virtual bool GetClientInfo (HostID clientHostID, CNetClientInfo &output)=0
 
virtual bool IsConnectedClient (HostID clientHostID)=0
 
PN_DEPRECATED bool GetPeerInfo (HostID clientHostID, CNetClientInfo &output)
 
virtual bool SetHostTag (HostID hostID, void *hostTag)=0
 
virtual int64_t GetTimeMs ()=0
 
virtual bool JoinP2PGroup (HostID memberHostID, HostID groupHostID, ByteArray customField=ByteArray())=0
 
virtual bool LeaveP2PGroup (HostID memberHostID, HostID groupHostID)=0
 
virtual void SetEventSink (INetServerEvent *eventSink)=0
 
virtual void Start (CStartServerParameter &param)=0
 
virtual void Start (CStartServerParameter &param, ErrorInfoPtr &outError)=0
 
virtual void Stop ()=0
 
virtual void AllowEmptyP2PGroup (bool enable)=0
 
virtual void GetRemoteIdentifiableLocalAddrs (CFastArray< NamedAddrPort > &output)=0
 
virtual void GetTcpListenerLocalAddrs (CFastArray< AddrPort > &output)=0
 
virtual void GetUdpListenerLocalAddrs (CFastArray< AddrPort > &output)=0
 
virtual void SetDefaultTimeoutTimeMs (int newValInMs)=0
 
virtual void SetDefaultTimeoutTimeSec (double newValInSec)=0
 
virtual void SetDefaultFallbackMethod (FallbackMethod newValue)=0
 
virtual void EnableLog (const PNTCHAR *logFileName)=0
 
virtual void DisableLog ()=0
 
virtual void SetSpeedHackDetectorReckRatioPercent (int newValue)=0
 
virtual bool EnableSpeedHackDetector (HostID clientID, bool enable)=0
 
virtual void SetMessageMaxLength (int value_s, int value_c)=0
 
virtual bool IsNagleAlgorithmEnabled ()=0
 
virtual void SetMaxDirectP2PConnectionCount (HostID clientID, int newVal)=0
 
virtual bool SetDirectP2PStartCondition (DirectP2PStartCondition newVal)=0
 
virtual HostID GetMostSuitableSuperPeerInGroup (HostID groupID, const CSuperPeerSelectionPolicy &policy=CSuperPeerSelectionPolicy::GetOrdinary(), const HostID *excludees=NULL, intptr_t excludeesLength=0)=0
 
virtual HostID GetMostSuitableSuperPeerInGroup (HostID groupID, const CSuperPeerSelectionPolicy &policy, HostID excludee)=0
 
virtual int GetSuitableSuperPeerRankListInGroup (HostID groupID, SuperPeerRating *ratings, int ratingsBufferCount, const CSuperPeerSelectionPolicy &policy=CSuperPeerSelectionPolicy::GetOrdinary(), const CFastArray< HostID > &excludees=CFastArray< HostID >())=0
 
virtual void GetUdpSocketAddrList (CFastArray< AddrPort > &output)=0
 
virtual int GetInternalVersion ()=0
 
virtual bool GetP2PConnectionStats (HostID remoteHostID, CP2PConnectionStats &status)=0
 
virtual bool GetP2PConnectionStats (HostID remoteA, HostID remoteB, CP2PPairConnectionStats &status)=0
 
virtual void GetUserWorkerThreadInfo (CFastArray< CThreadInfo > &output)=0
 
virtual void GetNetWorkerThreadInfo (CFastArray< CThreadInfo > &output)=0
 
virtual bool SendUserMessage (const HostID *remotes, int remoteCount, const RmiContext &rmiContext, uint8_t *payload, int payloadLength)=0
 
bool SendUserMessage (HostID remote, const RmiContext &rmiContext, uint8_t *payload, int payloadLength)
 
virtual ErrorType SetCoalesceIntervalMs (HostID remote, int intervalMs)=0
 
 
virtual ErrorType SetCoalesceIntervalToAuto (HostID remote)=0
 
 
virtual void TEST_SetOverSendSuspectingThresholdInBytes (int newVal)=0
 
virtual void TEST_SetTestping (HostID hostID0, HostID hostID1, int ping)=0
 
virtual void TEST_ForceDenyTcpConnection ()=0
 
virtual ErrorType GetUnreliableMessagingLossRatioPercent (HostID remotePeerID, int *outputPercent)=0
 
- Proud::IRmiHost(으)로부터 상속된 Public 멤버 함수
virtual void AttachProxy (IRmiProxy *proxy)=0
 
void AttachProxy (IRmiProxy *proxy, ErrorInfoPtr &outError)
 
virtual void AttachStub (IRmiStub *stub)=0
 
void AttachStub (IRmiStub *stub, ErrorInfoPtr &outError)
 
virtual void DetachProxy (IRmiProxy *proxy)=0
 
void DetachProxy (IRmiProxy *proxy, ErrorInfoPtr &outError)
 
virtual void DetachStub (IRmiStub *stub)=0
 
void DetachStub (IRmiStub *stub, ErrorInfoPtr &outError)
 
virtual void SetTag (void *value)=0
 
virtual void * GetTag ()=0
 
virtual bool RunAsync (HostID taskOwner, LambdaBase_Param0< void > *func)=0
 
virtual bool IsSimplePacketMode ()=0
 
virtual void ShowError_NOCSLOCK (ErrorInfoPtr errorInfo)=0
 
virtual void ShowNotImplementedRmiWarning (const PNTCHAR *RMIName)=0
 
virtual void PostCheckReadMessage (CMessage &msg, const PNTCHAR *RMIName)=0
 
virtual void ConvertGroupToIndividualsAndUnion (int numberOfsendTo, const HostID *sendTo, HostIDArray &output, FavoriteLV &favoriteLV)=0
 
virtual CriticalSectionGetCriticalSection ()=0
 

정적 Public 멤버 함수

static CNetServerCreate ()
 

Public 속성

LambdaBaseHolder_Param1< void,
CNetClientInfo * > 
OnClientJoin
 See Proud.INetServerEvent.OnClientJoin for details.
 
LambdaBaseHolder_Param3< void,
CNetClientInfo *, ErrorInfo
*, const ByteArray & > 
OnClientLeave
 See Proud.INetServerEvent.OnClientLeave for details.
 
LambdaBaseHolder_Param2< void,
HostID, HackType
OnClientHackSuspected
 See Proud.INetServerEvent.OnClientHackSuspected for details.
 
LambdaBaseHolder_Param1< void,
CRemoteOfflineEventArgs & > 
OnClientOffline
 See Proud.INetServerEvent.OnClientOffline for details.
 
LambdaBaseHolder_Param1< void,
CRemoteOnlineEventArgs & > 
OnClientOnline
 See Proud.INetServerEvent.OnClientOnline for details.
 
LambdaBaseHolder_Param4< void,
AddrPort, ByteArray
&, ByteArray &, bool * > 
OnConnectionRequest
 See Proud.INetServerEvent.OnConnectionRequest for details.
 
LambdaBaseHolder_Param3< void,
HostID, HostID, ErrorType
OnP2PGroupJoinMemberAckComplete
 See Proud.INetServerEvent.OnP2PGroupJoinMemberAckComplete for details.
 
LambdaBaseHolder_Param1< void,
HostID
OnP2PGroupRemoved
 See Proud.INetServerEvent.OnP2PGroupRemoved for details.
 
LambdaBaseHolder_Param0< void > OnUserWorkerThreadBegin
 See Proud.INetServerEvent.OnUserWorkerThreadBegin for details.
 
LambdaBaseHolder_Param0< void > OnUserWorkerThreadEnd
 See Proud.INetServerEvent.OnUserWorkerThreadEnd for details.
 
- Proud::HasCoreEventFunctionObjects(으)로부터 상속된 Public 속성
LambdaBaseHolder_Param1< void,
ErrorInfo * > 
OnError
 See Proud.INetCoreEvent.OnError for details.
 
LambdaBaseHolder_Param1< void,
Exception & > 
OnException
 See Proud.INetCoreEvent.OnException for details.
 
LambdaBaseHolder_Param1< void,
ErrorInfo * > 
OnInformation
 See Proud.INetCoreEvent.OnInformation for details.
 
LambdaBaseHolder_Param1< void,
RmiID > 
OnNoRmiProcessed
 See Proud.INetCoreEvent.OnNoRmiProcessed for details.
 
LambdaBaseHolder_Param4< void,
HostID, const RmiContext
&, uint8_t *, int > 
OnReceiveUserMessage
 See Proud.INetCoreEvent.OnReceiveUserMessage for details.
 
LambdaBaseHolder_Param1< void,
ErrorInfo * > 
OnWarning
 See Proud.INetCoreEvent.OnWarning for details.
 
LambdaBaseHolder_Param1< void,
void * > 
OnTick
 See Proud.INetCoreEvent.OnTick for details.
 
LambdaBaseHolder_Param0< void > OnUserWorkerThreadCallbackBegin
 See Proud.INetCoreEvent.OnUserWorkerThreadCallbackBegin for details.
 
LambdaBaseHolder_Param0< void > OnUserWorkerThreadCallbackEnd
 See Proud.INetCoreEvent.OnUserWorkerThreadCallbackEnd for details.
 

추가로 상속된 멤버들

- Proud::IRmiHost(으)로부터 상속된 Protected 멤버 함수
virtual bool Send (const CSendFragRefs &sendData, const SendOpt &sendContext, const HostID *sendTo, int numberOfsendTo, int &compressedPayloadLength, FavoriteLV &favoriteLV)=0
 

상세한 설명

게임용 네트워크 서버

게임용 네트워크 서버입니다. 자세한 것은 ProudNet 서버 에 있습니다.

  • MMO 게임에도 쓸 수 있다.
  • CNetClient 의 연결을 받는다.
  • 클라이언트에게 HostID 를 배정해주는 역할을 한다.
  • HostID 를 매개체로 하는 RMI를 가능하게 한다.
  • 일반적인 게임 서버에 필요한 기본적 옵션이 설정되어 있다.
  • 클라이언트간 P2P 연결을 지원한다. 이 서버 객체는 클라이언트간 P2P 연결이 실패할 경우 릴레이 서버 역할도 지원한다.

일반적 용법

P2P 연결 그룹 만들기

  • CNetServer 에 연결된 클라이언트는 1개 이상의 P2P 그룹을 만들 수 있다. P2P 그룹으로 묶여있는 클라이언트끼리는 HostID 를 인자로 RMI 를 직접 주고 받을 수 있다.
  • 새 P2P group을 생성/제거하기: 서버만이 권한이 있다. CreateP2PGroup(),DestroyP2PGroup() 를 통해서. 클라이언트에서는 OnP2PMemberJoin 등이 호출된다.
  • peer 를 기 존재 P2P group에 추가/제거하기: JoinP2PGroup(), LeaveP2PGroup(). 클라이언트에서는 OnP2PMemberJoin 등이 호출된다.

Relay server로서의 역할

  • HostID 를 쓰는한 P2P 연결은 가상으로도 이루어진다. 예컨대 P2P 연결이 실제로 아직 성공하지 못한 peer간이라도 상대가 P2P group에 속해있으면 상대의 HostID 로 보내는 RMI는 성공적으로 상대에게 간다. relay server가 중도 역할을 담당한다. 같은 RMI 수신 메시지라도 그것이 relay server를 경유했는지 여부를 얻으려면 RMI 수신부에서 RmiContext.m_relayed 를 읽으면 된다.

스레드 풀링

  • 기본적으로 스레드 풀을 사용한다. 따라서 서버 시작시 스레드 수를 최소 1개를 지정해야 한다.
  • 스레드 풀링 기능을 끄는게 유리한 경우: 1개 CPU이면서 CPU time 처리가 전부인 서버(예컨대 릴레이 서버)
  • 스레드 풀링 기능을 켜는게 유리한 경우: 멀티 CPU 또는 device time 처리가 잦은 서버(예컨대 MMO 게임 서버)
  • 스레드 풀 함수는 CoInitialize()가 준비된 상태에서 호출되므로 또 CoInitialize()나 CoUninitialize() 호출 불필요.

UDP 호스트 포트 갯수 관련 서버 성능

  • CNetServer.Start 의 서버 포트 파라메터로 UDP 호스트 포트 갯수를 지정할 수 있다. 클라이언트는 서버로 연결할 때 파라메터에 있는 포트 중 하나로 서버에 연결된다.

P2P 직접 통신 성공 가능성 노트

  • P2P간 한쪽이 real IP, Full-cone NAT인 경우 direct P2P 통신이 성공한다.
  • 게임 서버가 NAT 뒤에서 작동할 경우, Start()에 서버 주소를 넣어야 한다. (자세한 것은 Start()의 설명 참조) 단, 이렇게 한다 하더라도 게임 서버 앞의 NAT 뒤에 있는 또 다른 호스트에서 실행되는 클라이언트와 외부 인터넷 의 클라이언트간 직접 P2P 통신은 실현되지 못한다. 서버에 있는 NAT 장치에 의해 외부 인터넷 주소 대신 NAT의 내부 IP가 인식되기 때문이다.

멤버 함수 문서화

virtual void Proud::CNetServer::AllowEmptyP2PGroup ( bool  enable)
pure virtual

멤버가 전혀 없는 P2P 그룹 이 유지될 수 있도록 설정하는 옵션. 기본적으로는 true로 설정되어 있다.

  • true로 설정될 경우: CreateP2PGroup 호출시 멤버 0개짜리 P2P 그룹을 생성해도 성공한다. 멤버가 0개짜리 P2P 그룹이 계속 존재한다. 이러한 경우 사용자는 멤버가 0개인 P2P 그룹이 계속해서 서버에 남지 않도록, 필요한 경우 DestroyP2PGroup 또는 DestroyEmptyP2PGroups 을 호출해야 한다.
  • false로 설정될 경우: CreateP2PGroup 호출시 멤버 0개짜리 P2P 그룹을 생성할 수 없다. P2P 그룹의 멤버가 0개가 되면 그 P2P 그룹은 자동 파괴된다.
virtual bool Proud::CNetServer::CloseConnection ( HostID  clientHostID)
pure virtual

클라이언트 또는 채팅 그룹에 속한 모든 클라이언트를 쫓아낸다.

반환값
해당 클라이언트가 없으면 false.
virtual void Proud::CNetServer::CloseEveryConnection ( )
pure virtual

모든 클라이언트를 추방한다.

static CNetServer* Proud::CNetServer::Create ( )
static

새 인스턴스를 생성합니다.

virtual HostID Proud::CNetServer::CreateP2PGroup ( const HostID clientHostIDs,
int  count,
ByteArray  customField = ByteArray(),
CP2PGroupOption option = CP2PGroupOption::Default,
HostID  assignedHostID = HostID_None 
)
pure virtual

P2P 그룹 을 생성합니다.

  • 이렇게 생성한 그룹 내의 피어들끼리는 즉시 서로간 메시징을 해도 됩니다. (참고: ProudNet의 P2P 통신 성능)
  • 클라이언트 목록(clientHostIDs,clientHostIDNum)을 받을 경우 이미 멤버가 채워져 있는 P2P group을 생성한다. 텅 빈 배열을 넣을 경우 멤버 0개짜리 P2P 그룹을 생성할 수 있다. (단, AllowEmptyP2PGroup 에 따라 다르다.)
  • 이 메서드 호출 후, CNetClient 에서는 P2P 그룹의 각 멤버에 대해(자기 자신 포함) INetClientEvent.OnP2PMemberJoin 이 연이어서 호출된다.
  • HostID_Server 가 들어가도 되는지 여부는 P2P 그룹 멤버로서 서버를 포함시키기 를 참고하십시오.
매개변수
clientHostIDs만들 P2P 그룹의 멤버 리스트. HostID_Server 는 멤버로 불가능하다. count=0일때 이 값은 무시된다.
countclientHostIDs의 배열 요소 갯수. 0을 넣을 경우 멤버가 없는 P2P group 을 생성함을 의미한다.
customFieldP2P 그룹을 추가하면서 서버에서 관련 클라이언트들에게 보내는 메시지. 생략하셔도 됩니다.
optionP2P 그룹 생성 과정에서 사용자가 지정하고 싶은 추가 옵션입니다. 생략하셔도 됩니다.
assignedHostID사용자가 원하는 HostID 를 가진 P2P 그룹을 생성할 수 있습니다. 기본값은 None입니다. None을 지정하면 자동 할당됩니다. 만약 이미 사용중인 HostID 를 입력할 경우 P2P group 생성은 실패하고 None을 리턴할 수 있습니다.
반환값
만들어진 P2P 그룹의 Host ID 입니다. 타입은 HostID 입니다.
HostID Proud::CNetServer::CreateP2PGroup ( ByteArray  customField = ByteArray(),
CP2PGroupOption option = CP2PGroupOption::Default,
HostID  assignedHostID = HostID_None 
)
inline

멤버가 없는 P2P 그룹을 만듭니다.

  • AllowEmptyP2PGroup 설정에 따라 그룹 생성이 실패할 수도 있다.
    매개변수
    customFieldP2P 그룹을 추가하면서 서버에서 관련 클라이언트들에게 보내는 메시지입니다. 생략하셔도 됩니다.
    assignedHostID사용자가 원하는 HostID 를 가진 P2P 그룹을 생성할 수 있습니다. 기본값은 None입니다. None을 지정하면 자동 할당됩니다. 만약 이미 사용중인 HostID 를 입력할 경우 P2P group 생성은 실패하고 None을 리턴할 수 있습니다.
    반환값
    만들어진 P2P 그룹의 Host ID 입니다. 타입은 HostID 입니다.
HostID Proud::CNetServer::CreateP2PGroup ( HostID  memberID,
ByteArray  customField = ByteArray(),
CP2PGroupOption option = CP2PGroupOption::Default,
HostID  assignedHostID = HostID_None 
)
inline

1개 멤버로 구성된 P2P 그룹을 만듭니다.

매개변수
memberID그룹에 처음 들어가 있을 멤버의 HostID 입니다.
customFieldP2P 그룹을 추가하면서 서버에서 관련 클라이언트들에게 보내는 메시지입니다. 생략하셔도 됩니다.
assignedHostID사용자가 원하는 HostID 를 가진 P2P 그룹을 생성할 수 있습니다. 기본값은 None입니다. None을 지정하면 자동 할당됩니다. 만약 이미 사용중인 HostID 를 입력할 경우 P2P group 생성은 실패하고 None을 리턴할 수 있습니다.
반환값
만들어진 P2P 그룹의 Host ID 입니다. 타입은 HostID 입니다.
virtual void Proud::CNetServer::DestroyEmptyP2PGroups ( )
pure virtual

서버에 생성되어 있는 모든 P2P 그룹 을 뒤져서, 멤버가 전혀 없는 P2P 그룹만 골라서 모두 파괴한다.

virtual bool Proud::CNetServer::DestroyP2PGroup ( HostID  groupHostID)
pure virtual

P2P 그룹 을 파괴한다.

  • 안에 있던 모든 member들은 P2P 그룹에서 탈퇴된다는 이벤트(Proud.INetClientEvent.OnP2PMemberLeave)를 노티받는다. 물론, 서버와의 연결은 유지된다.
    매개변수
    groupHostID파괴할 P2P 그룹의 ID
    반환값
    해당 P2P 그룹이 없으면 false.
virtual void Proud::CNetServer::DisableLog ( )
pure virtual

EnableLog로 켠 로그를 끈다.

virtual String Proud::CNetServer::DumpGroupStatus ( )
pure virtual

내부 상황을 문자열로 리턴한다. 디버그용으로 쓸만하다.

virtual void Proud::CNetServer::EnableLog ( const PNTCHAR *  logFileName)
pure virtual

내부 실행 로그를 파일로 남기는 기능을 켠다.

  • 이 기능이 필요한 경우는 별로 없다. Nettention에서 문제를 수집하기 위한 목적으로 사용된다.
  • 이미 EnableLog 를 한 상태에서 이 함수를 또 호출하면 이 함수는 아무것도 하지 않는다. 만약 다른 파일명으로 로그를 계속해서 쌓고 싶으면 DisableLog를 호출 후 EnableLog를 호출해야 한다.
    매개변수
    logFileName로그 파일 이름
virtual bool Proud::CNetServer::EnableSpeedHackDetector ( HostID  clientID,
bool  enable 
)
pure virtual

스피드핵 탐지 기능을 켜거나 끈다.

매개변수
clientID스피드핵 탐지 기능을 끄거나 켤 클라이언트의 HostID
enable켜려면 true.
반환값
유효한 클라이언트를 찾았으면 true. 적용할 클라이언트가 없는 경우 false.
virtual int Proud::CNetServer::GetClientCount ( )
pure virtual

접속한 클라이언트 갯수를 얻는다.

virtual int Proud::CNetServer::GetClientHostIDs ( HostID output,
int  outputLength 
)
pure virtual

클라이언트 HostID 목록을 얻는다.

  • 이 메서드로 얻는 목록은 호출할 시점의 스냅샷일 뿐이다. 이 함수가 리턴된 후에도 클라이언트 목록의 내용이 실제 서버의 상태와 동일함을 보장하지는 않는다. 따라서 정확한 클라이언트 리스트를 얻고자 하면 INetServerEvent.OnClientJoin, INetServerEvent.OnClientLeave 에서 유저가 필요로 하는 클라이언트 리스트를 따로 만들어 관리하는 것을 권장한다.
    매개변수
    outputHostID 목록이 채워질 곳
    outputLength목록의 최대 크기
    반환값
    실제 채워진 항목의 갯수
virtual bool Proud::CNetServer::GetClientInfo ( HostID  clientHostID,
CNetClientInfo output 
)
pure virtual

이 객체에 연결된 peer 1개의 정보를 얻는다.

매개변수
peerHostID찾으려는 peer의 HostID
output찾은 peer의 정보. 못 찾으면 아무것도 채워지지 않는다.
반환값
true이면 찾았다는 뜻
virtual int Proud::CNetServer::GetInternalVersion ( )
pure virtual

엔진 프로토콜 버전을 얻는다. 이 값이 클라이언트에서 얻는 엔진 프로토콜 버전과 다르면 접속이 불허된다.

virtual bool Proud::CNetServer::GetJoinedP2PGroups ( HostID  clientHostID,
HostIDArray output 
)
pure virtual

clientHostID가 가리키는 peer가 참여하고 있는 P2P group 리스트를 얻는다.

double Proud::CNetServer::GetLastPingSec ( HostID  clientID,
ErrorType error = NULL 
)
inline

클라이언트의 마지막 레이턴시를 얻는다.

매개변수
clientID찾으려는 클라이언트의 HostID.
반환값
ping time을 밀리초단위로 리턴한다. 단 없으면 -1을 리턴한다.
virtual int Proud::CNetServer::GetLastUnreliablePingMs ( HostID  clientID,
ErrorType error = NULL 
)
pure virtual

클라이언트의 마지막 레이턴시를 얻는다.

매개변수
clientID찾으려는 클라이언트의 HostID.
반환값
ping time을 밀리초단위로 리턴한다. 단 없으면 -1을 리턴한다.
virtual HostID Proud::CNetServer::GetMostSuitableSuperPeerInGroup ( HostID  groupID,
const CSuperPeerSelectionPolicy policy = CSuperPeerSelectionPolicy::GetOrdinary(),
const HostID excludees = NULL,
intptr_t  excludeesLength = 0 
)
pure virtual

수퍼 피어로서 가장 적격의 역할을 할 클라이언트를 찾는다. Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹 형식의 게임을 개발중인 경우, 이 메서드는 groupID가 가리키는 P2P그룹 에 있는 멤버들 중 가장 최적의 수퍼 피어를 찾아서 알려준다.

  • 이 메서드는 P2P 그룹을 생성하거나 변경한 직후 바로 얻을 경우 제대로 찾지 못할 수 있다.
  • 처음 이 메서드를 호출한 후부터 약 2~5초 정도 지난 후에 다시 호출하면 더 정확한 수퍼피어를 찾는다.
    매개변수
    groupIDP2P 그룹 에서 찾는다
    policy수퍼 피어를 선정하는 정책. 자세한 설명은 CSuperPeerSelectionPolicy 참고.
    exclusdeesgroupID가 가리키는 P2P 그룹 의 멤버 중 exclusdees에 들어있는 멤버들은 제외하고 선별한다. 예를 들어 이미 사용하던 수퍼피어가 자격 박탈된 경우 다시 이것이 재 선발됨을 의도적으로 막고자 할 때 유용하다.
    반환값
    수퍼피어로서 가장 적격인 클라이언트의 HostID. P2P 그룹을 찾지 못하거나 excludees에 의해 모두가 필터링되면 HostID_None 을 리턴합니다.
virtual HostID Proud::CNetServer::GetMostSuitableSuperPeerInGroup ( HostID  groupID,
const CSuperPeerSelectionPolicy policy,
HostID  excludee 
)
pure virtual

동명 메서드 설명을 참고바람

virtual void Proud::CNetServer::GetNetWorkerThreadInfo ( CFastArray< CThreadInfo > &  output)
pure virtual

네트워킹 스레드의 정보를 얻습니다. ProudNet은 스레드 풀(Thread pool) 과 별개로 네트워크 I/O처리를 담당하는 스레드가 내장되어 있습니다. 이것의 정보를 얻습니다.

매개변수
output여기에 정보가 채워집니다.
virtual bool Proud::CNetServer::GetP2PConnectionStats ( HostID  remoteHostID,
CP2PConnectionStats status 
)
pure virtual

지정한 대상과 관련된 모든 P2P 연결의 상태 통계를 얻습니다. 가령 Direct P2P와 relayed P2P의 비율을 얻을 때 이 메서드가 유용합니다.

매개변수
remoteHostID클라이언트 또는 P2P 그룹 의 HostID 입니다.
  • 1개 클라이언트의 HostID 인 경우, 이 메서드는 그 클라이언트가 P2P 통신하는 다른 피어들과의 연결 통계를 반환합니다.
  • 1개 P2P 그룹의 HostID 인 경우, 이 메서드는 그 P2P 그룹 내의 모든 클라이언트끼리의 P2P 통신에 대한 통계를 반환합니다.
statusP2P커넥션 관련 변수들이 여기에 채워집니다.
반환값
remoteHostID가 유효하면 true,유효하지 않으면 false를 리턴 합니다.
virtual bool Proud::CNetServer::GetP2PConnectionStats ( HostID  remoteA,
HostID  remoteB,
CP2PPairConnectionStats status 
)
pure virtual

remoteA 와 remoteB 사이의 udp message 시도횟수와 성공횟수를 반환해줍니다.

  • 사용 자는 이를 바탕으로 udp 손실율 등을 계산할수있습니다.
virtual int Proud::CNetServer::GetP2PGroupCount ( )
pure virtual

개설되어 있는 P2P group의 총 갯수를 얻는다.

virtual bool Proud::CNetServer::GetP2PGroupInfo ( HostID  groupHostID,
CP2PGroup output 
)
pure virtual

P2P group 1개의 정보를 얻는다.

virtual void Proud::CNetServer::GetP2PGroups ( CP2PGroups output)
pure virtual

모든 P2P group list를 얻는다.

  • 사본 카피를 한다.
virtual int Proud::CNetServer::GetP2PRecentPingMs ( HostID  HostA,
HostID  HostB 
)
pure virtual

두 피어간의 최근 핑 정보를 받습니다.

PN_DEPRECATED bool Proud::CNetServer::GetPeerInfo ( HostID  clientHostID,
CNetClientInfo output 
)
inline

GetClientInfo와 같은 역할을 하며, 이제 더 이상 안쓰는 함수다. 대신 GetClientInfo를 사용하는 것을 권장한다.

double Proud::CNetServer::GetRecentPingSec ( HostID  clientID,
ErrorType error = NULL 
)
inline

클라이언트의 최근 레이턴시를 얻는다.

매개변수
clientID찾으려는 클라이언트의 HostID.
반환값
ping time을 초단위로 리턴한다. 단 없으면 -1을 리턴한다.
virtual int Proud::CNetServer::GetRecentUnreliablePingMs ( HostID  clientID,
ErrorType error = NULL 
)
pure virtual

클라이언트의 최근 레이턴시를 얻는다.

매개변수
clientID찾으려는 클라이언트의 HostID.
반환값
ping time을 밀리초단위로 리턴한다. 단 없으면 -1을 리턴한다.
virtual void Proud::CNetServer::GetRemoteIdentifiableLocalAddrs ( CFastArray< NamedAddrPort > &  output)
pure virtual

클라이언트에서 인식 가능한 서버의 리스닝 주소 리스트를 얻는다.

  • 서버 시작시 받은 서버 주소를 토대로 리턴한다. NAT나 2개 이상의 랜카드가 있는 경우 유용하다.
virtual void Proud::CNetServer::GetStats ( CNetServerStats outVal)
pure virtual

서버 처리량 통계를 얻는다.

virtual int Proud::CNetServer::GetSuitableSuperPeerRankListInGroup ( HostID  groupID,
SuperPeerRating ratings,
int  ratingsBufferCount,
const CSuperPeerSelectionPolicy policy = CSuperPeerSelectionPolicy::GetOrdinary(),
const CFastArray< HostID > &  excludees = CFastArrayHostID >() 
)
pure virtual

GetMostSuitableSuperPeerInGroup는 가장 적격의 Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹 를 얻는 기능입니다. 이 함수는 가장 적격의 수퍼피어 뿐만 아니라 차순위 적격 수퍼피어들의 목록을 제공합니다. 이 함수가 리턴하는 리스트의 첫번째 항목은 GetMostSuitableSuperPeerInGroup에서 리턴하는 수퍼피어와 동일합니다.

매개변수
groupIDP2P 그룹 에서 적격 수퍼피어 목록을 제공합니다.
ratings여기에 적격 수퍼피어 목록이 채워집니다. 가장 적격인 수퍼피어 순으로 정렬되어 채워집니다.
ratingsBufferCountrating 의 배열 항목 갯수입니다. 이 함수가 리턴하는 배열의 크기는 이 크기 이상은 채우지 않습니다.
policyGetMostSuitableSuperPeerInGroup 에서 같은 이름의 파라메터를 참고하십시오.
excludeesGetMostSuitableSuperPeerInGroup 에서 같은 이름의 파라메터를 참고하십시오.
반환값
ratings 에 채워진 항목의 갯수입니다. P2P 그룹을 찾지 못하거나 excludees 에 의해 모두가 필터링되면 0을 리턴합니다.
virtual void Proud::CNetServer::GetTcpListenerLocalAddrs ( CFastArray< AddrPort > &  output)
pure virtual

TCP listener port의 로컬 주소 리스트를 얻는다. 예를 들어 서버 포트를 동적 할당한 경우 이것을 통해 실제 서버의 리스닝 포트 번호를 얻을 수 있다.

virtual int64_t Proud::CNetServer::GetTimeMs ( )
pure virtual

서버의 현재 시간을 얻는다. CNetClient.GetServerTimeMs()과 거의 같은 값이다.

virtual void Proud::CNetServer::GetUdpListenerLocalAddrs ( CFastArray< AddrPort > &  output)
pure virtual

UDP listener port의 로컬 주소 리스트를 얻는다. 예를 들어 서버 포트를 동적 할당한 경우 이것을 통해 실제 서버의 리스닝 포트 번호를 얻을 수 있다.

virtual void Proud::CNetServer::GetUdpSocketAddrList ( CFastArray< AddrPort > &  output)
pure virtual

서버에서 준비된 UDP 소켓 주소들을 얻는다.

virtual ErrorType Proud::CNetServer::GetUnreliableMessagingLossRatioPercent ( HostID  remotePeerID,
int *  outputPercent 
)
pure virtual

일반적인 온라인 게임에서는 unreliable 메시징이 전체 트래픽의 대부분을 차이지함에 따라 기존 unreliable 메시징 기능에 트래픽 로스율을 얻는 기능을 추가합니다. 패킷 로스율 측정기

매개변수
remoteHostID어느 remote 와의 통신에 대한 로스율을 얻을 걷인지. 자기 자신 peer, server 뭐든지 입력 가능합니다. 자기 자신이면 0% 입니다
outputPercent패킷 로스율을 단위로 채워짐(즉 0~100)
virtual void Proud::CNetServer::GetUserWorkerThreadInfo ( CFastArray< CThreadInfo > &  output)
pure virtual

스레드 풀(Thread pool) 의 각 스레드의 정보를 얻습니다.

매개변수
output여기에 정보가 채워집니다.
virtual bool Proud::CNetServer::IsConnectedClient ( HostID  clientHostID)
pure virtual

clientHostID가 가리키는 클라이언트가 접속중인지 체크한다.

반환값
접속중인 클라이언트이면 true를 리턴한다.
virtual bool Proud::CNetServer::IsNagleAlgorithmEnabled ( )
pure virtual
virtual bool Proud::CNetServer::IsValidHostID ( HostID  id)
pure virtual

HostID 가 유효한지 확인한다.

매개변수
id유효한지 확인할 HostID.
반환값
true이면 유효한 클라이언트, 서버 혹은 P2P 그룹 의 HostID임을 의미한다.
virtual bool Proud::CNetServer::JoinP2PGroup ( HostID  memberHostID,
HostID  groupHostID,
ByteArray  customField = ByteArray() 
)
pure virtual

클라이언트 memberHostID가 기 존재 P2P 그룹 groupHostID에 중도 참여하게 합니다.

  • 참여 시도된 피어들과 기존에 참여되어 있던 피어들 끼리는 즉시 서로간 메시징을 해도 됩니다. (참고: ProudNet의 P2P 통신 성능)
매개변수
memberHostIDP2P 그룹에 참여할 멤버의 Host ID. HostID_Server 가 들어가도 되는지 여부는 P2P 그룹 멤버로서 서버를 포함시키기 를 참고하십시오.
groupHostID이미 만들어진 P2P 그룹의 Host ID입니다.
customFieldP2P 그룹을 추가하면서 서버에서 관련 클라이언트들에게 보내는 메시지입니다. INetClientEvent.OnP2PMemberJoin 에서 그대로 받아집니다.
반환값
성공시 true를 리턴합니다.
virtual bool Proud::CNetServer::LeaveP2PGroup ( HostID  memberHostID,
HostID  groupHostID 
)
pure virtual

클라이언트 memberHostID가 P2P 그룹 groupHostID 를 나가게 한다.

  • 추방되는 클라이언트에서는 P2P 그룹의 모든 멤버에 대해(자기 자신 포함) INetClientEvent.OnP2PMemberLeave 이 연속으로 호출된다. 한편, P2P group의 나머지 멤버들은 추방되는 클라이언트에 대한 INetClientEvent.OnP2PMemberLeave 를 호출받는다.
  • 멤버가 전혀 없는, 즉 비어있는 P2P group가 될 경우 AllowEmptyP2PGroup의 설정에 따라 자동 파괴되거나 잔존 후 재사용 가능하다.
매개변수
memberHostID추방할 멤버의 Host ID
groupHostID어떤 그룹으로부터 추방시킬 것인가
반환값
성공적으로 추방시 true를 리턴
virtual bool Proud::CNetServer::SendUserMessage ( const HostID remotes,
int  remoteCount,
const RmiContext rmiContext,
uint8_t *  payload,
int  payloadLength 
)
pure virtual

사용자 정의 메시지를 전송합니다. 자세한 것은 RMI를 전혀 안쓰고 사용자 정의 메시지를 주고 받기 를 참고하십시오.

매개변수
remotes수신자 배열입니다. RMI와 마찬가지로, 클라이언트, 서버(HostID_Server), P2P 그룹 등을 넣을 수 있습니다.
remoteCount수신자 배열 크기
rmiContext송신 부가정보. 자세한 것은 ProudNet의 프로토콜 종류 를 참고하십시오.
payload보낼 메시지 데이터
payloadLength보낼 메시지 데이터의 길이. 바이트 단위입니다.
bool Proud::CNetServer::SendUserMessage ( HostID  remote,
const RmiContext rmiContext,
uint8_t *  payload,
int  payloadLength 
)
inline

사용자 정의 메시지를 전송합니다. 자세한 것은 RMI를 전혀 안쓰고 사용자 정의 메시지를 주고 받기 를 참고하십시오.

매개변수
remote수신자
rmiContext송신 부가정보. 자세한 것은 ProudNet의 프로토콜 종류 를 참고하십시오.
payload보낼 메시지 데이터
payloadLength보낼 메시지 데이터의 길이. 바이트 단위입니다.
virtual ErrorType Proud::CNetServer::SetCoalesceIntervalMs ( HostID  remote,
int  intervalMs 
)
pure virtual

Coalesce interval을 수동으로 설정합니다. ProudNet 자체에서 설정되는 네트워크 품질 기반 데이터 뭉쳐 보내는 기능이 원하지 않는 품질이 나올때 사용하십시오. 적절하지 않은 값을 입력할 경우 의도하지 않은 결과가 초래될 수 있으니 주의하십시오.

virtual ErrorType Proud::CNetServer::SetCoalesceIntervalToAuto ( HostID  remote)
pure virtual

Coalesce interval을 자동으로 설정합니다. 이 설정은 디폴트입니다.

virtual void Proud::CNetServer::SetDefaultFallbackMethod ( FallbackMethod  newValue)
pure virtual

클라이언트가 UDP 통신을 어느 정도까지만 쓰도록 제한할 것인지를 설정하는 메서드다.

  • 사용자의 의도적인 이유로 클라이언트가 서버와의 또는 peer간의 UDP 통신을 차단하고자 할 때 이 메서드를 쓸 수 있다.
  • 극악의 상황, 예를 들어 UDP 통신 장애가 심각하게 발생하는 서버에서 임시방편으로 이 옵션을 켜서 문제를 일시적으로 줄일 수 있다. 하지만 UDP 통신은 게임 서비스에서 중요하기 때문에 최대한 빨리 문제를 해결 후 이 옵션을 다시 켜는 것이 좋다.
  • 이 값을 변경한 후 새로 접속하는 클라이언트에 대해서만 적용된다.
  • 초기 상태는 FallbackMethod_None 이다.
매개변수
newValue제한 정책. Proud.FallbackMethod_CloseUdpSocket 는 쓸 수 없다.
virtual void Proud::CNetServer::SetDefaultTimeoutTimeMs ( int  newValInMs)
pure virtual

SetDefaultTimeoutTimeSec과 같지만, 입력값이 밀리초 단위다.

virtual void Proud::CNetServer::SetDefaultTimeoutTimeSec ( double  newValInSec)
pure virtual

너무 오랫동안 서버와 통신하지 못하면 연결을 해제하기 위한 타임 아웃 임계값(초)를 지정한다.

  • CNetServer.Start 호출 전에만 사용할 수 있다. 그 이후부터 호출할 경우 무시된다.
  • 무한으로 잡는 것은 추천하지 않는다. 비정상 연결 해제시 무한히 남는 연결로 자리잡기 때문이다. 그러느니 차라리 1시간을 거는 것이 낫다. 반면, 1초 등 너무 작은 값을 잡으면 정상적인 클라이언트도 쫓겨날 위험이 있으므로 피해야 한다.
  • 기본값은 ProudNetConfig.DefaultNoPingTimeoutTime 이다.
  • 참고: 디버거에 의해 일시정지하면 서버와의 연결이 끊어지는 문제 해결법
virtual bool Proud::CNetServer::SetDirectP2PStartCondition ( DirectP2PStartCondition  newVal)
pure virtual

클라이언트간 P2P 홀펀칭을 시작하기 위한 조건을 지정합니다. 자세한 것은 JIT(Just-in-time) P2P 연결 를 참고하십시오.

  • 이 메서드를 호출한 이후에 접속한 클라이언트부터 본 값이 적용됩니다.
  • 기본값은 JIT 입니다.
매개변수
newVal클라이언트간 P2P 통신을 위한 홀펀칭을 시작하는 조건입니다.
반환값
성공적으로 반영시 true를 리턴합니다.
virtual void Proud::CNetServer::SetEventSink ( INetServerEvent eventSink)
pure virtual

이벤트를 받을 수 있는 객체를 설정한다.

  • 하나만 설정 가능하다.
  • 이 메서드는 클라이언트가 서버에 연결을 시도하기 전에만 호출할 수 있다. 안그러면 exception이 throw된다.
virtual bool Proud::CNetServer::SetHostTag ( HostID  hostID,
void *  hostTag 
)
pure virtual

이 호스트에 연결된 다른 호스트(서버의 경우 클라이언트들, 클라이언트의 경우 피어들)들 각각에의 tag를 지정합니다. 각 호스트에 대한 사용자 정의 데이터(Tag) 기능입니다.

  • 자기 자신(서버 혹은 클라이언트)에 대한 tag 도 지정할 수 있습니다.
virtual void Proud::CNetServer::SetMaxDirectP2PConnectionCount ( HostID  clientID,
int  newVal 
)
pure virtual

지정한 클라이언트가 맺을 수 있는 최대 Direct P2P 연결 갯수를 지정합니다.

  • 여기서 지정한 값을 초과한 나머지 P2P 연결은 항상 Relayed가 됩니다.
  • Direct P2P의 실제 갯수는 여기서 지정한 값 이하가 나올 수 있는데, 이는 ProudNet의 JIT(Just-in-time) P2P 연결 기능 때문이며, 정상적인 상황입니다.
virtual void Proud::CNetServer::SetMessageMaxLength ( int  value_s,
int  value_c 
)
pure virtual

해킹된 클라이언트에서 망가뜨려놓은 메시지 헤더를 보낼 경우(특히 메시지 크기 부분) 이를 차단하기 위해서는 서버측에서 받는 메시지 크기의 상한선을 지정해야 한다. 이 메서드는 그 상한선을 지정하는 역할을 한다. 초기값은 64KB이다.

매개변수
value_sserverMessageMaxLength
value_cclientMessageMaxLength
virtual void Proud::CNetServer::SetSpeedHackDetectorReckRatioPercent ( int  newValue)
pure virtual

스피드핵 탐지 기능의 신중함의 정도를 설정합니다.

  • 0~100 사이 값으로 설정합니다. 100에 가까울수록 신중하게 스피드핵을 탐지한다.
  • ProudNet의 스피드핵 탐지 기능은 클라이언트와 서버간의 ping과 타임스탬프 값으로 작동합니다. 0에 가까운 값을 설정할 수록 스피드핵을 쓰는 클라이언트를 탐지하는 데 걸리는 시간은 짧아지지만 스피드핵을 쓰지 않음에도 불구하고 통신 회선의 불량으로 인해 ping이 불규칙하게 도달하는 클라이언트마저도 스피드핵을 쓰는 클라이언트로 오인될 가능성이 높아집니다.
  • 초기값은 1입니다.
  • 신중함의 정도를 조절한 후 이후부터 접속하는 클라이언트에 한해 변경된 값이 적용됩니다.
virtual void Proud::CNetServer::Start ( CStartServerParameter param)
pure virtual

서버를 시작합니다. 서버 시작을 하지 못할 경우 Proud.Exception이 throw 됩니다.

매개변수
서버시작을 위한 설정 내용입니다. TCP listen port 등을 지정합니다.
virtual void Proud::CNetServer::Start ( CStartServerParameter param,
ErrorInfoPtr outError 
)
pure virtual

서버를 시작합시다. 서버 시작을 하지 못할 경우 outError에 에러 내용이 들어갑니다. 자세한 것은 Proud.CNetServer.Start(CStartServerParameter&)를 참고하십시오.

virtual void Proud::CNetServer::Stop ( )
pure virtual

서버를 종료한다. -주의!! 이 함수는 rmi등 UserWorkerThread에서 호출하는 함수내에서는 호출해서는 안됩니다.