JNetLibray
로딩중...
검색중...
일치하는것 없음
jnet::jgroup::JNetGroupServer 클래스 참조

클라이언트 세션을 그룹 단위로 묶고, 'JNetGroupThread' 인스턴스의 메시지 큐(그룹 메시지 큐)에 전달
'그룹 생성', '세션의 그룹 이동', '그룹 간 메시지 송신 및 포워딩' 기능(CreateGroup, Enter/ForwardSessionGroup, SendGroupMessage) 제공
더 자세히 ...

#include <JNetCore.h>

jnet::jgroup::JNetGroupServer에 대한 상속 다이어그램 :
jnet::JNetServer jnet::JNetCore

Public 멤버 함수

 JNetGroupServer (const char *serverIP, uint16 serverPort, uint16 maximumOfConnections, BYTE packetCode_LAN, BYTE packetCode, BYTE packetSymmetricKey, bool recvBufferingMode, uint16 maximumOfSessions, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
 
void CreateGroup (GroupID newGroupID, JNetGroupThread *groupThread, bool threadPriorBoost=false)
 그룹 생성 (그룹 식별자 반환, 라이브러리와 컨텐츠는 그룹 식별자를 통해 식별)
 
void DeleteGroup (GroupID delGroupID)
 
void EnterSessionGroup (SessionID64 sessionID, GroupID enterGroup)
 세션의 특정 그룹 입장
 
void LeaveSessionGroup (SessionID64 sessionID)
 
void ForwardSessionGroup (SessionID64 sessionID, GroupID from, GroupID to)
 세션의 그룹 이동
 
void ForwardMessage (SessionID64 sessionID, JBuffer *msg)
 세션 수신 메시지 포워딩
 
void SendGroupMessage (GroupID from, GroupID to, JBuffer *groupMsg)
 그룹 간 메시지 송신
 
- jnet::JNetServer(으)로부터 상속된 Public 멤버 함수
 JNetServer (const char *serverIP, uint16 serverPort, uint16 maximumOfConnections, PACKET_CODE packetCode_LAN, PACKET_CODE packetCode, PACKET_SYMM_KEY packetSymmetricKey, bool recvBufferingMode, uint16 maximumOfSessions, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
 
bool Start ()
 
void Stop ()
 
void PrintServerInfoOnConsole ()
 
- jnet::JNetCore(으)로부터 상속된 Public 멤버 함수
 JNetCore (uint16 maximumOfSessions, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
 
 ~JNetCore ()
 
bool Start ()
 
void Stop ()
 
uint16 GetCurrentSessions ()
 
int64 GetCurrentAllocatedMemUnitCnt ()
 
int GetSessionCount ()
 
UINT GetAcceptTPS ()
 
UINT GetRecvTPS ()
 
UINT GetSendTPS ()
 
UINT64 GetTotalAcceptTransaction ()
 
UINT64 GetTotalRecvTransaction ()
 
UINT64 GetTotalSendTransaction ()
 
void IncrementRecvTransactions (bool threadSafe, UINT incre)
 
void IncrementSendTransactions (bool threadSafe, UINT incre)
 
void IncrementAcceptTransactions (bool threadSafe=false, UINT incre=1)
 

Private 멤버 함수

virtual void OnRecv (SessionID64 sessionID, JSerialBuffer &recvSerialBuff) override
 패킷 수신 시 호출되는 이벤트 함수, 수신 버퍼링 모드의 서버 전용
 
virtual void OnRecv (SessionID64 sessionID, JBuffer &recvBuff) override
 패킷 수신 시 호출되는 이벤트 함수
 

Private 속성

std::unordered_map< SessionID64, GroupIDm_SessionGroupMap
 세션-그룹 맵핑
 
SRWLOCK m_SessionGroupMapSrwLock
 
std::map< GroupID, JNetGroupThread * > m_GroupThreads
 그룹-그룹 스레드 맵핑
 

Friends

class JNetGroupThread
 

추가로 상속된 멤버들

- jnet::JNetServer(으)로부터 상속된 Protected 멤버 함수
virtual void OnPrintLogOnConsole ()
 
bool SendPacket (SessionID64 sessionID, JBuffer *sendPktPtr, bool postToWorker=false, bool encoded=false)
 JNetCore 요청 함수 + 송신 패킷 인코딩 기능
 
bool SendPacketBlocking (SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
 
bool BufferSendPacket (SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
 
JBuffer * AllocSerialSendBuff (uint16 len, bool LAN=false)
 직렬화 패킷 버퍼 할당 + 헤더 초기화
 
virtual bool OnConnectionRequest (const SOCKADDR_IN &clientSockAddr)
 Accept 반환 시 호출되는 이벤트 함수, 클라이언트 수용 여부를 반환을 통해 결정
 
virtual void OnClientJoin (SessionID64 sessionID, const SOCKADDR_IN &clientSockAddr)=0
 클라이언트 연결 수용 후 정상적으로 세션을 생성한 이 후 호출되는 이벤트 함수
 
virtual void OnClientLeave (SessionID64 sessionID)=0
 클라이언트와의 연결 종료 및 클라이언트 세션 제거 후 호출되는 이벤트 함수
 
- jnet::JNetCore(으)로부터 상속된 Protected 멤버 함수
void PrintLibraryInfoOnConsole ()
 
JNetSessionCreateNewSession (SOCKET sock)
 하위 클래스에서 세션 객체 생성 요청을 위해 호출하는 함수
 
bool RegistSessionToIOCP (JNetSession *session)
 하위 클래스에서 세션 객체를 IOCP 등록을 위해 호출하는 함수
 
bool DeleteSession (SessionID64 sessionID)
 세션 제거 요청 함수
 
void Disconnect (SessionID64 sessionID)
 
bool SendPacket (SessionID64 sessionID, JBuffer *sendPktPtr, bool postToWorker=false)
 패킷 송신 요청 함수
 
bool SendPacketBlocking (SessionID64 sessionID, JBuffer *sendPktPtr)
 동기식 송신 요청 함수
 
bool BufferSendPacket (SessionID64 sessionID, JBuffer *sendPktPtr)
 세션 송신 버퍼 큐에 버퍼링(삽입만 진행)
 
bool SendBufferedPacket (SessionID64 sessionID, bool postToWorker=false)
 세션 송신 버퍼 큐 내 송신 패킷 직렬화 버퍼에 대한 일괄 송신 작업 수행
 
DWORD AllocTlsMemPool ()
 직렬화 패킷 버퍼 Tls 풀 할당 함수
 
JBuffer * AllocSerialBuff ()
 직렬화 패킷 버퍼 할당 요청 wrapper
 
void FreeSerialBuff (JBuffer *buff)
 직렬화 패킷 버퍼 반환 wrapper
 
void AddRefSerialBuff (JBuffer *buff)
 직렬화 패킷 버퍼 참조 카운트 증가 wrapper
 
virtual bool OnWorkerThreadCreate (HANDLE thHnd)
 Start() 함수 내 IOCP 작업자 스레드 생성(CREATE_SUSPENDED) 후 호출되는 이벤트 함수
 
virtual void OnAllWorkerThreadCreate ()
 Start() 함수 내 요청된 수 만큼 IOCP 작업자 스레드를 생성한 후 함수를 빠져나오기 전 호출되는 이벤트 함수
 
virtual void OnWorkerThreadStart ()
 개별 IOCP 작업자 스레드의 수행 흐름 초입부(WorkerThreadFunc 함수 초입부)에 호출되는 이벤트 함수, 개별 작업자 스레드의 초기화를 독립적으로 수행하도록 재정의 가능
 
virtual void OnWorkerThreadEnd ()
 개별 IOCP 작업자 스레드가 종료(작업자 함수 return) 전 호출되는 이벤트 함수
 
virtual void OnError ()
 
- jnet::JNetServer(으)로부터 상속된 Protected 속성
BYTE m_PacketCode_LAN
 LAN 구간 패킷 코드
 
BYTE m_PacketCode
 LAN 외부 통신 패킷 코드
 
BYTE m_PacketSymmetricKey
 대칭-키
 
- jnet::JNetCore(으)로부터 상속된 Protected 속성
bool m_CalcTpsFlag
 

상세한 설명

클라이언트 세션을 그룹 단위로 묶고, 'JNetGroupThread' 인스턴스의 메시지 큐(그룹 메시지 큐)에 전달
'그룹 생성', '세션의 그룹 이동', '그룹 간 메시지 송신 및 포워딩' 기능(CreateGroup, Enter/ForwardSessionGroup, SendGroupMessage) 제공

생성자 & 소멸자 문서화

◆ JNetGroupServer()

jnet::jgroup::JNetGroupServer::JNetGroupServer ( const char * serverIP,
uint16 serverPort,
uint16 maximumOfConnections,
BYTE packetCode_LAN,
BYTE packetCode,
BYTE packetSymmetricKey,
bool recvBufferingMode,
uint16 maximumOfSessions,
uint32 numOfIocpConcurrentThrd,
uint16 numOfIocpWorkerThrd,
size_t tlsMemPoolUnitCnt,
size_t tlsMemPoolUnitCapacity,
uint32 memPoolBuffAllocSize,
uint32 sessionRecvBuffSize,
bool calcTpsThread )
inline
692 : JNetServer(
693 serverIP, serverPort, maximumOfSessions,
694 packetCode_LAN, packetCode, packetSymmetricKey,
695 recvBufferingMode,
696 maximumOfSessions,
697 numOfIocpConcurrentThrd, numOfIocpWorkerThrd,
698 tlsMemPoolUnitCnt, tlsMemPoolUnitCapacity,
699 memPoolBuffAllocSize,
700 sessionRecvBuffSize,
701 calcTpsThread
702 )
703 {
704 InitializeSRWLock(&m_SessionGroupMapSrwLock);
705 cout << "JNetGroupServer::JNetGroupServer(..) Init JNetGroupServer.." << endl;
706 }
JNetServer(const char *serverIP, uint16 serverPort, uint16 maximumOfConnections, PACKET_CODE packetCode_LAN, PACKET_CODE packetCode, PACKET_SYMM_KEY packetSymmetricKey, bool recvBufferingMode, uint16 maximumOfSessions, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
Definition JNetServer.cpp:5
SRWLOCK m_SessionGroupMapSrwLock
Definition JNetCore.h:676

멤버 함수 문서화

◆ CreateGroup()

void JNetGroupServer::CreateGroup ( GroupID newGroupID,
JNetGroupThread * groupThread,
bool threadPriorBoost = false )

그룹 생성 (그룹 식별자 반환, 라이브러리와 컨텐츠는 그룹 식별자를 통해 식별)

7 {
8 if (m_GroupThreads.find(newGroupID) == m_GroupThreads.end()) {
9 groupThread->Init(this, newGroupID, threadPriorBoost);
10 m_GroupThreads.insert({ newGroupID, groupThread });
11
12 groupThread->Start();
13 }
14}
std::map< GroupID, JNetGroupThread * > m_GroupThreads
그룹-그룹 스레드 맵핑
Definition JNetCore.h:678

◆ DeleteGroup()

void JNetGroupServer::DeleteGroup ( GroupID delGroupID)
15 {
16 auto iter = m_GroupThreads.find(delGroupID);
17 if (iter == m_GroupThreads.end()) {
18 JNetGroupThread* groupThrd = iter->second;
19 groupThrd->Stop();
20 delete groupThrd;
21 m_GroupThreads.erase(delGroupID);
22 }
23}
friend class JNetGroupThread
Definition JNetCore.h:672

◆ EnterSessionGroup()

void JNetGroupServer::EnterSessionGroup ( SessionID64 sessionID,
GroupID enterGroup )

세션의 특정 그룹 입장

26 {
27 AcquireSRWLockExclusive(&m_SessionGroupMapSrwLock);
28 if (m_SessionGroupMap.find(sessionID) != m_SessionGroupMap.end()) {
29 DebugBreak();
30 }
31 m_SessionGroupMap.insert({ sessionID, enterGroup });
32 ReleaseSRWLockExclusive(&m_SessionGroupMapSrwLock);
33
34 m_GroupThreads[enterGroup]->EnterSession(sessionID);
35
36}
std::unordered_map< SessionID64, GroupID > m_SessionGroupMap
세션-그룹 맵핑
Definition JNetCore.h:675

◆ LeaveSessionGroup()

void JNetGroupServer::LeaveSessionGroup ( SessionID64 sessionID)
37 {
38 AcquireSRWLockExclusive(&m_SessionGroupMapSrwLock);
39 auto iter = m_SessionGroupMap.find(sessionID);
40 if (iter == m_SessionGroupMap.end()) {
41 DebugBreak();
42 }
43 GroupID groupID = iter->second;
44 m_SessionGroupMap.erase(sessionID);
45 ReleaseSRWLockExclusive(&m_SessionGroupMapSrwLock);
46
47 m_GroupThreads[groupID]->LeaveSession(sessionID);
48}
uint16 GroupID
Definition JNetCore.h:657

◆ ForwardSessionGroup()

void JNetGroupServer::ForwardSessionGroup ( SessionID64 sessionID,
GroupID from,
GroupID to )

세션의 그룹 이동

49 {
50 AcquireSRWLockExclusive(&m_SessionGroupMapSrwLock);
51 if (m_SessionGroupMap.find(sessionID) == m_SessionGroupMap.end()) {
52 DebugBreak();
53 }
54 m_SessionGroupMap[sessionID] = to;
55 ReleaseSRWLockExclusive(&m_SessionGroupMapSrwLock);
56
57 m_GroupThreads[from]->LeaveSession(sessionID);
58 m_GroupThreads[to]->EnterSession(sessionID);
59}

◆ ForwardMessage()

void jnet::jgroup::JNetGroupServer::ForwardMessage ( SessionID64 sessionID,
JBuffer * msg )

세션 수신 메시지 포워딩

62{
63 AcquireSRWLockShared(&m_SessionGroupMapSrwLock);
64 auto iter = m_SessionGroupMap.find(sessionID);
65 if (iter == m_SessionGroupMap.end()) {
66 DebugBreak();
67 }
68 GroupID groupID = iter->second;
69 ReleaseSRWLockShared(&m_SessionGroupMapSrwLock);
70
71 m_GroupThreads[groupID]->PushSessionMessage(sessionID, msg);
72}

◆ SendGroupMessage()

void jnet::jgroup::JNetGroupServer::SendGroupMessage ( GroupID from,
GroupID to,
JBuffer * groupMsg )

그룹 간 메시지 송신

74 {
75 if (m_GroupThreads.find(to) != m_GroupThreads.end()) {
76 m_GroupThreads[to]->PushGroupMessage(from, groupMsg);
77 }
78}

◆ OnRecv() [1/2]

void JNetGroupServer::OnRecv ( SessionID64 sessionID,
JSerialBuffer & recvSerialBuff )
overrideprivatevirtual

패킷 수신 시 호출되는 이벤트 함수, 수신 버퍼링 모드의 서버 전용

매개변수
recvSerialBuff복수의 수신 직렬화 버퍼를 추상화한 'JSerialBuffer'

jnet::JNetServer(으)로부터 재구현되었습니다.

82{
83 AcquireSRWLockShared(&m_SessionGroupMapSrwLock);
84 if (m_SessionGroupMap.find(sessionID) == m_SessionGroupMap.end()) {
85 DebugBreak();
86 }
87 UINT16 groupID = m_SessionGroupMap[sessionID];
88 ReleaseSRWLockShared(&m_SessionGroupMapSrwLock);
89
90 JBuffer* recvData = AllocSerialBuff();
91 UINT serialBuffSize = recvSerialBuff.GetUseSize();
92 recvSerialBuff.Dequeue(recvData->GetEnqueueBufferPtr(), serialBuffSize);
93 recvData->DirectMoveEnqueueOffset(serialBuffSize);
94
95 m_GroupThreads[groupID]->PushSessionMessage(sessionID, recvData);
96}
JBuffer * AllocSerialBuff()
직렬화 패킷 버퍼 할당 요청 wrapper
Definition JNetCore.h:137

◆ OnRecv() [2/2]

void JNetGroupServer::OnRecv ( SessionID64 sessionID,
JBuffer & recvBuff )
overrideprivatevirtual

패킷 수신 시 호출되는 이벤트 함수

매개변수
recvBuffjnet 정의 헤더 + 페이로드 단위의 낱개 수신 직렬화 버퍼

jnet::JNetServer(으)로부터 재구현되었습니다.

99{
100 AcquireSRWLockShared(&m_SessionGroupMapSrwLock);
101 if (m_SessionGroupMap.find(sessionID) == m_SessionGroupMap.end()) {
102 DebugBreak();
103 }
104 UINT16 groupID = m_SessionGroupMap[sessionID];
105 ReleaseSRWLockShared(&m_SessionGroupMapSrwLock);
106
107 //JBuffer* recvData = new JBuffer(recvBuff.GetUseSize());
108 JBuffer* recvData = AllocSerialBuff();
109 UINT dirDeqSize = recvBuff.GetDirectDequeueSize();
110 if (dirDeqSize >= recvBuff.GetUseSize()) {
111 recvData->Enqueue(recvBuff.GetDequeueBufferPtr(), recvBuff.GetUseSize());
112 }
113 else {
114 recvData->Enqueue(recvBuff.GetDequeueBufferPtr(), dirDeqSize);
115 recvData->Enqueue(recvBuff.GetBeginBufferPtr(), recvBuff.GetUseSize() - dirDeqSize);
116 }
117
118 m_GroupThreads[groupID]->PushSessionMessage(sessionID, recvData);
119}

Friend, 그리고 관련된 함수 문서화

◆ JNetGroupThread

friend class JNetGroupThread
friend

멤버 데이터 문서화

◆ m_SessionGroupMap

std::unordered_map<SessionID64, GroupID> jnet::jgroup::JNetGroupServer::m_SessionGroupMap
private

세션-그룹 맵핑

◆ m_SessionGroupMapSrwLock

SRWLOCK jnet::jgroup::JNetGroupServer::m_SessionGroupMapSrwLock
private

◆ m_GroupThreads

std::map<GroupID, JNetGroupThread*> jnet::jgroup::JNetGroupServer::m_GroupThreads
private

그룹-그룹 스레드 맵핑


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: