Files
Client/Server/RylServerProject/RylServerLibrary/Utility/ServerAppFramework/ServerWindowFramework.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

138 lines
3.9 KiB
C++

#ifndef _CSERVER_WINDOW_FRAMEWORK_
#define _CSERVER_WINDOW_FRAMEWORK_
#include <winsock2.h>
#include <windows.h>
#include <tchar.h>
#include <climits>
#include <Thread/Lock.h>
#include <Thread/Thread.h>
#include <list>
// 전방 참조
class CSysTray;
class CConsoleWindow;
class CCommand;
class CCommandProcess;
class CConsoleCMDFactory;
class CIOCPNet;
class CMsgProcessMgr;
class CTimerProcMgr;
class CPulse;
class CBufferFactory;
class CServerWindowFramework;
// 프로세스 스레드
class CProcessThread : public CThread
{
public:
CProcessThread(CServerWindowFramework& ServerWindowFramework);
CProcessThread(CServerWindowFramework& ServerWindowFramework, long nProcessTick);
virtual ~CProcessThread();
protected:
virtual void InternalRun(CPulse& Pulse) = 0;
virtual void Cleanup(CPulse& Pulse) = 0;
private:
virtual unsigned int Run(); // 실제 실행 되는 루프를 넣는다.
virtual BOOL End() { InterlockedExchange(&m_bExit, TRUE); return TRUE; }
BOOL IsEndLoop() { return InterlockedCompareExchange(&m_bExit, TRUE, TRUE); }
volatile LONG m_bExit;
long m_nProcessTick;
CServerWindowFramework& m_ServerWindowFramework;
};
class CServerWindowFramework
{
public:
bool Initialize(HINSTANCE hInstance, const TCHAR* szWndApplicationName,
const char* szCmdLine, int nICON_ID, int nMenu_ID);
HWND GetWnd() { return m_hWnd; }
void ProcessMessage();
bool isValid();
void PrintOutput(const char* lpFormat, ...);
void PrintInfo(const char* lpFormat, ...);
bool SendManageClientPacket(const void* lpData, unsigned short usLength);
void SendManageClientPing();
void SetStatusFlag(unsigned long dwServerStatus) { m_dwServerStatus = dwServerStatus; }
unsigned long GetStatusFlag() { return m_dwServerStatus; }
CMsgProcessMgr* GetMsgProcessMgr() { return m_lpMsgProcessMgr; }
CTimerProcMgr* GetTimerProcMgr() { return m_lpTimerProcessMgr; }
CIOCPNet* GetIOCPNet() { return m_lpIOCPNet; }
CConsoleWindow* GetConsoleWindow() { return m_lpConsoleWindow; }
CCommandProcess* GetCommandProcess() { return m_lpCommandProcess; }
CConsoleCMDFactory* GetCommandFactory() { return m_lpCommandFactory; } // 내부에서 생성
private:
bool InitWindow(WNDCLASS& wndClass, const char* szWndApplicationName);
void Destroy();
protected:
// 상속을 받아서 세부 내용을 구현하도록 함.
CServerWindowFramework();
virtual ~CServerWindowFramework();
// 반드시 초기화를 해 주어야 함.
bool InitializeFramework(HINSTANCE hInstance, const TCHAR* szWndApplicationName, int nICON_ID, int nMenu_ID);
// 메시지 프로세스 추가, 커맨드 추가, Listener추가 등의 처리를 한다.
virtual bool ApplicationSpecificInit(const TCHAR* szCmdLine) = 0;
// 처리 스레드 추가.
bool AddProcessThread(CThread* lpProcessThread);
static CServerWindowFramework* GetThisPtr(HWND hWnd) { return reinterpret_cast<CServerWindowFramework*>(GetProp(hWnd, ms_this)); }
static LRESULT CALLBACK ServerWindowFrameworkProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static VOID CALLBACK FrameworkTimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
private:
typedef std::list<CThread*> ProcessThreadList;
HINSTANCE m_hInstance;
HWND m_hWnd;
int m_nMenuID;
unsigned long m_dwInternalFlags;
unsigned long m_dwServerStatus;
CSysTray* m_lpSysTray; // 내부에서 생성
CConsoleWindow* m_lpConsoleWindow; // 내부에서 생성
CCommandProcess* m_lpCommandProcess; // 내부에서 생성
CConsoleCMDFactory* m_lpCommandFactory; // 내부에서 생성
CIOCPNet* m_lpIOCPNet; // 내부에서 생성
CMsgProcessMgr* m_lpMsgProcessMgr; // 메시지 프로세스 매니저
CTimerProcMgr* m_lpTimerProcessMgr; // 타이머 프로세스 매니저
CBufferFactory* m_lpBufferFactory; // 버퍼 Factory
ProcessThreadList m_ProcessThreadList;
char m_szAppName[MAX_PATH];
static const char* ms_this;
static const UINT ms_SendDataMsg;
};
#endif