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

클라이언트 기능이 구체화된 'JNetCore' 하위 클래스, 동일 LAN 구간 서버로의 연결 요청과 패킷 송수신(ConnectToServer, OnRecv, SendPacket) 추상화 더 자세히 ...

#include <JNetCore.h>

jnet::JNetClient에 대한 상속 다이어그램 :
jnet::JNetCore

Public 멤버 함수

 JNetClient (const char *serverIP, uint16 serverPort, PACKET_CODE packetCode_LAN, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
 
bool Start (bool connectToServer=true)
 
void Stop ()
 
- 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)
 

Protected 멤버 함수

bool ConnectToServer ()
 
JBuffer * AllocSerialSendBuff (PACKET_LEN len)
 
bool SendPacket (JBuffer *sendPktPtr, bool postToWorker=false)
 
bool SendPacketBlocking (JBuffer *sendPktPtr)
 
bool BufferSendPacket (JBuffer *sendPktPtr)
 
virtual void OnConnectionToServer ()=0
 
virtual void OnDisconnectionFromServer ()=0
 
virtual void OnRecv (JBuffer &recvBuff)=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 ()
 

Private 멤버 함수

virtual void OnRecvCompletion (SessionID64 sessionID, JBuffer &recvRingBuffer) override
 IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 이벤트 함수
 
virtual void OnSessionLeave (SessionID64 sessionID) override
 JNetCore 단 세션이 제거된 후 호출되는 이벤트 함수
 

Private 속성

SOCKET m_ConnectSock
 클라이언트 연결 소켓
 
SessionID64 m_ServerSessionID64
 연결 서버 세션 ID
 
const char * m_ServerIP
 서버 IP
 
uint16 m_ServerPort
 서버 Port
 
PACKET_CODE m_PacketCode_LAN
 LAN 구간 패킷 코드
 

추가로 상속된 멤버들

- jnet::JNetCore(으)로부터 상속된 Protected 속성
bool m_CalcTpsFlag
 

상세한 설명

클라이언트 기능이 구체화된 'JNetCore' 하위 클래스, 동일 LAN 구간 서버로의 연결 요청과 패킷 송수신(ConnectToServer, OnRecv, SendPacket) 추상화

생성자 & 소멸자 문서화

◆ JNetClient()

jnet::JNetClient::JNetClient ( const char * serverIP,
uint16 serverPort,
PACKET_CODE packetCode_LAN,
uint32 numOfIocpConcurrentThrd,
uint16 numOfIocpWorkerThrd,
size_t tlsMemPoolUnitCnt,
size_t tlsMemPoolUnitCapacity,
uint32 memPoolBuffAllocSize,
uint32 sessionRecvBuffSize,
bool calcTpsThread )
inline
607 : JNetCore(
608 1,
609 numOfIocpConcurrentThrd, numOfIocpWorkerThrd,
610 tlsMemPoolUnitCnt, tlsMemPoolUnitCapacity,
611 memPoolBuffAllocSize,
612 sessionRecvBuffSize,
613 calcTpsThread
614 ),
616 m_ServerIP(serverIP), m_ServerPort(serverPort),
617 m_PacketCode_LAN(packetCode_LAN)
618 {
619 cout << "JNetClient::JNetClient(..), Init JNetClient Done.." << endl;
620 }
PACKET_CODE m_PacketCode_LAN
LAN 구간 패킷 코드
Definition JNetCore.h:595
SessionID64 m_ServerSessionID64
연결 서버 세션 ID
Definition JNetCore.h:590
uint16 m_ServerPort
서버 Port
Definition JNetCore.h:593
const char * m_ServerIP
서버 IP
Definition JNetCore.h:592
JNetCore(uint16 maximumOfSessions, uint32 numOfIocpConcurrentThrd, uint16 numOfIocpWorkerThrd, size_t tlsMemPoolUnitCnt, size_t tlsMemPoolUnitCapacity, uint32 memPoolBuffAllocSize, uint32 sessionRecvBuffSize, bool calcTpsThread)
Definition JNetCore.cpp:5

멤버 함수 문서화

◆ Start()

