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

'JNetGroupServer' 인스턴스로부터 그룹 메시지 큐에 전달된 메시지를 싱글 스레드가 수신하여 메시지 처리 콜백을 호출
단일 세션에 대한 수신 직렬 처리를 보장하며, 세션 참조에 대한 유일성이 보장됨으로 수신 이벤트 처리 시 락 없는 로직 구현 가능
더 자세히 ...

#include <JNetCore.h>

클래스

struct  GroupTheradMessage
 그룹 스레드에 전달되는 메시지 구조체 더 자세히 ...
 

Public 멤버 함수

int GetGroupThreadLoopFPS ()
 
void Init (JNetGroupServer *server, GroupID groupID, bool threadPriorBoost=false, bool calcFps=false)
 
bool Start ()
 
void Stop ()
 
void EnterSession (SessionID64 sessionID)
 
void LeaveSession (SessionID64 sessionID)
 
void PushSessionMessage (SessionID64 sessionID, JBuffer *msg)
 
void PushGroupMessage (GroupID senderGroupID, JBuffer *msg)
 

Protected 멤버 함수

GroupID GetGroupID ()
 
void Disconnect (SessionID64 sessionID)
 
bool SendPacket (SessionID64 sessionID, JBuffer *sendPktPtr, bool postToWorker=false, bool encoded=false)
 
