SDC C-Project CF Review 프로그램
LYW
2021-07-23 55615eba335d4cbc1f83330dc5078fe073034b7d
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
#pragma once
 
 
 
#define SERVERCLOSEMSG "SERVERCLOSE"
#define CLIENTDISCONNECT -10001
#define SERVERDISCONNECT -10002
#define SERVERMESSAGE (WM_USER + 10)
 
#include "akNetworkLinker.h"
 
 
#include <WinSock2.h>
#include <process.h>
#include <vector>
 
 
 
struct AKNETWORK_DLLSPEC _WorkThreadParam 
{
    _WorkThreadParam()
    {
        pthis = NULL;
        clntSock;
        clntAddr;
        clntAddrSize = 0;
        hThread = NULL;
        dwThreadID = NULL;
 
        clntAddrSize=sizeof(clntAddr);
    }
 
    void* pthis;
    SOCKET clntSock;
    SOCKADDR_IN clntAddr;
    int clntAddrSize;
    HANDLE hThread;
    unsigned int dwThreadID;
};
 
class AKNETWORK_DLLSPEC CakTCPServer
{
public:
    typedef void (*RecvMsgFunc) (char* pMsg, int nMsglen, void*);
    typedef void (*SystemMsgFunc) (char* pMsg, int nMsglen, void*);
public:
    CakTCPServer(void);
    ~CakTCPServer(void);
 
    // ¼­¹ö»ý¼º
    BOOL CreateServer(unsigned int port);
    // ¼­¹öÁ¾·á
    void CloseServer();
    // »ý¼ºµÈ ¼­¹ö ¾ÆÀÌÇÇ °ª ¾ò±â
    char* GetServerIP();
    // ¸Þ¼¼Áö ¼Û½Å
    bool Send(char* sendMsg, int length);
    // ¼ÒÄÏ ¸Þ¼¼Áö ¼ö½Å Äݹ頼³Á¤
    void SetRecvMessageCallback(RecvMsgFunc userFunc, void* data = NULL);
    // ½Ã½ºÅÛ ¸Þ¼¼Áö ¼ö½Å Äݹ頼³Á¤
    void SetSystemMessageCallback(SystemMsgFunc userFunc, void* data = NULL);
    // ¼­¹ö »ý¼º »óÅÂ
    inline bool GetServerState(){return m_isServerCreate;};
    
    bool m_isServerCreate;
 
 
protected:
    void setSystemMsg(const char* format, ...);
private:
    HANDLE m_hMutex; //¹ÂÅØ½º º¯¼ö ¼±¾ð
 
    SOCKET m_servSock;
    SOCKADDR_IN m_servAddr;
    
    HANDLE m_hThread;
    unsigned int m_dwThreadID;
    
    void EchoMsg(char* message, int len); //³ª¸¦ Æ÷ÇÔÇÑ ¸ðµÎ¿¡°Ô ¸Þ¼¼Áö Àü¼Û
    void EchoMsgNotMe(SOCKET mySocket, char* message, int len); //³ª¸¦ Á¦¿ÜÇÑ ¸ðµÎ¿¡°Ô ¸Þ¼¼Áö Àü¼Û
 
    void RemoveSocketList(SOCKET clntSock, SOCKADDR_IN clntAddr);
 
    static unsigned int __stdcall ThreadMain(void *arg); //¸ÞÀΠ¼­¹ö Å¬¶óÀÌ¾ðÆ® ´ë±â¿ë ¾²·¹µå
    static unsigned int __stdcall ClientWorkFunc(void *arg); //Ŭ¶óÀÌ¾ðÆ® ¸Þ¼¼Áö ¹Þ´Â ¾²·¹µå
    
 
    //void (*pCallBackRecvMsg)(char*,int,void*);                     // Äݹé ÇÔ¼ö
    RecvMsgFunc m_recvmsgFunc;
    void* m_recvmsgData;
    SystemMsgFunc m_systemmsgFunc;
    void* m_systemmsgData;
 
private:
    std::vector<SOCKET> m_socketList; //Ŭ¶óÀÌ¾ðÆ® ¸®½ºÆ® °ü¸®
 
    
};
 
//////////////////////////////////////////////////////////////////////////
/*
 
1. KimTCPIP.lib, KimTCPIP.dll, KimServer.h ÆÄÀÏ º¹»ç
 
2. ÇÁ·ÎÁ§Æ®¿¡ KimTCPIP.lib Ãß°¡
 
3. ÀνºÅϽº »ý¼º
    - CakTCPServer m_kimserver;
 
4. ¼­¹ö ÃʱâÈ­ ¹× ¼­¹ö »ý¼º
    - InitServer(HWND hwnd);
 
5. ¼­¹ö·ÎºÎÅÍ ¸Þ¼¼Áö(ex)
    //³ªÁß¿¡ ÀÛ¼º
 
6. ¼­¹ö Á¾·á
    - OnClose(); 
*/