SDC C-Project CF Review 프로그램
kojingeun
2023-07-14 f77e8008cac062596058fca2aeddda62b80bedbf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#pragma once
 
#include "IOCPHandler.h"
 
class AFX_EXT_CLASS CIOCPController : public CIOCPHandler
{
public:
    CIOCPController(void);
    virtual ~CIOCPController(void);
 
    // ÃʱâÈ­ Ã³¸®
    BOOL    StartUp();    //!< ¼ÒÄÏ ÃʱâÈ­ ÇÔ¼ö
    BOOL    CleanUp();    //!< ¼ÒÄÏ ÇØÁ¦ ÇÔ¼ö
    BOOL    InitNetwork(NetworkMode Mode, int nSocketCount, int nPort = 0, CString strIP = _T(""), int nWorkerThreadNum = 0);        //!< NetworkÀÇ ÃʱâÈ­ ÇÔ¼ö
 
    BOOL    Connect(BOOL bReconnect);                                                                                                //!< ¿¬°á
    void    DeinitNetwork();                                                                                                        //!< Á¾·á ÃʱâÈ­
 
    CString    GetCurIP()                        { return m_strIP; }
    int        CIOCPControllerGetCurPort()        { return m_nPort; }
 
    
    virtual int AcceptedSocket(pPerSocketContext pSocketCtx, ULONG ulIP, int nPort) = 0;                                            //!< (¼ø¼ö°¡»óÇÔ¼ö : ½Ç±¸ÇöºÎ´Â CNetServer) Server SocketÀÌ Á¢¼ÓÀ» Çã¿ëÇßÀ» ¶§ È£ÃâÇϴ ÇÔ¼ö.
    virtual BOOL ConnectedSocket(pPerSocketContext pSocketCtx) = 0;                                                                    //!< (¼ø¼ö°¡»óÇÔ¼ö : ½Ç±¸ÇöºÎ´Â CNetClient) Client SocketÀÌ Á¢¼ÓµÇ¾úÀ» ¶§ È£ÃâÇϴ ÇÔ¼ö
    virtual BOOL RecvCompleted(pPerSocketContext pSocketCtx, DWORD dwBytes) = 0;                                                    //!< (¼ø¼ö°¡»óÇÔ¼ö : ½Ç±¸ÇöºÎ´Â CNetServer,CNetClient) Socket¿¡¼­ Receive°¡ ¿Ï·áµÇ¾úÀ» ¶§ CIOCPController¿¡¼­ È£ÃâÇϴ ÇÔ¼ö - Data Parseing
    virtual BOOL SendCompleted(pPerSocketContext pSocketCtx, DWORD dwBytes) = 0;                                                    //!< (¼ø¼ö°¡»óÇÔ¼ö : ½Ç±¸ÇöºÎ´Â CNetServer,CNetClient) SocketÀ» ÅëÇØ Send°¡ ¿Ï·áµÇ¾úÀ» ¶§ CIOCPController¿¡¼­ È£ÃâÇϴ ÇÔ¼ö. - ÈÄó¸®
    virtual void SocketClosed(pPerSocketContext pSocketCtx) = 0;                                                                    //!< (¼ø¼ö°¡»óÇÔ¼ö) SocketÀÌ ²÷¾îÁ³À½À» ¾Ë·ÁÁÖ±â À§ÇÑ ÇÔ¼ö
 
 
protected:
    BOOL    RecvPost(pPerSocketContext pPerSocketCtx);                                                                                //!< RECV ¿äû
    int        SendPost(pPerSocketContext pPerSocketCtx);                                                                                //!< Send ¿äû
    int        SendPost(pPerSocketContext pPerSocketCtx, void* pBuffer, int nLen);                                                        //!< Send ¿äû
 
    void    CloseSocket(pPerSocketContext pPerSocketCtx, BOOL bGraceful = FALSE, BOOL bNotify = TRUE);                                //!< Å¬¶óÀÌ¾ðÆ® ¼ÒÄÏ ÄÁÅØ½ºÆ® Á¦°ÅÇÏ°í ¼ÒÄÏ ´ÝÀ½
    void    NoticeMsg(char *str, ...);                                                                                                //!< ·Î±×¿ë(»ç¿ëX)
 
