Files
Client/Server/RylServerProject/BaseLibrary/Network/Iocp/Overlapped.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

112 lines
2.7 KiB
C++

#ifndef _COVERLAPPED_H_
#define _COVERLAPPED_H_
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include "../../Thread/Lock.h"
#include <winsock2.h>
#include <windows.h>
#include <boost/pool/poolfwd.hpp>
// 전방 참조
class CBuffer;
class CBufferFactory;
class CSession;
class CListener;
class COverlappedFactory;
class COverlapped : public OVERLAPPED
{
public:
COverlapped(COverlappedFactory& ovlFactory, CBuffer* lpBuffer);
virtual ~COverlapped();
virtual void Dispatch(BOOL bResult, ULONG_PTR lpSessionKey,
unsigned long dwProcessedBytes) = 0;
void SetBuffer(CBuffer* lpBuffer) { m_lpBuffer = lpBuffer; }
void Release();
protected:
COverlappedFactory& m_ovlFactory;
CBuffer* m_lpBuffer;
};
// ---------------------------------------------------------------------------
// COverlappedFactory : 인터페이스 팩토리
class COverlappedFactory
{
public:
virtual ~COverlappedFactory() { }
virtual COverlapped* CreateSend(CSession* lpSession, CBuffer* lpMsgBlock) = 0;
virtual COverlapped* CreateRecv(CSession* lpSession, CBuffer* lpMsgBlock) = 0;
virtual COverlapped* CreateAccept(CListener* lpListener, SOCKET hSocket, CBuffer* lpMsgBlock) = 0;
virtual void DeleteOverlapped(COverlapped* lpOverlapped) = 0;
};
// ---------------------------------------------------------------------------
// CStreamOverlappedFactory : TCP, SPX통신에 사용한다.
class CStreamOverlappedFactory : public COverlappedFactory
{
public:
CStreamOverlappedFactory();
virtual ~CStreamOverlappedFactory();
virtual COverlapped* CreateSend(CSession* lpSession, CBuffer* lpMsgBlock);
virtual COverlapped* CreateRecv(CSession* lpSession, CBuffer* lpMsgBlock);
virtual COverlapped* CreateAccept(CListener* lpListener, SOCKET hSocket, CBuffer* lpMsgBlock);
virtual void DeleteOverlapped(COverlapped* lpOverlapped);
private:
typedef CCSLock FactoryLock;
FactoryLock m_Lock;
CACHE_PAD(FactoryLockPad, sizeof(FactoryLock));
boost::pool<>* m_lpOverlappedPool;
};
// ---------------------------------------------------------------------------
// CDatagramOverlappedFactory : UDP, IPX통신에 사용한다.
class CDatagramOverlappedFactory : public COverlappedFactory
{
public:
CDatagramOverlappedFactory();
virtual ~CDatagramOverlappedFactory();
virtual COverlapped* CreateSend(CSession* lpSession, CBuffer* lpMsgBlock);
virtual COverlapped* CreateRecv(CSession* lpSession, CBuffer* lpMsgBlock);
virtual COverlapped* CreateAccept(CListener* lpListener, SOCKET hSocket, CBuffer* lpMsgBlock) { return 0; }
virtual void DeleteOverlapped(COverlapped* lpOverlapped);
private:
typedef CCSLock FactoryLock;
FactoryLock m_Lock;
CACHE_PAD(FactoryLockPad, sizeof(FactoryLock));
boost::pool<>* m_lpOverlappedPool;
};
#endif