JNetLibray
|
서버 기능이 구체화된 'JNetCore' 하위 클래스, 클라이언트와의 연결 완료 시 '세션 객체 생성' 및 'IOCP 객체에 소켓 장치 등록' 수행
패킷 수신 완료 시의 이벤트 함수에 디코딩 작업(OnRecv)과 패킷 송신 기능 함수에 인코딩 작업 추가
더 자세히 ...
#include <JNetCore.h>
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 () |
![]() | |
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 멤버 함수 | |
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 |
클라이언트와의 연결 종료 및 클라이언트 세션 제거 후 호출되는 이벤트 함수 | |
virtual void | OnRecv (SessionID64 sessionID, JBuffer &recvBuff) |
패킷 수신 시 호출되는 이벤트 함수 | |
virtual void | OnRecv (SessionID64 sessionID, JSerialBuffer &recvSerialBuff) |
패킷 수신 시 호출되는 이벤트 함수, 수신 버퍼링 모드의 서버 전용 | |
![]() | |
void | PrintLibraryInfoOnConsole () |
JNetSession * | CreateNewSession (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 () |
Protected 속성 | |
BYTE | m_PacketCode_LAN |
LAN 구간 패킷 코드 | |
BYTE | m_PacketCode |
LAN 외부 통신 패킷 코드 | |
BYTE | m_PacketSymmetricKey |
대칭-키 | |
![]() | |
bool | m_CalcTpsFlag |
Private 멤버 함수 | |
void | PrintLibraryInfoOnConsole () |
virtual void | OnRecvCompletion (SessionID64 sessionID, JBuffer &recvRingBuffer) override |
IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 이벤트 함수 | |
virtual void | OnSessionLeave (SessionID64 sessionID) override |
JNetCore 단 세션이 제거된 후 호출되는 이벤트 함수 | |
정적 Private 멤버 함수 | |
static UINT __stdcall | AcceptThreadFunc (void *arg) |
Accept 스레드의 수행 함수 | |
Private 속성 | |
SOCKADDR_IN | m_ListenSockAddr |
서버 바인딩 주소 | |
SOCKET | m_ListenSock |
서버 리슨 소켓 | |
uint16 | m_MaximumOfConnections |
수용 가능한 최대 연결 수 | |
uint16 | m_NumOfConnections |
현재 연결된 연결 수 | |
HANDLE | m_AcceptThreadHnd |
Accept 스레드 핸들 | |
bool | m_RecvBufferingMode |
수신 버퍼링 모드 플래그 | |
서버 기능이 구체화된 'JNetCore' 하위 클래스, 클라이언트와의 연결 완료 시 '세션 객체 생성' 및 'IOCP 객체에 소켓 장치 등록' 수행
패킷 수신 완료 시의 이벤트 함수에 디코딩 작업(OnRecv)과 패킷 송신 기능 함수에 인코딩 작업 추가
jnet::JNetServer::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 ) |
serverIP | 서버 IP 주소 |
serverPort | 서버 포트 |
maximumOfConnections | 최대 커넥션 수용 갯수 |
packetCode_LAN | LAN 구간 내 송수신 패킷 코드(JNetLibrary system's common packet code) |
packetCode | 클라이언트와의 송수신 패킷 코드 |
packetSymmetricKey | 대칭키(고정) |
recvBufferingMode | 단일 세션에 대한 수신 완료 통지 시 수신 가능한 모든 패킷을 한 번에 읽은 후 'JSerialBuffer'에 담고 이를 인수로 수신 이벤트 함수 호출 |
maximumOfSessions | 최대 세션 수용 개수 |
numOfIocpConcurrentThrd | IOCP 'Number of Concurrent Threads' 설정 값 |
numOfIocpWorkerThrd | IOCP 객체를 통해 관리될 작업자 스레드 갯수 설정 값 |
tlsMemPoolUnitCnt | TLS 메모리 풀의 할당 단위 기준 초기 설정 값 |
tlsMemPoolUnitCapacity | TLS 메모리 풀 할당 단위 기준 최대 개수 |
memPoolBuffAllocSize | TLS 메모리 풀 할당 단위 크기 |
sessionRecvBuffSize | 세션 수신 버퍼 크기(링-버퍼) |
calcTpsThread | 서버 TPS(Transaction per seconds) 측정 플래그, 플래그 ON 시 'CalcTpsThreadFunc' 작업 함수 수행 스레드 생성 |
bool jnet::JNetServer::Start | ( | ) |
void jnet::JNetServer::Stop | ( | ) |
|
inline |
|
inlineprotectedvirtual |
|
private |
|
protected |
JNetCore 요청 함수 + 송신 패킷 인코딩 기능
encoded | encoded: false의 경우 함수 내 인코딩 수행 |
|
protected |
encoded | encoded: false의 경우 함수 내 인코딩 수행 |
|
protected |
encoded | encoded: false의 경우 함수 내 인코딩 수행 |
|
inlineprotected |
직렬화 패킷 버퍼 할당 + 헤더 초기화
len | 페이로드(데이터) 길이 |
LAN | LAN: true, LAN 구간 패킷 코드 설정 / LAN: false, LAN 외 구간(클라이언트) 패킷 코드 설정 |
|
inlineprotectedvirtual |
Accept 반환 시 호출되는 이벤트 함수, 클라이언트 수용 여부를 반환을 통해 결정
clientSockAddr | 연결 요청 클라이언트의 주소 정보 |
|
protectedpure virtual |
클라이언트 연결 수용 후 정상적으로 세션을 생성한 이 후 호출되는 이벤트 함수
sessionID | 연결된 클라이언트 세션 ID |
clientSockAddr | 연결된 클라이언트 주소 정보 |
|
protectedpure virtual |
클라이언트와의 연결 종료 및 클라이언트 세션 제거 후 호출되는 이벤트 함수
sessionID | 종료 클라이언트 세션 ID |
이벤트 함수 호출 이후 동일 세션 ID로 다른 이벤트 발생이 없음을 보장
|
inlineprotectedvirtual |
패킷 수신 시 호출되는 이벤트 함수
recvBuff | jnet 정의 헤더 + 페이로드 단위의 낱개 수신 직렬화 버퍼 |
jnet::jgroup::JNetGroupServer에서 재구현되었습니다.
|
inlineprotectedvirtual |
패킷 수신 시 호출되는 이벤트 함수, 수신 버퍼링 모드의 서버 전용
recvSerialBuff | 복수의 수신 직렬화 버퍼를 추상화한 'JSerialBuffer' |
jnet::jgroup::JNetGroupServer에서 재구현되었습니다.
|
overrideprivatevirtual |
IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 이벤트 함수
IOCP 작업자 스레드의 수신 완료 시 대상 세션의 수신 버퍼의 enqueue 오프셋 제어 후 호출되는 함수이다. JNetCore는 순전히 IOCP 작업자 스레드와 세션 관리 및 송수신의 책임만을 제공하기에 수신 이후의 작업을 하위 클래스에서 정의하도록 순수 가상 함수로써 강제하였다. OnRecvCompletion 함수의 반환 이후 해당 세션의 수신 버퍼가 수신 요청되기에 OnRecvCompletion 함수에서는 수신 버퍼에 대한 작업자 스레드 간의 경쟁은 없다. 따라서 단지 수신 버퍼의 참조만을 전달하여 복사 비용 발생을 방지하였다.
sessionID | 세션 아이디(uint64) |
recvRingBuffer | 세션의 수신 버퍼 참조 |
jnet::JNetCore를 구현.
|
inlineoverrideprivatevirtual |
JNetCore 단 세션이 제거된 후 호출되는 이벤트 함수
sessionID | 세션 아이디(uint64) |
관리되는 세션이 제거된 후 호출되는 함수이다. 호출 시점에서 sessionID는 이미 제거된 세션 ID이며, 유효하지 않다. 콘텐츠 서버와 같은 하위 클래스에서 sessionID를 기반으로 한 데이터를 해당 함수 재정의에서 제거하는 등 정리 작업을 수행할 수 있다.
jnet::JNetCore(으)로부터 재구현되었습니다.
|
staticprivate |
Accept 스레드의 수행 함수
|
private |
서버 바인딩 주소
|
private |
서버 리슨 소켓
|
private |
수용 가능한 최대 연결 수
|
private |
현재 연결된 연결 수
|
private |
Accept 스레드 핸들
|
private |
수신 버퍼링 모드 플래그
|
protected |
LAN 구간 패킷 코드
|
protected |
LAN 외부 통신 패킷 코드
|
protected |
대칭-키