bool SendPacketBlocking (SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
 
bool BufferSendPacket (SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
 
bool SendBufferedPacket (SessionID64 sessionID, bool postToWorker=false)
 
void CreateGroup (GroupID newGroupID, JNetGroupThread *groupThread, bool threadPriorBoost=false)
 
void DeleteGroup (GroupID delGroupID)
 
void ForwardSessionToGroup (SessionID64 sessionID, GroupID destGroup)
 
void ForwardSessionMessage (SessionID64 sessionID, JBuffer *msg)
 
void SendGroupMessage (GroupID groupID, JBuffer *msg)
 
DWORD AllocTlsMemPool ()
 
JBuffer * AllocSerialBuff ()
 
JBuffer * AllocSerialSendBuff (uint16 len, bool LAN=false)
 
void FreeSerialBuff (JBuffer *buff)
 
void AddRefSerialBuff (JBuffer *buff)
 
virtual void OnStart ()
 
virtual void OnStop ()
 
virtual void OnEnterClient (SessionID64 sessionID)=0
 
virtual void OnLeaveClient (SessionID64 sessionID)=0
 
virtual void OnMessage (SessionID64 sessionID, JBuffer &recvData)=0
 
virtual void OnGroupMessage (GroupID groupID, JBuffer &msg)=0
 

Protected 속성

JNetGroupServerm_Server
 

Private 타입

enum  GroupTheradMessageType { enSessionEnter , enSessionLeave , enSessionMessage , enGroupMessage }
 

정적 Private 멤버 함수

static UINT __stdcall SessionGroupThreadFunc (void *arg)
 

Private 속성

GroupID m_GroupID
 그룹 스레드 인스턴스의 관리 대상인 그룹 ID
 
bool m_PriorBoost
 그룹 스레드의 우선순위 부스팅 여부 플래그
 
bool m_CalcFps
 그룹 스레드의 FPS(Framge per second) 측정 여부 플래그
 
HANDLE m_GroupThreadHnd
 그룹 스레드 핸들
 
bool m_GroupThreadStop
 그룹 스레드 중지 플래그
 
LockFreeQueue< GroupTheradMessagem_LockFreeMessageQueue
 
int m_GroupThreadProcFPS
 

상세한 설명

'JNetGroupServer' 인스턴스로부터 그룹 메시지 큐에 전달된 메시지를 싱글 스레드가 수신하여 메시지 처리 콜백을 호출
단일 세션에 대한 수신 직렬 처리를 보장하며, 세션 참조에 대한 유일성이 보장됨으로 수신 이벤트 처리 시 락 없는 로직 구현 가능

멤버 열거형 문서화

◆ GroupTheradMessageType

열거형 멤버
enSessionEnter 
enSessionLeave 
enSessionMessage 
enGroupMessage 
755 {
760 };
@ enSessionLeave
Definition JNetCore.h:757
@ enSessionMessage
Definition JNetCore.h:758
@ enSessionEnter
Definition JNetCore.h:756
@ enGroupMessage
Definition JNetCore.h:759

멤버 함수 문서화

◆ GetGroupThreadLoopFPS()

int jnet::jgroup::JNetGroupThread::GetGroupThreadLoopFPS ( )
inline
766{ return m_GroupThreadProcFPS; }
int m_GroupThreadProcFPS
Definition JNetCore.h:764

◆ Init()

void jnet::jgroup::JNetGroupThread::Init ( JNetGroupServer * server,
GroupID groupID,
bool threadPriorBoost = false,
bool calcFps = false )
inline
769 {
770 m_Server = server;
771 m_GroupID = groupID;
772 m_PriorBoost = threadPriorBoost;
773 m_CalcFps = calcFps;
774 }
JNetGroupServer * m_Server
Definition JNetCore.h:740
bool m_CalcFps
그룹 스레드의 FPS(Framge per second) 측정 여부 플래그
Definition JNetCore.h:744
bool m_PriorBoost
그룹 스레드의 우선순위 부스팅 여부 플래그
Definition JNetCore.h:743
GroupID m_GroupID
그룹 스레드 인스턴스의 관리 대상인 그룹 ID
Definition JNetCore.h:742

◆ Start()

bool jnet::jgroup::JNetGroupThread::Start ( )
inline
775 {
776 m_GroupThreadStop = false;
777 m_GroupThreadHnd = (HANDLE)_beginthreadex(NULL, 0, SessionGroupThreadFunc, this, 0, NULL);
778 return true;
779 }
static UINT __stdcall SessionGroupThreadFunc(void *arg)
Definition JNetGroup.cpp:121
HANDLE m_GroupThreadHnd
그룹 스레드 핸들
Definition JNetCore.h:746
bool m_GroupThreadStop
그룹 스레드 중지 플래그
Definition JNetCore.h:747

◆ Stop()

void jnet::jgroup::JNetGroupThread::Stop ( )
inline
780 {
781 m_GroupThreadStop = true;
782 }

◆ EnterSession()

void jnet::jgroup::JNetGroupThread::EnterSession ( SessionID64 sessionID)
inline
784 {
785 m_LockFreeMessageQueue.Enqueue({ sessionID, enSessionEnter, NULL });
786 }
LockFreeQueue< GroupTheradMessage > m_LockFreeMessageQueue
Definition JNetCore.h:761

◆ LeaveSession()

void jnet::jgroup::JNetGroupThread::LeaveSession ( SessionID64 sessionID)
inline
787 {
788 m_LockFreeMessageQueue.Enqueue({ sessionID, enSessionLeave, NULL });
789 }

◆ PushSessionMessage()

void jnet::jgroup::JNetGroupThread::PushSessionMessage ( SessionID64 sessionID,
JBuffer * msg )
inline
790 {
791 m_LockFreeMessageQueue.Enqueue({ sessionID, enSessionMessage, msg });
792 }

◆ PushGroupMessage()

void jnet::jgroup::JNetGroupThread::PushGroupMessage ( GroupID senderGroupID,
JBuffer * msg )
inline
793 {
794 m_LockFreeMessageQueue.Enqueue({ senderGroupID, enGroupMessage, msg });
795 }

◆ GetGroupID()

GroupID jnet::jgroup::JNetGroupThread::GetGroupID ( )
inlineprotected
798{ return m_GroupID; }

◆ Disconnect()

void jnet::jgroup::JNetGroupThread::Disconnect ( SessionID64 sessionID)
inlineprotected
800{ m_Server->Disconnect(sessionID); }
void Disconnect(SessionID64 sessionID)
Definition JNetCore.cpp:142

◆ SendPacket()

bool jnet::jgroup::JNetGroupThread::SendPacket ( SessionID64 sessionID,
JBuffer * sendPktPtr,
bool postToWorker = false,
bool encoded = false )
inlineprotected
801{ return m_Server->SendPacket(sessionID, sendPktPtr, postToWorker, encoded); }
bool SendPacket(SessionID64 sessionID, JBuffer *sendPktPtr, bool postToWorker=false, bool encoded=false)
JNetCore 요청 함수 + 송신 패킷 인코딩 기능
Definition JNetServer.cpp:87

◆ SendPacketBlocking()

bool jnet::jgroup::JNetGroupThread::SendPacketBlocking ( SessionID64 sessionID,
JBuffer * sendPktPtr,
bool encoded = false )
inlineprotected
802{ return m_Server->SendPacketBlocking(sessionID, sendPktPtr, encoded); }
bool SendPacketBlocking(SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
Definition JNetServer.cpp:106

◆ BufferSendPacket()

bool jnet::jgroup::JNetGroupThread::BufferSendPacket ( SessionID64 sessionID,
JBuffer * sendPktPtr,
bool encoded = false )
inlineprotected
803{ return m_Server->BufferSendPacket(sessionID, sendPktPtr, encoded); }
bool BufferSendPacket(SessionID64 sessionID, JBuffer *sendPktPtr, bool encoded=false)
Definition JNetServer.cpp:125

◆ SendBufferedPacket()

bool jnet::jgroup::JNetGroupThread::SendBufferedPacket ( SessionID64 sessionID,
bool postToWorker = false )
inlineprotected
804{ return m_Server->SendBufferedPacket(sessionID, postToWorker); }
bool SendBufferedPacket(SessionID64 sessionID, bool postToWorker=false)
세션 송신 버퍼 큐 내 송신 패킷 직렬화 버퍼에 대한 일괄 송신 작업 수행
Definition JNetCore.cpp:217

◆ CreateGroup()

void jnet::jgroup::JNetGroupThread::CreateGroup ( GroupID newGroupID,
JNetGroupThread * groupThread,
bool threadPriorBoost = false )
inlineprotected
806{ m_Server->CreateGroup(newGroupID, groupThread, threadPriorBoost); }
void CreateGroup(GroupID newGroupID, JNetGroupThread *groupThread, bool threadPriorBoost=false)
그룹 생성 (그룹 식별자 반환, 라이브러리와 컨텐츠는 그룹 식별자를 통해 식별)
Definition JNetGroup.cpp:7

◆ DeleteGroup()

void jnet::jgroup::JNetGroupThread::DeleteGroup ( GroupID delGroupID)
inlineprotected
807{ m_Server->DeleteGroup(delGroupID); }
void DeleteGroup(GroupID delGroupID)
Definition JNetGroup.cpp:15

◆ ForwardSessionToGroup()

void jnet::jgroup::JNetGroupThread::ForwardSessionToGroup ( SessionID64 sessionID,
GroupID destGroup )
inlineprotected
808{ m_Server->ForwardSessionGroup(sessionID, m_GroupID, destGroup); }
void ForwardSessionGroup(SessionID64 sessionID, GroupID from, GroupID to)
세션의 그룹 이동
Definition JNetGroup.cpp:49

◆ ForwardSessionMessage()

void jnet::jgroup::JNetGroupThread::ForwardSessionMessage ( SessionID64 sessionID,
JBuffer * msg )
inlineprotected
809{ m_Server->ForwardMessage(sessionID, msg); }
void ForwardMessage(SessionID64 sessionID, JBuffer *msg)
세션 수신 메시지 포워딩
Definition JNetGroup.cpp:61

◆ SendGroupMessage()

void jnet::jgroup::JNetGroupThread::SendGroupMessage ( GroupID groupID,
JBuffer * msg )
inlineprotected
810{ m_Server->SendGroupMessage(m_GroupID, groupID, msg); }
void SendGroupMessage(GroupID from, GroupID to, JBuffer *groupMsg)
그룹 간 메시지 송신
Definition JNetGroup.cpp:74

◆ AllocTlsMemPool()

DWORD jnet::jgroup::JNetGroupThread::AllocTlsMemPool ( )
inlineprotected
812{ return m_Server->AllocTlsMemPool(); }
DWORD AllocTlsMemPool()
직렬화 패킷 버퍼 Tls 풀 할당 함수
Definition JNetCore.h:132

◆ AllocSerialBuff()

JBuffer * jnet::jgroup::JNetGroupThread::AllocSerialBuff ( )
inlineprotected
814{ return m_Server->AllocSerialBuff(); }
JBuffer * AllocSerialBuff()
직렬화 패킷 버퍼 할당 요청 wrapper
Definition JNetCore.h:137

◆ AllocSerialSendBuff()

JBuffer * jnet::jgroup::JNetGroupThread::AllocSerialSendBuff ( uint16 len,
bool LAN = false )
inlineprotected
815{ return m_Server->AllocSerialSendBuff(len, LAN); }
JBuffer * AllocSerialSendBuff(uint16 len, bool LAN=false)
직렬화 패킷 버퍼 할당 + 헤더 초기화
Definition JNetCore.h:440

◆ FreeSerialBuff()

void jnet::jgroup::JNetGroupThread::FreeSerialBuff ( JBuffer * buff)
inlineprotected
816{ m_Server->FreeSerialBuff(buff); }
void FreeSerialBuff(JBuffer *buff)
직렬화 패킷 버퍼 반환 wrapper
Definition JNetCore.h:144

◆ AddRefSerialBuff()

void jnet::jgroup::JNetGroupThread::AddRefSerialBuff ( JBuffer * buff)
inlineprotected
817{ m_Server->AddRefSerialBuff(buff); }
void AddRefSerialBuff(JBuffer *buff)
직렬화 패킷 버퍼 참조 카운트 증가 wrapper
Definition JNetCore.h:149

◆ OnStart()

virtual void jnet::jgroup::JNetGroupThread::OnStart ( )
inlineprotectedvirtual
820{};

◆ OnStop()

virtual void jnet::jgroup::JNetGroupThread::OnStop ( )
inlineprotectedvirtual
821{};

◆ OnEnterClient()

virtual void jnet::jgroup::JNetGroupThread::OnEnterClient ( SessionID64 sessionID)
protectedpure virtual

◆ OnLeaveClient()

virtual void jnet::jgroup::JNetGroupThread::OnLeaveClient ( SessionID64 sessionID)
protectedpure virtual

◆ OnMessage()

virtual void jnet::jgroup::JNetGroupThread::OnMessage ( SessionID64 sessionID,
JBuffer & recvData )
protectedpure virtual

◆ OnGroupMessage()

virtual void jnet::jgroup::JNetGroupThread::OnGroupMessage ( GroupID groupID,
JBuffer & msg )
protectedpure virtual

◆ SessionGroupThreadFunc()

UINT __stdcall JNetGroupThread::SessionGroupThreadFunc ( void * arg)
staticprivate
121 {
122 JNetGroupThread* groupthread = reinterpret_cast<JNetGroupThread*>(arg);
123
124 groupthread->AllocTlsMemPool();
125
126 if (groupthread->m_PriorBoost) {
127 SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
128 }
129
130 groupthread->OnStart();
131
132 clock_t timestamp;
133 int threadLoopCnt;
134 if (groupthread->m_CalcFps) {
135 groupthread->m_GroupThreadProcFPS = 0;
136 threadLoopCnt = 0;
137 timestamp = clock();
138 }
139
140 while (!groupthread->m_GroupThreadStop) {
141 if (groupthread->m_CalcFps) {
142 threadLoopCnt++;
143 clock_t now = clock();
144 clock_t interval = now - timestamp;
145 if (interval >= CLOCKS_PER_SEC) {
146 groupthread->m_GroupThreadProcFPS = threadLoopCnt / (interval / CLOCKS_PER_SEC);
147 threadLoopCnt = 0;
148 timestamp = now;
149 }
150 }
151
152 GroupTheradMessage message;
153 if (groupthread->m_LockFreeMessageQueue.GetSize() > 0) { // 싱글 그룹 스레드에서의 디큐잉이 보장됨
154 if (groupthread->m_LockFreeMessageQueue.Dequeue(message, true)) {
155
156 switch (message.msgType) {
157 case enSessionEnter:
158 {
159 // 그룹 스레드에 클라이언트 Enter
160 groupthread->OnEnterClient(message.msgSenderID);
161 }
162 break;
163 case enSessionLeave:
164 {
165 // 그룹 스레드에 클라이언트 Leave
166 groupthread->OnLeaveClient(message.msgSenderID);
167 }
168 break;
169 case enSessionMessage:
170 {
171 JBuffer* recvMsg = message.msgPtr;
172 groupthread->OnMessage(message.msgSenderID, *recvMsg);
173 groupthread->FreeSerialBuff(recvMsg);
174 }
175 break;
176 case enGroupMessage:
177 {
178 JBuffer* recvMsg = message.msgPtr;
179 groupthread->OnGroupMessage(message.msgSenderID, *recvMsg);
180 groupthread->FreeSerialBuff(recvMsg);
181 }
182 break;
183 default:
184 {
185 DebugBreak();
186 }
187 break;
188 }
189 }
190 else {
191 // 싱글 스레드에서 groupthread->m_LockFreeMessageQueue.GetSize() > 0 조건을 확인하였음에도 락-프리 큐 디큐잉에 실패한 경우
192 DebugBreak();
193 }
194 }
195 }
196
197 groupthread->OnStop();
198
199 return 0;
200}

멤버 데이터 문서화

◆ m_Server

JNetGroupServer* jnet::jgroup::JNetGroupThread::m_Server
protected

◆ m_GroupID

GroupID jnet::jgroup::JNetGroupThread::m_GroupID
private

그룹 스레드 인스턴스의 관리 대상인 그룹 ID

◆ m_PriorBoost

bool jnet::jgroup::JNetGroupThread::m_PriorBoost
private

그룹 스레드의 우선순위 부스팅 여부 플래그

◆ m_CalcFps

bool jnet::jgroup::JNetGroupThread::m_CalcFps
private

그룹 스레드의 FPS(Framge per second) 측정 여부 플래그

◆ m_GroupThreadHnd

HANDLE jnet::jgroup::JNetGroupThread::m_GroupThreadHnd
private

그룹 스레드 핸들

◆ m_GroupThreadStop

bool jnet::jgroup::JNetGroupThread::m_GroupThreadStop
private

그룹 스레드 중지 플래그

◆ m_LockFreeMessageQueue

LockFreeQueue<GroupTheradMessage> jnet::jgroup::JNetGroupThread::m_LockFreeMessageQueue
private

◆ m_GroupThreadProcFPS

int jnet::jgroup::JNetGroupThread::m_GroupThreadProcFPS
private

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