JNetLibray
로딩중...
검색중...
일치하는것 없음
jnet::JNetCore::JNetSession 구조체 참조

JNetCore에서 관리되는 세션 구조체
세션의 연결 소켓 및 수신 링-버퍼와 송신 락-프리 큐 버퍼를 멤버로 갖으며, 세션 ID와 참조 카운트 필드를 바탕으로 thread-safe한 세션 초기화 및 해제 기능을 제공
더 자세히 ...

#include <JNetCore.h>

클래스

struct  SessionID
 세션 ID 비트 필드 더 자세히 ...
 
struct  SessionRef
 세션 참조 제어용 비트 필드 더 자세히 ...
 

Public 멤버 함수

 JNetSession (uint32 recvBuffSize)
 
void Init (SessionID id, SOCKET sock)
 
bool TryRelease ()
 

Public 속성

SessionID m_ID
 
SessionRef m_SessionRef
 
int32 m_SendFlag
 
SOCKET m_Sock
 
WSAOVERLAPPED m_RecvOverlapped
 
WSAOVERLAPPED m_SendOverlapped
 
JBuffer m_RecvRingBuffer
 
LockFreeQueue< JBuffer * > m_SendBufferQueue
 
queue< JBuffer * > m_SendPostedQueue
 

상세한 설명

JNetCore에서 관리되는 세션 구조체
세션의 연결 소켓 및 수신 링-버퍼와 송신 락-프리 큐 버퍼를 멤버로 갖으며, 세션 ID와 참조 카운트 필드를 바탕으로 thread-safe한 세션 초기화 및 해제 기능을 제공

생성자 & 소멸자 문서화

◆ JNetSession()

JNetCore::JNetSession::JNetSession ( uint32 recvBuffSize)
6 : m_RecvRingBuffer{ recvBuffSize }
7{}
JBuffer m_RecvRingBuffer
Definition JNetCore.h:324

멤버 함수 문서화

◆ Init()

void JNetCore::JNetSession::Init ( SessionID id,
SOCKET sock )
10{
11 m_ID = id;
12 InterlockedIncrement(reinterpret_cast<uint32*>(&m_SessionRef)); // refCnt 원자적 증가
13
14 SessionRef releaseFlagOff{ -1, 0 }; // releaseFlagOff.refCnt == 0xFFFF'FFFF'FFFF
15 // releaseFlagOff.releaseFlag == 0x0000
16
17 InterlockedAnd(reinterpret_cast<long*>(&m_SessionRef), releaseFlagOff); // refCnt에 대한 변경 없이 releaseFlag를 0으로 초기화
18
19 m_Sock = sock;
20 memset(&m_RecvOverlapped, 0, sizeof(WSAOVERLAPPED));
21 memset(&m_SendOverlapped, 0, sizeof(WSAOVERLAPPED));
22
23 m_RecvRingBuffer.ClearBuffer();
24
25 if (m_SendBufferQueue.GetSize() > 0) {
26 DebugBreak();
27 }
28 if (m_SendPostedQueue.size() > 0) {
29 DebugBreak();
30 }
31
32 m_SendFlag = false;
33}
unsigned __int32 uint32
Definition CommTypes.h:10
LockFreeQueue< JBuffer * > m_SendBufferQueue
Definition JNetCore.h:325
WSAOVERLAPPED m_SendOverlapped
Definition JNetCore.h:323
SOCKET m_Sock
Definition JNetCore.h:321
WSAOVERLAPPED m_RecvOverlapped
Definition JNetCore.h:322
int32 m_SendFlag
Definition JNetCore.h:319
SessionID m_ID
Definition JNetCore.h:317
SessionRef m_SessionRef
Definition JNetCore.h:318
queue< JBuffer * > m_SendPostedQueue
Definition JNetCore.h:326

◆ TryRelease()

bool JNetCore::JNetSession::TryRelease ( )
36{
37 bool ret = false;
38
39 SessionRef exgRef{ 0, 1 };
40 uint32 initVal = InterlockedCompareExchange(reinterpret_cast<long*>(&m_SessionRef), exgRef, 0);
41 if (initVal == 0) { // refCnt == 0, releaseFlag == 0 인지 비교, releaseFlag = 1 변경
42 ret = true;
43 }
44
45 return ret;
46}

멤버 데이터 문서화

◆ m_ID

SessionID jnet::JNetCore::JNetSession::m_ID

◆ m_SessionRef

SessionRef jnet::JNetCore::JNetSession::m_SessionRef

◆ m_SendFlag

int32 jnet::JNetCore::JNetSession::m_SendFlag

◆ m_Sock

SOCKET jnet::JNetCore::JNetSession::m_Sock

◆ m_RecvOverlapped

WSAOVERLAPPED jnet::JNetCore::JNetSession::m_RecvOverlapped

◆ m_SendOverlapped

WSAOVERLAPPED jnet::JNetCore::JNetSession::m_SendOverlapped

◆ m_RecvRingBuffer

JBuffer jnet::JNetCore::JNetSession::m_RecvRingBuffer

◆ m_SendBufferQueue

LockFreeQueue<JBuffer*> jnet::JNetCore::JNetSession::m_SendBufferQueue

◆ m_SendPostedQueue

queue<JBuffer*> jnet::JNetCore::JNetSession::m_SendPostedQueue

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