|
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 ¶m)=0 |
|
virtual void | Start (CStartServerParameter ¶m, 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 |
|
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 CriticalSection & | GetCriticalSection ()=0 |
|
|
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.
|
|
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.
|
|
게임용 네트워크 서버
게임용 네트워크 서버입니다. 자세한 것은 ProudNet 서버 에 있습니다.
- MMO 게임에도 쓸 수 있다.
- CNetClient 의 연결을 받는다.
- 클라이언트에게 HostID 를 배정해주는 역할을 한다.
- HostID 를 매개체로 하는 RMI를 가능하게 한다.
- 일반적인 게임 서버에 필요한 기본적 옵션이 설정되어 있다.
- 클라이언트간 P2P 연결을 지원한다. 이 서버 객체는 클라이언트간 P2P 연결이 실패할 경우 릴레이 서버 역할도 지원한다.
일반적 용법
P2P 연결 그룹 만들기
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가 인식되기 때문이다.