서버/네트워크 라이브러리 5

5. Session#2

지금까지는 RecvBuffer에 그냥 다 때려박았는데 생각해보면 처리되지 않은 데이터들을 그냥 다 버퍼에 넣어버리는 건 당연히 하면 안될 일이다.물론 아직 완성되지 않았기 때문에 그렇지만 이런 것들을 생각하면서 코드를 작성해보도록 하자.이번엔 저번 게시글에 이어 Send하는 부분을 만들어 볼 것이다. 지금 작성하는 코드는 Send의 단계를 이해하기 위한 코드이므로 이후 삭제될 코드들이 꽤 많이 들어간다. Session.h#pragma once#include "IocpCore.h"#include "IocpEvent.h"#include "NetAddress.h"class Service;//------------// Session//------------class Session : public IocpObj..

3. Service

지난번에 iocpCore를 만들어서 실행해보았고 이를 좀 더 편하게 관리하기 위해 Service라는 것을 도입했다.이에 맞춰 기존의 라이브러리를 조금 수정했다. Service.h#pragma once#include "NetAddress.h"#include "IocpCore.h"#include "Listener.h"#include enum class ServiceType : uint8{ Server, Client};//-------------// Service//-------------using SessionFactory = function;class Service : public enable_shared_from_this{public: Service(ServiceType type, NetAddress ..

2. IocpCore

본격적으로 IOCP를 구현해보자 IocpCore.h#pragma once// Iocp에 등록할 수 있는 객체//---------------// IocpObject//---------------class IocpObject{public: virtual HANDLE GetHandle() abstract; virtual void Dispatch(class IocpEvent* iocpEvent, int32 numOfByte = 0) abstract;};//-------------// IocpCore//-------------class IocpCore{public: IocpCore(); ~IocpCore(); HANDLE GetHandle() { return _iocpHandle; }; // 세션, 소켓 생..

1. Socket Utils

본격적으로 라이브러리를 쌓아올리는 과정이다. 먼저 소켓을 초기화하고 인자를 설정하는 등 소켓에 대한 내용이다. SocketUtils.h#pragma once#include "NetAddress.h"// 매핑을 해줘서 편하게 사용하기 위함//----------------// Socket Utils//----------------class SocketUtils{public: static LPFN_CONNECTEX ConnectEx; static LPFN_DISCONNECTEX DisconnectEx; static LPFN_ACCEPTEX AcceptEx;public: static void Init(); static void Clear(); static bool BindWindowsFunction(SOC..