클라가 서버에 접속하면 Session을 할당하고 클라의 정보를 입력한 후 저장한다.
Session 구조체
struct Session
{
LONG sessionId = 0;
SOCKET clientSocket;
SOCKADDR_IN clientAddr;
RingBuffer recvRingBuffer;
queue<Packet*> sendQueue;
OVERLAPPED recvOverlapped = {};
OVERLAPPED sendOverlapped = {};
IOBlock* IOBlock = nullptr;
};
sessionId: Session을 구분할 id ( 서버에서 부여 )
clientSocket: 서버에 접속한 클라와 소통할 Socket
clientAddr: 서버에 접속한 클라 주소
recvRingBuffer: 클라가 보낸 데이터를 담아둘 원형큐
sendQueue: 클라가 전송할 데이터를 담아둘 직렬화 버퍼 큐
recvOverlapped: WSARecv 통지용
sendOverlapped: WSASend 통지용
IOBlock: Session에 I/O 작업이 남아 있는지 확인
IOBlock 구조체
struct IOBlock
{
LONG64 IOCount = 0;
LONG64 IsRelease = false;
};
IOCount: Session의 I/O 작업을 기록해둘 변수
IsRelase: Relase를 하는지에 대한 여부( = 연결 해제 )
IOBlock을 따로 구성해서 Session이 사용중인지 아닌지를 판별해준다.
'ChattingServer' 카테고리의 다른 글
[ChattingServer] RingBuffer ( 원형 큐 ) (0) | 2025.06.01 |
---|---|
[ChattingServer] AcceptThreadProc (0) | 2025.06.01 |
[ChattingServer] 직렬화 버퍼 (0) | 2025.05.29 |
[ChattingServer] 사용자 버퍼 (0) | 2025.05.29 |
[ChattingServer] 패킷 구조 (0) | 2025.05.29 |