bool JNetClient::Start ( bool connectToServer = true)
6{
7 if (!JNetCore::Start()) {
8 return false;
9 }
10
11 if (connectToServer) {
12 if (!ConnectToServer()) {
13 return false;
14 }
15 cout << "JNetClient::Start(..), ConnectToServer Done.." << endl;
16 }
17
18 return true;
19}
bool ConnectToServer()
Definition JNetClient.cpp:28
bool Start()
Definition JNetCore.cpp:63

◆ Stop()

void JNetClient::Stop ( )
22{
24
26}
SOCKET m_ConnectSock
클라이언트 연결 소켓
Definition JNetCore.h:589
void Stop()
Definition JNetCore.cpp:96
void Disconnect(SessionID64 sessionID)
Definition JNetCore.cpp:142

◆ ConnectToServer()

bool jnet::JNetClient::ConnectToServer ( )
protected
29{
31 SOCKADDR_IN serverAddr = CreateDestinationADDR(m_ServerIP, m_ServerPort);
32 if (!ConnectToDestination(m_ConnectSock, serverAddr)) {
33 closesocket(m_ConnectSock);
34 return false;
35 }
36
37 JNetSession* serverSession = CreateNewSession(m_ConnectSock);
38 m_ServerSessionID64 = serverSession->m_ID;
39
40 if (serverSession != nullptr) {
41 if (!RegistSessionToIOCP(serverSession)) {
42#if defined(ASSERT)
43 DebugBreak();
44#endif
45 DeleteSession(serverSession->m_ID);
46 OnSessionLeave(serverSession->m_ID);
48 return false;
49 }
50 }
51 else {
52 shutdown(m_ConnectSock, SD_BOTH);
53 closesocket(m_ConnectSock);
54 return false;
55 }
56
58
59 return true;
60}
SOCKET CreateWindowSocket_IPv4(bool isTCP, OUT int *errCode=NULL)
bool ConnectToDestination(const SOCKET &sock, const SOCKADDR_IN &destAddr, OUT int *errCode=NULL)
SOCKADDR_IN CreateDestinationADDR(const char *destIP, uint16 destPort)
Definition WinSocketAPI.cpp:45
virtual void OnConnectionToServer()=0
virtual void OnSessionLeave(SessionID64 sessionID) override
JNetCore 단 세션이 제거된 후 호출되는 이벤트 함수
Definition JNetCore.h:647
bool DeleteSession(SessionID64 sessionID)
세션 제거 요청 함수
Definition JNetCore.cpp:488
JNetSession * CreateNewSession(SOCKET sock)
하위 클래스에서 세션 객체 생성 요청을 위해 호출하는 함수
Definition JNetCore.cpp:443
bool RegistSessionToIOCP(JNetSession *session)
하위 클래스에서 세션 객체를 IOCP 등록을 위해 호출하는 함수
Definition JNetCore.cpp:456

◆ AllocSerialSendBuff()

JBuffer * jnet::JNetClient::AllocSerialSendBuff ( PACKET_LEN len)
inlineprotected
628 {
629 JBuffer* msg = JNetCore::AllocSerialBuff();
630 (*msg) << m_PacketCode_LAN;
631 (*msg) << len;
632
633 return msg;
634 }
JBuffer * AllocSerialBuff()
직렬화 패킷 버퍼 할당 요청 wrapper
Definition JNetCore.h:137

◆ SendPacket()

bool JNetClient::SendPacket ( JBuffer * sendPktPtr,
bool postToWorker = false )
protected
63{
64 return JNetCore::SendPacket(m_ServerSessionID64, sendPktPtr, postToWorker);
65}
bool SendPacket(SessionID64 sessionID, JBuffer *sendPktPtr, bool postToWorker=false)
패킷 송신 요청 함수
Definition JNetCore.cpp:155

◆ SendPacketBlocking()

bool JNetClient::SendPacketBlocking ( JBuffer * sendPktPtr)
protected
68{
70}
bool SendPacketBlocking(SessionID64 sessionID, JBuffer *sendPktPtr)
동기식 송신 요청 함수
Definition JNetCore.cpp:177

◆ BufferSendPacket()

bool JNetClient::BufferSendPacket ( JBuffer * sendPktPtr)
protected
73{
75}
bool BufferSendPacket(SessionID64 sessionID, JBuffer *sendPktPtr)
세션 송신 버퍼 큐에 버퍼링(삽입만 진행)
Definition JNetCore.cpp:202