    CRITICAL_SECTION    m_csContext;                                                                                                //!< ÄÁÅØ½ºÆ® µ¿±âÈ­ °´Ã¼
        
    CString            m_strIPAddr[10];                                                                                                //!< IPÁÖ¼Ò
private:
    static DWORD __stdcall AcceptThread(PVOID pvParam);                                                                                //!< (¿öÄ¿¾²·¹µå) Accept ÀÛ¾÷ Ã³¸® ÇÔ¼ö
    static DWORD __stdcall ConnectThread(PVOID pvParam);                                                                            //!< (¿öÄ¿¾²·¹µå) Connect ÀÛ¾÷ Ã³¸® ÇÔ¼ö
    void    AcceptProcess();                                                                                                        //!< Accept ÀÛ¾÷ ÇÔ¼ö
    BOOL    ConnectProcess();                                                                                                        //!< Connect ÀÛ¾÷ ÇÔ¼ö
 
    // ÀÔÃâ·ÂÀÌ ¿Ï·áµÇ¾úÀ» ‹š Ã³¸® ÇÔ¼ö.
    BOOL    RecvCompleteEvent(pPerSocketContext pPerSocketCtx, DWORD dwBytesTransferred);                                            //!< ¸®½Ãºê À̺¥Æ® Ã³¸® Çڵ鷯 ÇÔ¼ö
    BOOL    SendCompleteEvent(pPerSocketContext pPerSocketCtx, DWORD dwBytesTransferred);                                            //!< Send ¿Ï·á ÆÐŶ Ã³¸® Çڵ鷯 ÇÔ¼ö
    BOOL    OtherCompleteEvent(pPerSocketContext pPerSocketCtx, DWORD dwBytesTransferred);                                            //!< Send,Recv Á¦¿Ü  ¿Ï·á ÆÐŶ Ã³¸® Çڵ鷯 ÇÔ¼ö
 
    void    ProcessingThread(void);                                                                                                    //!< ¿Ï·á ÆÐŶ Ã³¸® ÇÔ¼ö
 
private:
    static BOOL            m_bIsStartUp;                                                                                                ///< IOCP ¸ðµâ ½ÃÀÛ ¿©ºÎ
                                                                                        
    HANDLE                m_hMutexLog;                                                                                                ///< Mutex °´Ã¼(Áߺ¹½ÇÇà¹æÁö)
    CString                m_strIP;                                                                                                    ///< IP ÁÖ¼Ò(À¯´ÏÄÚµå)
    CStringA            m_straCurIP;                                                                                                ///< IP ÁÖ¼Ò(¸ÖƼ¹ÙÀÌÆ®)
    int                    m_nPort;                                                                                                    ///< Æ÷Æ®
 
    NetworkMode            m_NetMode;                                                                                                    ///< IOCP µ¿ÀÛ ¸ðµå(¼­¹ö/Ŭ¶óÀ̾ðÆ®)
 
    // Log
    char                m_strFileName[MAX_PATH];                                                                                    ///< ·Î±×¿ë(°æ·Î)
    int                    m_nLogYear;                                                                                                    ///< ·Î±×¿ë(³â)
    int                    m_nLogMonth;                                                                                                ///< ·Î±×¿ë(¿ù)
    int                    m_nLogDay;                                                                                                    ///< ·Î±×¿ë(ÀÏ)
 
    // Client Mode
    pPerSocketContext    m_pSocketCtx;                                                                                                ///< Å¬¶óÀÌ¾ðÆ® ¼ÒÄÏ
    BOOL                m_bReconnect;                                                                                                ///< Å¬¶óÀÌ¾ðÆ® ÀçÁ¢¼Ó ½Ãµµ ¿©ºÎ
    BOOL                m_bConnected;                                                                                                ///< Å¬¶óÀÌ¾ðÆ® Á¢¼Ó ¿©ºÎ
    HANDLE                m_EventExitConnectThread;                                                                                    ///< Å¬¶óÀÌ¾ðÆ® ConnectThread Á¾·á À̺¥Æ®
 
    BOOL                m_nExit;                                                                                                    ///< IOCP Á¾·á µ¿±âÈ­ °´Ã¼
};