◆ OnConnectionToServer()

virtual void jnet::JNetClient::OnConnectionToServer ( )
protectedpure virtual

◆ OnDisconnectionFromServer()

virtual void jnet::JNetClient::OnDisconnectionFromServer ( )
protectedpure virtual

◆ OnRecv()

virtual void jnet::JNetClient::OnRecv ( JBuffer & recvBuff)
protectedpure virtual

◆ OnRecvCompletion()

void JNetClient::OnRecvCompletion ( SessionID64 sessionID,
JBuffer & recvRingBuffer )
overrideprivatevirtual

IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 이벤트 함수

IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 함수이다. JNetCore는 순전히 IOCP 작업자 스레드와 세션 관리 및 송수신의 책임만을 제공하기에 수신 이후의 작업을 하위 클래스에서 정의하도록 순수 가상 함수로써 강제하였다. OnRecvCompletion 함수의 반환 이후 해당 세션의 수신 버퍼가 수신 요청되기에 OnRecvCompletion 함수에서는 수신 버퍼에 대한 작업자 스레드 간의 경쟁은 없다. 따라서 단지 수신 버퍼의 참조만을 전달하여 복사 비용 발생을 방지하였다.

매개변수
sessionID세션 아이디(uint64)
recvRingBuffer세션의 수신 버퍼 참조

jnet::JNetCore를 구현.

77 {
78 if (m_ServerSessionID64 != sessionID) {
79 DebugBreak();
80 return;
81 }
82
83 while (recvRingBuffer.GetUseSize() >= sizeof(PACKET_CODE) + sizeof(PACKET_LEN)) {
84 PACKET_CODE code;
85 PACKET_LEN len;
86 recvRingBuffer.Peek(&code);
87 recvRingBuffer.Peek(sizeof(code), &len);
88
89 if (code == m_PacketCode_LAN) {
90 if (recvRingBuffer.GetUseSize() < sizeof(code) + sizeof(len) + len) {
91 break;
92 }
93 else {
94 recvRingBuffer.DirectMoveDequeueOffset(sizeof(code) + sizeof(len));
95 JBuffer recvPacket = recvRingBuffer.SliceBuffer(len, true);
96 OnRecv(recvPacket);
97 recvRingBuffer.DirectMoveDequeueOffset(len);
98 }
99 }
100
101 if (recvRingBuffer.GetUseSize() < sizeof(stMSG_HDR) + len) {
102 break;
103 }
104 else {
105 JBuffer recvPacket = recvRingBuffer.SliceBuffer(len, true);
106 OnRecv(recvPacket);
107 recvRingBuffer.DirectMoveDequeueOffset(len);
108 }
109 }
110}
virtual void OnRecv(JBuffer &recvBuff)=0
uint16 PACKET_LEN
Definition JNetCore.h:336
BYTE PACKET_CODE
Definition JNetCore.h:334
Definition JNetCore.h:339

◆ OnSessionLeave()

virtual void jnet::JNetClient::OnSessionLeave ( SessionID64 sessionID)
inlineoverrideprivatevirtual

JNetCore 단 세션이 제거된 후 호출되는 이벤트 함수

매개변수
sessionID세션 아이디(uint64)

관리되는 세션이 제거된 후 호출되는 함수이다. 호출 시점에서 sessionID는 이미 제거된 세션 ID이며, 유효하지 않다. 콘텐츠 서버와 같은 하위 클래스에서 sessionID를 기반으로 한 데이터를 해당 함수 재정의에서 제거하는 등 정리 작업을 수행할 수 있다.

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

647 {
649 }
virtual void OnDisconnectionFromServer()=0

멤버 데이터 문서화

◆ m_ConnectSock

SOCKET jnet::JNetClient::m_ConnectSock
private

클라이언트 연결 소켓

◆ m_ServerSessionID64

SessionID64 jnet::JNetClient::m_ServerSessionID64
private

연결 서버 세션 ID

◆ m_ServerIP

const char* jnet::JNetClient::m_ServerIP
private

서버 IP

◆ m_ServerPort

uint16 jnet::JNetClient::m_ServerPort
private

서버 Port

◆ m_PacketCode_LAN

PACKET_CODE jnet::JNetClient::m_PacketCode_LAN
private

LAN 구간 패킷 코드


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