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>
This commit is contained in:
152
Server/NFAuthTool/NFAuthServer/NaveServer/Global.cpp
Normal file
152
Server/NFAuthTool/NFAuthServer/NaveServer/Global.cpp
Normal file
@@ -0,0 +1,152 @@
|
||||
#include "Global.h"
|
||||
#include <Iphlpapi.h>
|
||||
#pragma comment(lib,"Iphlpapi.lib")
|
||||
|
||||
#include <vector>
|
||||
#include <Nave/NFStringUtil.h>
|
||||
|
||||
std::vector<Nave::StringA> g_AdapterInfo;
|
||||
|
||||
void UpdateAdapterInfo()
|
||||
{
|
||||
PIP_ADAPTER_INFO pAdapterInfo;
|
||||
PIP_ADAPTER_INFO pAdapter = NULL;
|
||||
DWORD dwRetVal = 0;
|
||||
|
||||
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
|
||||
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
|
||||
|
||||
// Make an initial call to GetAdaptersInfo to get
|
||||
// the necessary size into the ulOutBufLen variable
|
||||
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
|
||||
{
|
||||
free(pAdapterInfo);
|
||||
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
|
||||
}
|
||||
|
||||
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
|
||||
{
|
||||
pAdapter = pAdapterInfo;
|
||||
while (pAdapter)
|
||||
{
|
||||
if(strcmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") != 0)
|
||||
g_AdapterInfo.push_back(pAdapter->IpAddressList.IpAddress.String);
|
||||
|
||||
/*
|
||||
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
|
||||
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
|
||||
printf("\tAdapter Addr: \t%ld\n", pAdapter->Address);
|
||||
printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
|
||||
printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
|
||||
|
||||
printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
|
||||
printf("\t***\n");
|
||||
if (pAdapter->DhcpEnabled)
|
||||
{
|
||||
printf("\tDHCP Enabled: Yes\n");
|
||||
printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
|
||||
printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
|
||||
}
|
||||
else
|
||||
printf("\tDHCP Enabled: No\n");
|
||||
|
||||
if (pAdapter->HaveWins)
|
||||
{
|
||||
printf("\tHave Wins: Yes\n");
|
||||
printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
|
||||
printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
|
||||
}
|
||||
else
|
||||
printf("\tHave Wins: No\n");
|
||||
*/
|
||||
pAdapter = pAdapter->Next;
|
||||
}
|
||||
}
|
||||
/* else
|
||||
{
|
||||
printf("Call to GetAdaptersInfo failed.\n");
|
||||
}
|
||||
*/
|
||||
free(pAdapterInfo);
|
||||
}
|
||||
|
||||
BOOL GetLocalIP(WCHAR* pLocalIP_Out, BOOL bClosedIP)
|
||||
{
|
||||
if(g_AdapterInfo.empty())
|
||||
UpdateAdapterInfo();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int isize = g_AdapterInfo.size();
|
||||
for(int i = 0; i < isize; ++i)
|
||||
{
|
||||
wcscpy(pLocalIP_Out, Nave::ToUnicode(g_AdapterInfo[i]).c_str());
|
||||
|
||||
if(bClosedIP) // <20><><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>.
|
||||
{
|
||||
if(wcsncmp(pLocalIP_Out, L"0", 1) == 0)
|
||||
continue;
|
||||
else if(wcsncmp(pLocalIP_Out, L"192", 3) == 0)
|
||||
return TRUE;
|
||||
else if(wcsncmp(pLocalIP_Out, L"127", 3) == 0)
|
||||
return TRUE;
|
||||
}
|
||||
else // <20>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>
|
||||
{
|
||||
if(wcsncmp(pLocalIP_Out, L"0", 1) == 0)
|
||||
continue;
|
||||
else if(wcsncmp(pLocalIP_Out, L"192", 3) == 0)
|
||||
continue;
|
||||
else if(wcsncmp(pLocalIP_Out, L"127", 3) == 0)
|
||||
continue;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bClosedIP)
|
||||
return GetLocalIP(pLocalIP_Out, TRUE);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
BOOL GetLocalIP(CHAR* pLocalIP_Out, BOOL bClosedIP)
|
||||
{
|
||||
if(g_AdapterInfo.empty())
|
||||
UpdateAdapterInfo();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int isize = g_AdapterInfo.size();
|
||||
for(int i = 0; i < isize; ++i)
|
||||
{
|
||||
strcpy(pLocalIP_Out, g_AdapterInfo[i].c_str());
|
||||
|
||||
if(bClosedIP) // <20><><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>.
|
||||
{
|
||||
if(strncmp(pLocalIP_Out, "0", 1) == 0)
|
||||
continue;
|
||||
else if(strncmp(pLocalIP_Out, "192", 3) == 0)
|
||||
return TRUE;
|
||||
else if(strncmp(pLocalIP_Out, "127", 3) == 0)
|
||||
return TRUE;
|
||||
}
|
||||
else // <20>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>
|
||||
{
|
||||
if(strncmp(pLocalIP_Out, "0", 1) == 0)
|
||||
continue;
|
||||
else if(strncmp(pLocalIP_Out, "192", 3) == 0)
|
||||
continue;
|
||||
else if(strncmp(pLocalIP_Out, "127", 3) == 0)
|
||||
continue;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bClosedIP)
|
||||
return GetLocalIP(pLocalIP_Out, TRUE);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
49
Server/NFAuthTool/NFAuthServer/NaveServer/Global.h
Normal file
49
Server/NFAuthTool/NFAuthServer/NaveServer/Global.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* @file Global.h
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> (<28>α<D7B8><DEBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>)
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
// Windows <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
#include <windows.h>
|
||||
#include <time.h> // timer
|
||||
#include <assert.h> // assert
|
||||
#include <process.h> // Thread
|
||||
#include <stdio.h> // standard I/O
|
||||
#include <stdlib.h>
|
||||
#include <wchar.h>
|
||||
|
||||
// sock
|
||||
#include<winsock2.h> // win32 socket
|
||||
#pragma comment(lib,"ws2_32.lib")
|
||||
|
||||
#include<Mswsock.h> // extension socket library
|
||||
#pragma comment(lib,"mswsock.lib")
|
||||
|
||||
#include "mmsystem.h" // <20><>Ƽ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD>
|
||||
#pragma comment(lib,"winmm.lib")
|
||||
|
||||
#include <Nave/Nave.h>
|
||||
#include <Nave/NFSync.h>
|
||||
#include <Nave/NFLog.h>
|
||||
#include <Nave/NFStringUtil.h>
|
||||
#include <NaveNet/NFPacket.h>
|
||||
#include "NFDefine.h"
|
||||
#include "NFConnection.h"
|
||||
#include "NFConnectionManager.h"
|
||||
#include "NFUpdateManager.h"
|
||||
#include "UIFramework.h"
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ɴϴ<C9B4>.
|
||||
* @param LocalIP <09><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>庯<EFBFBD><E5BAAF>.
|
||||
* @param bClosedIP <20><><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL GetLocalIP(CHAR* pLocalIP_Out, BOOL bClosedIP = FALSE);
|
||||
BOOL GetLocalIP(WCHAR* pLocalIP_Out, BOOL bClosedIP = FALSE);
|
||||
835
Server/NFAuthTool/NFAuthServer/NaveServer/NFConnection.cpp
Normal file
835
Server/NFAuthTool/NFAuthServer/NaveServer/NFConnection.cpp
Normal file
@@ -0,0 +1,835 @@
|
||||
#include "Global.h"
|
||||
#include "NFConnection.h"
|
||||
#include <Nave/NFLog.h>
|
||||
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
NFConnection::NFConnection() : m_nMaxBuf(0), m_nMaxPacketSize(0), m_sckListener(NULL),
|
||||
m_Socket(NULL), m_eConnectFlag(CONNECT_NONE), m_bIsConnect(FALSE),
|
||||
m_bForce(FALSE), m_hIOCP(NULL), m_pPacketPool(NULL), m_uRecvTickCnt(0)
|
||||
{
|
||||
m_RecvPacket.Init();
|
||||
m_RecvIO.NewIOBuf(0); // 0<><30><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1024*64<36><34>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}
|
||||
|
||||
NFConnection::~NFConnection()
|
||||
{
|
||||
m_nMaxBuf = m_nMaxPacketSize = 0;
|
||||
m_sckListener = NULL;
|
||||
|
||||
Disconnect();
|
||||
|
||||
m_eConnectFlag = CONNECT_NONE;
|
||||
m_bIsConnect = FALSE;
|
||||
m_bForce = FALSE;
|
||||
|
||||
m_hIOCP = NULL;
|
||||
m_pPacketPool = NULL;
|
||||
m_uRecvTickCnt = 0;
|
||||
|
||||
m_RecvIO.DeleteIOBuf();
|
||||
}
|
||||
|
||||
BOOL NFConnection::Create( DWORD dwIndex,
|
||||
HANDLE hIOCP,
|
||||
SOCKET listener,
|
||||
NFPacketPool* pPacketPool,
|
||||
INT nMaxBuf)
|
||||
{
|
||||
// <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_dwIndex = dwIndex;
|
||||
m_hIOCP = hIOCP;
|
||||
m_sckListener = listener;
|
||||
m_pPacketPool = pPacketPool;
|
||||
|
||||
m_nMaxBuf = m_nMaxPacketSize = nMaxBuf;
|
||||
|
||||
// <20><>ü OPEN
|
||||
if(!Open())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><EFBFBD><EEB6BB> <20>ؾ<EFBFBD> <20>ϴ°<CFB4>? <20><> <20><><EFBFBD>ؼ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
||||
Close_Open(FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::Open()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD><D6BE><EFBFBD> <20><>.
|
||||
assert(m_nMaxBuf);
|
||||
assert(m_nMaxPacketSize);
|
||||
|
||||
// <20><>Ŷ Pool<6F><6C> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if( !m_pPacketPool ) return FALSE;
|
||||
|
||||
// Listener Socket <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if( m_sckListener == NULL ) return FALSE;
|
||||
|
||||
m_RecvIO.InitIOBuf(); // <20><>Ŷ<EFBFBD><C5B6><EFBFBD>۸<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD>Ѵ<EFBFBD>.
|
||||
|
||||
// create socket for send/recv
|
||||
m_Socket = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if(m_Socket == NULL) return FALSE;
|
||||
|
||||
// Accpet<65><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><>Ŷ<EFBFBD><C5B6><EFBFBD>۸<EFBFBD> <20>غ<EFBFBD><D8BA>Ѵ<EFBFBD>.
|
||||
LPOVERLAPPEDPLUS newolp = PrepareAcptPacket();
|
||||
|
||||
if(NULL == newolp)
|
||||
{
|
||||
closesocket(m_Socket);
|
||||
m_Socket = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Socket<65><74> Listener<65><72> <20><><EFBFBD><EFBFBD>
|
||||
// Overlapped<65><64> <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߿<EFBFBD> IOCP <20>̺<EFBFBD>Ʈ <20><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD>
|
||||
BOOL bRet = AcceptEx(newolp->sckListen, // Listen Socket
|
||||
newolp->sckClient, // Socket
|
||||
&(newolp->wbuf.buf[0]), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_nMaxBuf, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sizeof(sockaddr_in) + 16, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - IP, Address, Name.. etc
|
||||
sizeof(sockaddr_in) + 16, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - IP, Address, Name.. etc
|
||||
&newolp->dwBytes, // ó<><C3B3> <20><><EFBFBD><EFBFBD>Ʈ ũ<><C5A9>
|
||||
&newolp->overlapped); // *<2A>߿<EFBFBD>*
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
if(!bRet && WSAGetLastError() != WSA_IO_PENDING)
|
||||
{
|
||||
ShowMessage(ACCEPT_FAILED);
|
||||
closesocket(m_Socket);
|
||||
m_Socket = NULL;
|
||||
ReleaseAcptPacket(newolp);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
INT zero = 0;
|
||||
INT err = 0;
|
||||
|
||||
// Send Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if( (err = setsockopt( m_Socket, SOL_SOCKET, SO_SNDBUF, (CHAR *)&zero, sizeof(zero))) == SOCKET_ERROR)
|
||||
{
|
||||
ShowMessage(ACCEPT_FAILED);
|
||||
closesocket(m_Socket);
|
||||
m_Socket = NULL;
|
||||
ReleaseAcptPacket(newolp);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Receive Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if((err = setsockopt( m_Socket, SOL_SOCKET, SO_RCVBUF, (CHAR *)&zero, sizeof(zero) )) == SOCKET_ERROR)
|
||||
{
|
||||
ShowMessage(ACCEPT_FAILED);
|
||||
closesocket(m_Socket);
|
||||
m_Socket = NULL;
|
||||
ReleaseAcptPacket(newolp);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
InterlockedExchange((LONG*)&m_bIsConnect,0);
|
||||
Clear();
|
||||
|
||||
m_uRecvTickCnt = 0 ;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::Close_Open( BOOL bForce )
|
||||
{
|
||||
// <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
// Disconnect <20>Լ<EFBFBD><D4BC>ȿ<EFBFBD><C8BF><EFBFBD> OnDisconnect(), Clear() <20><> ȣ<><C8A3><EFBFBD>ȴ<EFBFBD>.
|
||||
Disconnect(bForce);
|
||||
|
||||
// <20><> <20><>Ŷ <20>ٽ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
if(!Open())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><EFBFBD><EEB6BB> <20>ؾ<EFBFBD> <20>ϴ°<CFB4>? <20><> <20><><EFBFBD>ؼ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> ǥ<><C7A5><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD>. <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD>߿<EFBFBD> Ÿ<≯ӿ<CCB8><D3BF><EFBFBD> <20>ٽ<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>غ<EFBFBD><D8BA><EFBFBD>.
|
||||
ShowMessage(DEAD_CONNECTION);
|
||||
Disconnect();
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE; // <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
}
|
||||
|
||||
VOID NFConnection::ShowMessage(INT MsgIndex)
|
||||
{
|
||||
switch(MsgIndex)
|
||||
{
|
||||
case ACCEPT_FAILED:
|
||||
LOG_ERROR((L"[%04d] AcceptEx(): SOCKET_ERROR, %d.", GetIndex(), WSAGetLastError()));
|
||||
break;
|
||||
case CLOSE_SOCKET:
|
||||
LOG_INFO((L"[%04d] <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.", GetIndex()));
|
||||
break;
|
||||
case DEAD_CONNECTION:
|
||||
LOG_ERROR((L"[%04d] Dead Connection.", GetIndex()));
|
||||
break;
|
||||
case CONNECT_SUCCESS:
|
||||
LOG_INFO((L"[%04d] <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.", GetIndex()));
|
||||
break;
|
||||
case CONNECT_FAILED:
|
||||
LOG_ERROR((L"[%04d] <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Check Sum <20><><EFBFBD><EFBFBD>).", GetIndex()));
|
||||
break;
|
||||
case DISPATCH_FAILED:
|
||||
LOG_ERROR((L"[%04d] Dispatch return FALSE.", GetIndex()));
|
||||
break;
|
||||
case DOIOSWITCH_FAILED:
|
||||
LOG_ERROR((L"[%04d] DoIo(..) - Switch Default.", GetIndex()));
|
||||
break;
|
||||
case ALLOCACPT_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareAcptPacket() acpt packet alloc failed.", GetIndex()));
|
||||
break;
|
||||
case PREPAREACPT_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareAcptPacket().newolp == NULL.", GetIndex()));
|
||||
break;
|
||||
case PREPARERECVSIZE_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareRecvPacket() srclen > m_nMaxPacketSize.", GetIndex()));
|
||||
break;
|
||||
case PREPARESENDSIZE_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareSendPacket() srclen > m_nMaxPacketSize.", GetIndex()));
|
||||
break;
|
||||
case ALLOCRECV_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareRecvPacket() recv packet alloc failed.", GetIndex()));
|
||||
break;
|
||||
case ALLOCSEND_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareSendPacket() send packet alloc failed.", GetIndex()));
|
||||
break;
|
||||
case PREPARERECV_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareRecvPacket().newolp == NULL.", GetIndex()));
|
||||
break;
|
||||
case PREPARESEND_FAILED:
|
||||
LOG_ERROR((L"[%04d] PrepareSendPacket().newolp == NULL.", GetIndex()));
|
||||
break;
|
||||
case RELEASEACPT_FAILED:
|
||||
LOG_ERROR((L"[%04d] ReleaseAcptPacket() free acpt packet failed.", GetIndex()));
|
||||
break;
|
||||
case RELEASERECV_FAILED:
|
||||
LOG_ERROR((L"[%04d] ReleaseRecvPacket() free recv packet failed.", GetIndex()));
|
||||
break;
|
||||
case RELEASESEND_FAILED:
|
||||
LOG_ERROR((L"[%04d] ReleaseSendPacket() free send packet failed.", GetIndex()));
|
||||
break;
|
||||
case BINDIOCP_FAILED:
|
||||
LOG_ERROR((L"[%04d] BindIOCP().lpOverlapPlus == NULL.", GetIndex()));
|
||||
break;
|
||||
case RECVPOST_FAILED:
|
||||
LOG_ERROR((L"[%04d] RecvPost() m_Socket == NULL or IsConnect() == FALSE.", GetIndex()));
|
||||
break;
|
||||
case RECVPOSTPENDING_FAILED:
|
||||
LOG_ERROR((L"[%04d] RecvPost().WSARecv() == SOCKET_ERROR, %d.", GetIndex(), WSAGetLastError()));
|
||||
break;
|
||||
// case ALLOCPROC_FAILED:
|
||||
// LOG_ERROR((L"[%04d] SendPost().AllocProcBuffer == NULL or SOCKET_ERROR, %d.", GetIndex(), WSAGetLastError()));
|
||||
// break;
|
||||
case SENDPOSTPENDING_FAILED:
|
||||
LOG_ERROR((L"[%04d] SendPost().WSASend() == SOCKET_ERROR, %d.", GetIndex(), WSAGetLastError()));
|
||||
break;
|
||||
case SENDPOST_FAILED:
|
||||
LOG_ERROR((L"[%04d] SendPost() == SOCKET_ERROR, %d.", GetIndex(), WSAGetLastError()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL NFConnection::DoIo( LPOVERLAPPEDPLUS lpOverlapPlus )
|
||||
{
|
||||
// <20>Ҵ<EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
switch(lpOverlapPlus->nConnState)
|
||||
{
|
||||
// ACCEPT<50><54><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
case ClientIoAccept:
|
||||
BindIOCP(lpOverlapPlus); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> IOCP <20><><EFBFBD>ε<EFBFBD> ó<><C3B3>
|
||||
|
||||
InterlockedIncrement((LONG*)&m_bIsConnect); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ON !!!
|
||||
|
||||
// <20>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ƴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(lpOverlapPlus->dwBytes && strncmp(lpOverlapPlus->wbuf.buf,CONNECT_CHECK_DATA,CONNECT_CHECK_SIZE) == 0)
|
||||
{
|
||||
ShowMessage(CONNECT_SUCCESS);
|
||||
SetConnectFlag(CONNECT_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMessage(CONNECT_FAILED);
|
||||
LOG_ERROR((L"[%04d] Check Sum : %d, %s.", GetIndex(), lpOverlapPlus->dwBytes, lpOverlapPlus->wbuf.buf));
|
||||
SetConnectFlag(CONNECT_FALSE);
|
||||
ReleaseAcptPacket( lpOverlapPlus );
|
||||
break;
|
||||
}
|
||||
|
||||
// Accept <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
if(!RecvPost())
|
||||
{
|
||||
SetClose_Open(lpOverlapPlus);
|
||||
break;
|
||||
}
|
||||
|
||||
// TICK ī<><C4AB>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
InterlockedExchange((LONG*)&m_uRecvTickCnt,timeGetTime());
|
||||
|
||||
ReleaseAcptPacket( lpOverlapPlus );
|
||||
break;
|
||||
|
||||
// RECEIVE <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
case ClientIoRead:
|
||||
// TICK ī<><C4AB>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
InterlockedExchange((LONG*)&m_uRecvTickCnt,timeGetTime());
|
||||
|
||||
// ó<><C3B3> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD>ٸ<EFBFBD>
|
||||
if(lpOverlapPlus->dwBytes == 0)
|
||||
{
|
||||
SetClose_Open(lpOverlapPlus, FALSE); // <20><><EFBFBD><EFBFBD>, <20><>ü <20>ٽ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
}
|
||||
else if((INT)lpOverlapPlus->dwBytes == SOCKET_ERROR) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
SetClose_Open(lpOverlapPlus, TRUE); // <20><><EFBFBD><EFBFBD>, <20><>ü <20>ٽ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
}
|
||||
else// <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>
|
||||
{
|
||||
// <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(!DispatchPacket(lpOverlapPlus))
|
||||
{
|
||||
ShowMessage(DISPATCH_FAILED);
|
||||
SetClose_Open( lpOverlapPlus, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Receive <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
ReleaseRecvPacket( lpOverlapPlus );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ClientIoWrite:
|
||||
ReleaseSendPacket( lpOverlapPlus );
|
||||
break;
|
||||
|
||||
default:
|
||||
ShowMessage(DOIOSWITCH_FAILED);
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LPOVERLAPPEDPLUS NFConnection::PrepareAcptPacket()
|
||||
{
|
||||
LPOVERLAPPEDPLUS newolp = NULL;
|
||||
|
||||
// get accept overlapped structure and packet buffer.
|
||||
if(m_pPacketPool->AllocAcptPacket(newolp) == FALSE)
|
||||
{
|
||||
ShowMessage(ALLOCACPT_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(!newolp)
|
||||
{
|
||||
ShowMessage(PREPAREACPT_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// clear buffer
|
||||
memset(&newolp->overlapped , NULL, sizeof(OVERLAPPED));
|
||||
memset(&newolp->wbuf.buf[0], NULL, sizeof(m_nMaxPacketSize));
|
||||
|
||||
// init olp structure
|
||||
newolp->sckListen = m_sckListener;
|
||||
newolp->sckClient = m_Socket;
|
||||
newolp->nConnState = ClientIoAccept;
|
||||
newolp->pClientConn = (PVOID)this;
|
||||
newolp->wbuf.len = CONNECT_CHECK_SIZE; // newolp->wbuf.len = MAXPACKETSIZE;
|
||||
// ** WARNING **
|
||||
// When you change your packet certfying correct connection,
|
||||
// you must change the size of definition 'CONNECT_CHECK_SIZE'.
|
||||
return newolp;
|
||||
}
|
||||
|
||||
LPOVERLAPPEDPLUS NFConnection::PrepareRecvPacket(UINT srclen)
|
||||
{
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(srclen > (UINT)m_nMaxPacketSize)
|
||||
{
|
||||
ShowMessage(PREPARERECVSIZE_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPOVERLAPPEDPLUS newolp = NULL;
|
||||
|
||||
// get recv overlapped structure and packet buffer.
|
||||
if( FALSE == m_pPacketPool->AllocRecvPacket(newolp) )
|
||||
{
|
||||
ShowMessage(ALLOCRECV_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(!newolp)
|
||||
{
|
||||
ShowMessage(PREPARERECV_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// clear buffer
|
||||
memset(&newolp->overlapped , NULL, sizeof(OVERLAPPED));
|
||||
memset(&newolp->wbuf.buf[0], NULL, sizeof(m_nMaxPacketSize));
|
||||
|
||||
// init olp structure
|
||||
newolp->sckListen = m_sckListener;
|
||||
newolp->sckClient = m_Socket;
|
||||
newolp->nConnState = ClientIoRead;
|
||||
newolp->pClientConn = (PVOID) this;
|
||||
|
||||
if(srclen == 0) newolp->wbuf.len = m_nMaxPacketSize;
|
||||
else newolp->wbuf.len = srclen;
|
||||
|
||||
return newolp;
|
||||
}
|
||||
|
||||
LPOVERLAPPEDPLUS NFConnection::PrepareSendPacket(CHAR *psrcbuf, UINT srclen)
|
||||
{
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(srclen < 0 || srclen > (UINT)m_nMaxPacketSize)
|
||||
{
|
||||
ShowMessage(PREPARESENDSIZE_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPOVERLAPPEDPLUS newolp = NULL;
|
||||
|
||||
// get recv overlapped structure and packet buffer.
|
||||
if( FALSE == m_pPacketPool->AllocSendPacket(newolp) )
|
||||
{
|
||||
ShowMessage(ALLOCSEND_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(!newolp)
|
||||
{
|
||||
ShowMessage(PREPARESEND_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// clear buffer
|
||||
memset(&newolp->overlapped , NULL, sizeof(OVERLAPPED));
|
||||
memset(&newolp->wbuf.buf[0], NULL, sizeof(m_nMaxPacketSize));
|
||||
|
||||
// init olp structure
|
||||
newolp->sckListen = m_sckListener;
|
||||
newolp->sckClient = m_Socket;
|
||||
newolp->nConnState = ClientIoWrite;
|
||||
newolp->pClientConn = (PVOID) this;
|
||||
newolp->wbuf.len = srclen;
|
||||
memcpy(newolp->wbuf.buf,psrcbuf,srclen);
|
||||
|
||||
return newolp;
|
||||
}
|
||||
|
||||
BOOL NFConnection::ReleaseAcptPacket(LPOVERLAPPEDPLUS olp)
|
||||
{
|
||||
if(NULL == olp) return FALSE;
|
||||
if(NULL == olp->wbuf.buf) return FALSE;
|
||||
|
||||
if(!m_pPacketPool->FreeAcptPacket(olp))
|
||||
{
|
||||
ShowMessage(RELEASEACPT_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::ReleaseRecvPacket(LPOVERLAPPEDPLUS olp)
|
||||
{
|
||||
if(olp == NULL) return FALSE;
|
||||
if(olp->wbuf.buf == NULL) return FALSE;
|
||||
|
||||
if(!m_pPacketPool->FreeRecvPacket(olp))
|
||||
{
|
||||
ShowMessage(RELEASERECV_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::ReleaseSendPacket(LPOVERLAPPEDPLUS olp)
|
||||
{
|
||||
if(olp == NULL) return FALSE;
|
||||
if(olp->wbuf.buf == NULL) return FALSE;
|
||||
|
||||
if(!m_pPacketPool->FreeSendPacket(olp))
|
||||
{
|
||||
ShowMessage(RELEASESEND_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::BindIOCP(LPOVERLAPPEDPLUS lpOverlapPlus)
|
||||
{
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(!lpOverlapPlus)
|
||||
{
|
||||
ShowMessage(BINDIOCP_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
INT locallen, remotelen;
|
||||
|
||||
sockaddr_in * plocal = 0,
|
||||
* premote = 0;
|
||||
|
||||
GetAcceptExSockaddrs(
|
||||
&(lpOverlapPlus->wbuf.buf[0]),
|
||||
m_nMaxBuf,
|
||||
sizeof(sockaddr_in) + 16,
|
||||
sizeof(sockaddr_in) + 16,
|
||||
(sockaddr **)&plocal, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
&locallen,
|
||||
(sockaddr **)&premote, // <20><><EFBFBD>ô<EFBFBD>
|
||||
&remotelen
|
||||
);
|
||||
|
||||
memcpy(&m_Local, plocal, sizeof(sockaddr_in));
|
||||
memcpy(&m_Peer, premote, sizeof(sockaddr_in));
|
||||
|
||||
if(CreateIoCompletionPort((HANDLE)lpOverlapPlus->sckClient,m_hIOCP,0,0) == 0) return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void NFConnection::SetClose_Open(LPOVERLAPPEDPLUS lpOverlapPlus, BOOL bForce)
|
||||
{
|
||||
if(m_eConnectFlag != CONNECT_NONE)
|
||||
{
|
||||
LOG_ERROR((L"NFConnection::SetClose_Open() m_eConnectFlag == %d", (int)m_eConnectFlag));
|
||||
}
|
||||
|
||||
// <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD> <20><>Ŷ <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(NULL != lpOverlapPlus)
|
||||
{
|
||||
if(NULL != lpOverlapPlus->wbuf.buf && NULL != m_pPacketPool)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
switch( lpOverlapPlus->nConnState)
|
||||
{
|
||||
case ClientIoAccept:
|
||||
ReleaseAcptPacket( lpOverlapPlus );
|
||||
break;
|
||||
|
||||
case ClientIoRead:
|
||||
ReleaseRecvPacket( lpOverlapPlus );
|
||||
break;
|
||||
|
||||
case ClientIoWrite:
|
||||
ReleaseSendPacket( lpOverlapPlus );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_bForce = bForce;
|
||||
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CLOSEOPEN_TRUE);
|
||||
|
||||
NFUpdateManager::GetInstance().Add(this, NULL);
|
||||
}
|
||||
|
||||
void NFConnection::SetConnectFlag(CONNECT_EVENT eState)
|
||||
{
|
||||
if(m_eConnectFlag != CONNECT_NONE)
|
||||
{
|
||||
LOG_ERROR((L"NFConnection::SetConnectFlag() m_eConnectFlag == %s", (int)m_eConnectFlag));
|
||||
}
|
||||
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,eState);
|
||||
|
||||
NFUpdateManager::GetInstance().Add(this, NULL);
|
||||
}
|
||||
|
||||
BOOL NFConnection::DispatchPacket(LPOVERLAPPEDPLUS lpOverlapPlus)
|
||||
{
|
||||
// Read<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RecvPost <20>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD> 1<><31> <20><EFBFBD><DFBB>ϴµ<CFB4> <20><><EFBFBD><EFBFBD>
|
||||
// Read<61>Ҷ<EFBFBD> RecvPost<73><74> 1<><31><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20>빮<EFBFBD><EBB9AE> <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD>Ƶ<EFBFBD>.DispatchPacket<65><74> 1<><31><EFBFBD><EFBFBD> <20>Ͼ<CFBE><EEB3AD>.
|
||||
|
||||
CHAR* psrcbuf = &( lpOverlapPlus->wbuf.buf[0] );
|
||||
INT srclen = lpOverlapPlus->dwBytes;
|
||||
|
||||
// Packet<65><74><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> [H 2byte][P size] <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
m_RecvIO.Append(psrcbuf, srclen);
|
||||
|
||||
m_RecvIO.Lock();
|
||||
|
||||
// IOCP<43><50> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷó<C5B6><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ɷ<EFBFBD><C9B7>̴<EFBFBD>
|
||||
// <20><EFBFBD><D7B7><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD> UpdateManaget<65><74> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> Update<74><65> ó<><C3B3><EFBFBD>ϸ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
// <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20>ٷ<EFBFBD> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> UpdateManager<65><72> Ŀ<><C4BF>Ʈ <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϴ°ɷ<C2B0> <20><><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.
|
||||
#ifdef ENABLE_UPDATEQUE
|
||||
if(m_RecvIO.GetPacket(&m_RecvPacket) == 1)
|
||||
{
|
||||
m_RecvPacket.DecryptPacket();
|
||||
|
||||
if(m_RecvPacket.IsAliveChecksum())
|
||||
NFUpdateManager::GetInstance().Add(this, &m_RecvPacket);
|
||||
|
||||
m_RecvPacket.Init();
|
||||
}
|
||||
else
|
||||
m_RecvIO.UnLock();
|
||||
#else
|
||||
// <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20>Ǹ<EFBFBD>
|
||||
// Dispatch<63><68> ũ<><C5A9>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>.
|
||||
if(m_RecvIO.GetPacket(&m_RecvPacket) == 1)
|
||||
{
|
||||
m_RecvPacket.DecryptPacket();
|
||||
|
||||
if(m_RecvPacket.IsAliveChecksum())
|
||||
{
|
||||
DispatchPacket(m_RecvPacket);
|
||||
}
|
||||
|
||||
m_RecvPacket.Init();
|
||||
}
|
||||
else
|
||||
m_RecvIO.UnLock();
|
||||
#endif
|
||||
|
||||
// <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD>ο<EFBFBD> recieve buffer<65><72> <20>غ<EFBFBD><D8BA>Ͽ<EFBFBD> Post<73>Ѵ<EFBFBD>.
|
||||
return RecvPost();
|
||||
}
|
||||
|
||||
VOID NFConnection::UpdatePacket(NaveNet::NFPacket& Packet)
|
||||
{
|
||||
if(Packet.GetCommand() != 0)
|
||||
{
|
||||
DispatchPacket(Packet);
|
||||
return;
|
||||
}
|
||||
|
||||
// Ŀ<>ؼ<EFBFBD><D8BC><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
if(m_eConnectFlag == CONNECT_NONE)
|
||||
return;
|
||||
|
||||
if(m_eConnectFlag == CONNECT_TRUE)
|
||||
{
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CONNECT_NONE);
|
||||
OnConnect(TRUE);
|
||||
}
|
||||
else if(m_eConnectFlag == CONNECT_FALSE)
|
||||
{
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CONNECT_NONE);
|
||||
OnConnect(FALSE);
|
||||
Close_Open();
|
||||
}
|
||||
else if(m_eConnectFlag == DISCONNECT_TURE)
|
||||
{
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CONNECT_NONE);
|
||||
Disconnect(FALSE);
|
||||
}
|
||||
else if(m_eConnectFlag == CLOSEOPEN_TRUE)
|
||||
{
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CONNECT_NONE);
|
||||
Close_Open(m_bForce);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL NFConnection::SendPost( CHAR* pPackte, INT Len )
|
||||
{
|
||||
if(!m_Socket) return FALSE;
|
||||
if(!IsConnect()) return FALSE;
|
||||
|
||||
if(m_Socket == NULL || IsConnect() == FALSE)
|
||||
{
|
||||
ShowMessage(SENDPOST_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// prepare recieve buffer
|
||||
LPOVERLAPPEDPLUS newolp = PrepareSendPacket(pPackte,Len);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20>Ҵ<DEBE><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(newolp == NULL) return FALSE;
|
||||
|
||||
INT ret = WSASend( newolp->sckClient,
|
||||
&newolp->wbuf,
|
||||
1,
|
||||
&newolp->dwBytes, // <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20>Ҵٸ<D2B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<>Ⱑ <20>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> iocp<63><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǹ̰<C7B9> <20><><EFBFBD><EFBFBD>.
|
||||
newolp->dwFlags,
|
||||
&newolp->overlapped, // Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
NULL );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
if(ret == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING)
|
||||
{
|
||||
ShowMessage(SENDPOSTPENDING_FAILED);
|
||||
ReleaseSendPacket(newolp);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::SendPost( NaveNet::NFPacket& Packet ) // <20><><EFBFBD><EFBFBD> Send ó<><C3B3>
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
Packet.EncryptPacket();
|
||||
|
||||
INT Len = Packet.m_Header.Size;
|
||||
CHAR* pPacket = (CHAR*)&Packet;
|
||||
return SendPost(pPacket, Len);
|
||||
}
|
||||
|
||||
BOOL NFConnection::RecvPost(UINT buflen)
|
||||
{
|
||||
if(m_Socket == NULL || IsConnect() == FALSE)
|
||||
{
|
||||
ShowMessage(RECVPOST_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// prepare recieve buffer
|
||||
LPOVERLAPPEDPLUS newolp = PrepareRecvPacket(buflen);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20>Ҵ<DEBE><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(newolp == NULL) return FALSE;
|
||||
|
||||
INT ret = WSARecv( newolp->sckClient,
|
||||
&newolp->wbuf,
|
||||
1,
|
||||
&newolp->dwBytes, // <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20>Ҵٸ<D2B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<>Ⱑ <20>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> iocp<63><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǹ̰<C7B9> <20><><EFBFBD><EFBFBD>.
|
||||
&newolp->dwFlags,
|
||||
&newolp->overlapped, // Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
NULL );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
if(ret == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING)
|
||||
{
|
||||
ShowMessage(RECVPOSTPENDING_FAILED);
|
||||
ReleaseRecvPacket(newolp);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::GetClientIP(INT *iIP)
|
||||
{
|
||||
if(iIP == NULL) return FALSE;
|
||||
|
||||
if(!IsConnect())
|
||||
{
|
||||
iIP[0] = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
iIP[0] = m_Peer.sin_addr.S_un.S_un_b.s_b1;
|
||||
iIP[1] = m_Peer.sin_addr.S_un.S_un_b.s_b2;
|
||||
iIP[2] = m_Peer.sin_addr.S_un.S_un_b.s_b3;
|
||||
iIP[3] = m_Peer.sin_addr.S_un.S_un_b.s_b4;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::GetClientIP(CHAR *szIP)
|
||||
{
|
||||
if(szIP == NULL) return FALSE;
|
||||
|
||||
if(!IsConnect())
|
||||
{
|
||||
szIP[0] = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
sprintf(szIP,"%d.%d.%d.%d",(INT)m_Peer.sin_addr.S_un.S_un_b.s_b1,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b2,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b3,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b4);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::GetClientIP(WCHAR *szIP)
|
||||
{
|
||||
if(szIP == NULL) return FALSE;
|
||||
|
||||
if(!IsConnect())
|
||||
{
|
||||
szIP[0] = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
swprintf(szIP, L"%d.%d.%d.%d",(INT)m_Peer.sin_addr.S_un.S_un_b.s_b1,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b2,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b3,
|
||||
(INT)m_Peer.sin_addr.S_un.S_un_b.s_b4);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFConnection::GetClientIP(sockaddr_in& addr)
|
||||
{
|
||||
if(!IsConnect())
|
||||
{
|
||||
memcpy(&addr,0,sizeof(sockaddr_in));
|
||||
return FALSE;
|
||||
}
|
||||
CopyMemory((CHAR*)&addr,(CHAR*)&m_Peer,sizeof(sockaddr_in));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID NFConnection::Disconnect(BOOL bForce)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE>
|
||||
if(!IsConnect())
|
||||
return;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
InterlockedExchange((LONG*)&m_eConnectFlag,CONNECT_NONE);
|
||||
InterlockedExchange((LONG*)&m_bIsConnect,FALSE);
|
||||
m_uRecvTickCnt = 0;
|
||||
m_bForce = FALSE;
|
||||
|
||||
// <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
if(m_Socket)
|
||||
{
|
||||
struct linger li = {0, 0}; // Default: SO_DONTLINGER
|
||||
shutdown(m_Socket, SD_BOTH );
|
||||
|
||||
// <20><><EFBFBD>Ͽ<EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִٸ<D6B4>,
|
||||
if(bForce) li.l_onoff = 1; // SO_LINGER, timeout = 0
|
||||
|
||||
// <20>ܿ<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
setsockopt(m_Socket, SOL_SOCKET, SO_LINGER, (CHAR *)&li, sizeof(li));
|
||||
closesocket(m_Socket); // <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD>
|
||||
m_Socket = NULL; // <20>ʱ<EFBFBD>ȭ
|
||||
|
||||
ShowMessage(CLOSE_SOCKET);
|
||||
}
|
||||
|
||||
OnDisconnect();
|
||||
|
||||
Clear();
|
||||
}
|
||||
|
||||
BOOL NFConnection::IsConnect()
|
||||
{
|
||||
BOOL bRet = m_bIsConnect;
|
||||
return bRet;
|
||||
}
|
||||
|
||||
LONG NFConnection::GetRecvTickCnt()
|
||||
{
|
||||
LONG lRecvTickCount = m_uRecvTickCnt;
|
||||
return lRecvTickCount;
|
||||
}
|
||||
}
|
||||
317
Server/NFAuthTool/NFAuthServer/NaveServer/NFConnection.h
Normal file
317
Server/NFAuthTool/NFAuthServer/NaveServer/NFConnection.h
Normal file
@@ -0,0 +1,317 @@
|
||||
/**
|
||||
* @file NFConnection.h
|
||||
* @brief <09>ϳ<EFBFBD><CFB3><EFBFBD> Connection<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ü<EFBFBD>̴<EFBFBD>.
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "NFMemPool.h"
|
||||
#include "NFPacketPool.h"
|
||||
#include <NaveNet/NFIOBuffer.h>
|
||||
#include <Nave/NFSync.h>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
|
||||
/**
|
||||
* @class NFConnection
|
||||
* @brief <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD>ü<EFBFBD><C3BC> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>.
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-08-28
|
||||
*/
|
||||
class NFConnection
|
||||
{
|
||||
public:
|
||||
NFConnection();
|
||||
virtual ~NFConnection();
|
||||
|
||||
public:
|
||||
// <20><> <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>ü <20>ʱ<EFBFBD>ȭ
|
||||
* @param dwIndex <09><>ü <20><><EFBFBD><EFBFBD> ID
|
||||
* @param hIOCP IOCP Handle
|
||||
* @param listener Listen Socket
|
||||
* @param pPacketPool <09><>Ŷ Pool <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param nMaxBuf <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL Create( DWORD dwIndex,
|
||||
HANDLE hIOCP,
|
||||
SOCKET listener,
|
||||
NFPacketPool* pPacketPool,
|
||||
INT nMaxBuf);
|
||||
|
||||
/**
|
||||
* @brief <09><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈó<C6AE><C3B3> <20>մϴ<D5B4>.
|
||||
* @param Packet <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual VOID UpdatePacket(NaveNet::NFPacket& Packet);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param bForce TRUE<55><45> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
VOID Disconnect( BOOL bForce = FALSE );
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
*/
|
||||
virtual VOID Clear() { return; };
|
||||
|
||||
/**
|
||||
* @brief <09><>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ʱ<EFBFBD>ȭ
|
||||
* @param bForce TRUE<55><45> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL Close_Open( BOOL bForce = FALSE );
|
||||
|
||||
/**
|
||||
* @brief IOCP ó<><C3B3> <20>ڵ鸵
|
||||
* @param lpOverlapPlus ó<><C3B3><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
* @return
|
||||
*/
|
||||
virtual BOOL DoIo( LPOVERLAPPEDPLUS lpOverlapPlus );
|
||||
|
||||
/**
|
||||
* @brief <09><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param pPackte <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param Len <20><><EFBFBD><EFBFBD> <20><>Ŷ ũ<><C5A9>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL SendPost( CHAR* pPackte, INT Len );
|
||||
|
||||
/**
|
||||
* @brief <09><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param Packet <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>ü
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL SendPost( NaveNet::NFPacket& Packet);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50><EFBFBD><EFBFBD>
|
||||
* @param iIP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4<><34> <20>迭
|
||||
* @return
|
||||
*/
|
||||
BOOL GetClientIP( INT* iIP );
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50><EFBFBD><EFBFBD>
|
||||
* @param szIP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return
|
||||
*/
|
||||
BOOL GetClientIP( CHAR* szIP );
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50><EFBFBD><EFBFBD>
|
||||
* @param szIP <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return
|
||||
*/
|
||||
BOOL GetClientIP( WCHAR* szIP );
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50><EFBFBD><EFBFBD>
|
||||
* @param addr sockaddr_in <20><><EFBFBD><EFBFBD>
|
||||
* @return
|
||||
*/
|
||||
BOOL GetClientIP( sockaddr_in& addr );
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD>ᰳü<E1B0B3><C3BC> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
* @param iIndex <20><><EFBFBD>ᰳü<E1B0B3><C3BC> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
*/
|
||||
inline VOID SetIndex(INT iIndex) { m_dwIndex = iIndex; };
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD>ᰳü<E1B0B3><C3BC> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
inline DWORD GetIndex() { return m_dwIndex; }
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> Tick <20><><EFBFBD><EFBFBD>
|
||||
* @return <20><><EFBFBD><EFBFBD> Tick ī<><C4AB>Ʈ
|
||||
*/
|
||||
LONG GetRecvTickCnt();
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> Ȱ<><C8B0>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return Ȱ<><C8B0>ȭ <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL IsConnect();
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
* @param eState <09><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void SetConnectFlag(CONNECT_EVENT eState);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> Overlapped<65><64>ü<EFBFBD><C3BC> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2> <20>ʱ<EFBFBD>ȭ <20><>ŵ<EFBFBD>ϴ<EFBFBD>.
|
||||
* @param lpOverlapPlus Overlapped <20><>ü
|
||||
* @param bForce TRUE<55><45> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void SetClose_Open(LPOVERLAPPEDPLUS lpOverlapPlus, BOOL bForce=FALSE );
|
||||
|
||||
//------------------------ <20><> <20><> <20><> <20><> -------------------------//
|
||||
protected:
|
||||
|
||||
/**
|
||||
* @brief <09><>ü <20>ʱ<EFBFBD>ȭ, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL Open();
|
||||
|
||||
/**
|
||||
* @brief Socket<65><74> IOCP <20><><EFBFBD>ε<EFBFBD> <20>۾<EFBFBD>
|
||||
* @param lpOverlapPlus <20><><EFBFBD>ε<EFBFBD> <20><>ų Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
* @return
|
||||
*/
|
||||
BOOL BindIOCP( LPOVERLAPPEDPLUS lpOverlapPlus );
|
||||
|
||||
/**
|
||||
* @brief Accept<70><74>Ŷ <20>Ҵ<EFBFBD>
|
||||
* @return <20>Ҵ<EFBFBD><D2B4><EFBFBD> Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
*/
|
||||
LPOVERLAPPEDPLUS PrepareAcptPacket();
|
||||
|
||||
/**
|
||||
* @brief IOCP<43><50> <20>̿<EFBFBD><CCBF><EFBFBD> Recv Overlapped <20><><EFBFBD><EFBFBD>
|
||||
* @param buflen <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
* @return <20>Ҵ<EFBFBD><D2B4><EFBFBD> Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
*/
|
||||
LPOVERLAPPEDPLUS PrepareRecvPacket(UINT buflen);
|
||||
|
||||
/**
|
||||
* @brief IOCP<43><50> <20>̿<EFBFBD><CCBF><EFBFBD> Send Overlapped <20><><EFBFBD><EFBFBD>
|
||||
* @param *psrcbuf <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param srclen <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
* @return <20>Ҵ<EFBFBD><D2B4><EFBFBD> Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
*/
|
||||
LPOVERLAPPEDPLUS PrepareSendPacket(CHAR *psrcbuf, UINT srclen);
|
||||
|
||||
/**
|
||||
* @brief Accept <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param lpOverlapPlus <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Overlapped<65><64><EFBFBD><EFBFBD>ü
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL ReleaseAcptPacket(LPOVERLAPPEDPLUS lpOverlapPlus);
|
||||
|
||||
/**
|
||||
* @brief Receive <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param lpOverlapPlus <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Overlapped<65><64><EFBFBD><EFBFBD>ü
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL ReleaseRecvPacket(LPOVERLAPPEDPLUS lpOverlapPlus);
|
||||
|
||||
/**
|
||||
* @brief Send <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param lpOverlapPlus <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Overlapped<65><64><EFBFBD><EFBFBD>ü
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL ReleaseSendPacket(LPOVERLAPPEDPLUS lpOverlapPlus);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> Receive ó<><C3B3>
|
||||
* @param buflen <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
BOOL RecvPost(UINT buflen=0);
|
||||
|
||||
/**
|
||||
* @brief <09>α<CEB1> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
* @param MsgIndex <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
*/
|
||||
virtual VOID ShowMessage(INT MsgIndex);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> Connect <20>̺<EFBFBD>Ʈ <20><EFBFBD>
|
||||
* @param bConnect Connect <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual VOID OnConnect(BOOL bConnect) { };
|
||||
|
||||
/// Disconnect <20>̺<EFBFBD>Ʈ <20><EFBFBD>
|
||||
virtual VOID OnDisconnect() { };
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
/**
|
||||
* @brief <09><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> Receive <20><>ȣ <20><EFBFBD>, Socket<65><74><EFBFBD><EFBFBD>
|
||||
* @param lpOverlapPlus Overlapped <20><><EFBFBD><EFBFBD>ü
|
||||
* @return Recv ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual BOOL DispatchPacket( LPOVERLAPPEDPLUS lpOverlapPlus );
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD><CEBA>̴<EFBFBD>
|
||||
* @param Packet ó<><C3B3><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>ü
|
||||
*/
|
||||
virtual VOID DispatchPacket( NaveNet::NFPacket& Packet )
|
||||
{
|
||||
// <20><><EFBFBD>ӹƼ<DEBE> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
//Nave::Sync::CSSync Live(&m_Sync);
|
||||
};
|
||||
|
||||
protected:
|
||||
/// <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INT m_nMaxBuf;
|
||||
|
||||
/// <20>ִ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INT m_nMaxPacketSize;
|
||||
|
||||
/// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SOCKET m_Socket;
|
||||
|
||||
/// Listener <20><><EFBFBD><EFBFBD>
|
||||
SOCKET m_sckListener;
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ü
|
||||
sockaddr_in m_Local;
|
||||
|
||||
/// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ü
|
||||
sockaddr_in m_Peer;
|
||||
|
||||
/// <20><> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><>ȣ
|
||||
INT m_dwIndex;
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
INT m_nBytesSent;
|
||||
|
||||
/// IOCP <20>ڵ<EFBFBD>
|
||||
HANDLE m_hIOCP;
|
||||
|
||||
//<2F><> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IOCP<43><50><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Socket<65><74> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// <20><>ŶǮ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NFPacketPool* m_pPacketPool;
|
||||
|
||||
/// <20><> <20><>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
BOOL m_bIsConnect;
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> Tick Count
|
||||
LONG m_uRecvTickCnt;
|
||||
|
||||
/// Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CONNECT_EVENT m_eConnectFlag;
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
BOOL m_bForce;
|
||||
|
||||
/// Sync <20><>ü
|
||||
Nave::NFSync m_Lock;
|
||||
|
||||
// checksum ó<><C3B3> /////////////////////////////////////////////
|
||||
// CPacketIOBuffer<65><72> Recv<63><76><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>(<28>̶<EFBFBD> <20><>ŶǮ<C5B6><C7AE> <20><><EFBFBD>ۿ<EFBFBD> <20>ִ<EFBFBD>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> IOBuffer <20>̴<EFBFBD>.
|
||||
// IOBuffer<65><72> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Recv <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ƴҶ<C6B4> ó<><C3B3><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
|
||||
/// Recv<63><76> IOBuffer
|
||||
NaveNet::NFPacketIOBuffer m_RecvIO;
|
||||
|
||||
// CPacket<65><74> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IOBuffer <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
// Packet<65><74><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD>۰<EFBFBD> <20>迭<EFBFBD><E8BFAD> <20><><EFBFBD>ǵǾ<C7B5> <20>ִ<EFBFBD>. (memcpy<70><79> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ε尡 <20><EFBFBD><DFBB>Ѵ<EFBFBD>.)
|
||||
/// Recv<63><76> <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ӽ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
NaveNet::NFPacket m_RecvPacket;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
#include "Global.h"
|
||||
#include "NFConnectionManager.h"
|
||||
#include <Nave/NFLog.h>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
NFConnectionManager::NFConnectionManager(VOID) : m_iCount(0), m_iMaxCount(0)
|
||||
{
|
||||
m_vecConn.clear();
|
||||
}
|
||||
|
||||
NFConnectionManager::~NFConnectionManager(VOID)
|
||||
{
|
||||
m_vecConn.clear();
|
||||
}
|
||||
|
||||
VOID NFConnectionManager::Init(INT iMaxCount)
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
m_iCount = 0;
|
||||
m_iMaxCount = iMaxCount;
|
||||
m_vecConn.reserve(iMaxCount);
|
||||
for(INT i = 0; i < m_iMaxCount; ++i)
|
||||
{
|
||||
m_vecConn.push_back(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
VOID NFConnectionManager::SendPostAll( CHAR* pPackte, INT Len ) // <20><><EFBFBD><EFBFBD> Send ó<><C3B3>
|
||||
{
|
||||
for(INT i = 0; i < m_iMaxCount; ++i)
|
||||
{
|
||||
if(!m_vecConn[i])
|
||||
continue;
|
||||
|
||||
m_vecConn[i]->SendPost(pPackte, Len);
|
||||
}
|
||||
}
|
||||
|
||||
VOID NFConnectionManager::SendPostAll( NaveNet::NFPacket& Packet)
|
||||
{
|
||||
Packet.EncryptPacket();
|
||||
|
||||
INT Len = Packet.m_Header.Size;
|
||||
CHAR* pPacket = (CHAR*)&Packet;
|
||||
|
||||
SendPostAll(pPacket, Len);
|
||||
}
|
||||
|
||||
|
||||
VOID NFConnectionManager::Draw()
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
INT Count = 0;
|
||||
for(INT i = 0; i < m_iMaxCount; ++i)
|
||||
{
|
||||
if(m_vecConn[i])
|
||||
Count++;
|
||||
}
|
||||
|
||||
LOG_ERROR((L"Leave <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Count : %d", Count));
|
||||
}
|
||||
|
||||
// Connect, Disconnect <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>.
|
||||
VOID NFConnectionManager::Join(NFConnection* pUser)
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
if(!pUser)
|
||||
return;
|
||||
|
||||
INT iIndex = pUser->GetIndex();
|
||||
if(m_vecConn[iIndex] == NULL)
|
||||
{
|
||||
m_vecConn[iIndex] = pUser;
|
||||
++m_iCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR((L"[%04d] <20>ߺ<EFBFBD> Joinȣ<6E><C8A3>", iIndex));
|
||||
}
|
||||
}
|
||||
|
||||
VOID NFConnectionManager::Levae(INT iIndex)
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
if(m_vecConn[iIndex])
|
||||
{
|
||||
--m_iCount;
|
||||
m_vecConn[iIndex] = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR((L"[%04d] <20>ߺ<EFBFBD> Leaveȣ<65><C8A3> Socket : %d", iIndex, WSAGetLastError()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* @file NFConnectionManager.h
|
||||
* @brief Connection<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <Nave/NFSync.h>
|
||||
#include <vector>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
/**
|
||||
* @class NFConnectionManager
|
||||
* @brief Ư<><C6AF><EFBFBD><EFBFBD> Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> <20><>ü <20><><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-08-28
|
||||
*/
|
||||
class NFConnectionManager
|
||||
{
|
||||
public:
|
||||
NFConnectionManager(VOID);
|
||||
~NFConnectionManager(VOID);
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief <09><EFBFBD><DEB4><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
* @param iMaxCount <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
VOID Init(INT iMaxCount);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͻ<EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
* @param pUser <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᰴü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
VOID Join(NFConnection* pUser);
|
||||
|
||||
/**
|
||||
* @brief <09>ش<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* @param iIndex <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
*/
|
||||
VOID Levae(INT iIndex);
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>ᰴü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
INT GetCount() { return m_iCount; }
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ᰴü <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @return <20>ִ<EFBFBD> <20><><EFBFBD>ᰴü <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
INT GetMaxCount() { return m_iMaxCount; }
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ᰴü<E1B0B4><C3BC> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* @param pPackte <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
* @param Len <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
virtual VOID SendPostAll( CHAR* pPackte, INT Len );
|
||||
|
||||
/**
|
||||
* @brief <09><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ᰴü<E1B0B4><C3BC> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* @param Packet <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>ü
|
||||
*/
|
||||
virtual VOID SendPostAll( NaveNet::NFPacket& Packet);
|
||||
|
||||
VOID Draw();
|
||||
|
||||
private:
|
||||
/// <20><><EFBFBD>ᰴü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
std::vector<NFConnection*> m_vecConn;
|
||||
typedef std::vector<NFConnection*>::iterator iterConn;
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>ᰴü<E1B0B4><C3BC> <20><><EFBFBD><EFBFBD>
|
||||
INT m_iCount;
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>ᰴü<E1B0B4><C3BC> <20><><EFBFBD><EFBFBD>
|
||||
INT m_iMaxCount;
|
||||
|
||||
/// Sync <20><>ü
|
||||
Nave::NFSync m_Lock;
|
||||
};
|
||||
|
||||
}
|
||||
50
Server/NFAuthTool/NFAuthServer/NaveServer/NFDBComponent.cpp
Normal file
50
Server/NFAuthTool/NFAuthServer/NaveServer/NFDBComponent.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#include <stdio.h>
|
||||
#include "NFDBComponent.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
NFDBComponent::NFDBComponent(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
NFDBComponent::~NFDBComponent()
|
||||
{
|
||||
}
|
||||
|
||||
bool NFDBComponent::Connect(LPCWSTR szDBServerName, LPCWSTR szDBName,
|
||||
LPCWSTR szDBAccount, LPCWSTR szDBPass,
|
||||
NFOleDB::ConnType connType)
|
||||
{
|
||||
swprintf(m_LastMessage, L"DB<EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>մϴ<D5B4> : %s, DB : %s, Account : %s, Password : %s", szDBServerName, szDBName, szDBAccount, szDBPass);
|
||||
|
||||
if (!ConnectSQLServer(szDBServerName, szDBName, szDBAccount, szDBPass, connType))
|
||||
{
|
||||
swprintf(m_LastMessage, L"DB Connect failed : %s", GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool NFDBComponent::Select(const WCHAR *Query_In, void** lpLoginTable_Out,
|
||||
int Size_In, int StartNum_In, int RowNum_In, int *GetRowNum_Out)
|
||||
{
|
||||
if (StartNum_In == 0 && !ExecuteQuery(Query_In))
|
||||
{
|
||||
swprintf(m_LastMessage, L"Execute DB Query failed : %s", GetErrorString());
|
||||
}
|
||||
else if (!GetData((void **)lpLoginTable_Out, Size_In, RowNum_In, GetRowNum_Out))
|
||||
{
|
||||
swprintf(m_LastMessage, L"Get DBdata failed : %s", GetErrorString());
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
51
Server/NFAuthTool/NFAuthServer/NaveServer/NFDBComponent.h
Normal file
51
Server/NFAuthTool/NFAuthServer/NaveServer/NFDBComponent.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* @file NFDBComponent.h
|
||||
* @brief OLE DB<44><42> <20>̿<EFBFBD><CCBF><EFBFBD> DB <20><><EFBFBD>۳<EFBFBD>Ʈ
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "NFOLEDB.h"
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> OLEDB<44><42> nchar <20><> nvarchar<61><72> 2byte <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD>.
|
||||
namespace NaveServer {
|
||||
|
||||
/**
|
||||
* @class
|
||||
* @brief
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class NFDBComponent : public NFOleDB
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
MAX_QUERY_LENGTH = 4096,
|
||||
QUERY_BUFFER_LEN = 1024
|
||||
};
|
||||
|
||||
NFDBComponent();
|
||||
virtual ~NFDBComponent();
|
||||
|
||||
bool Connect(LPCWSTR szDBServerName, LPCWSTR szDBName,
|
||||
LPCWSTR szDBAccount, LPCWSTR szDBPass,
|
||||
NFOleDB::ConnType connType = NFOleDB::ConnType_MSSQL);
|
||||
|
||||
bool Select(const WCHAR *Query_In, void** lpLoginTable_Out, int Size_In,
|
||||
int StartNum_In, int RowNum_In, int *GetRowNum_Out);
|
||||
|
||||
WCHAR* GetQueryBuffer() { return m_Query; }
|
||||
|
||||
const int GetQueryBufferLen() { return MAX_QUERY_LENGTH; }
|
||||
|
||||
private:
|
||||
WCHAR m_Query[MAX_QUERY_LENGTH];
|
||||
};
|
||||
|
||||
}
|
||||
100
Server/NFAuthTool/NFAuthServer/NaveServer/NFDefine.h
Normal file
100
Server/NFAuthTool/NFAuthServer/NaveServer/NFDefine.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* @file NFDefine.h
|
||||
* @brief Packet<65><74> <20><><EFBFBD>õ<EFBFBD> <20>⺻ Define <20><> <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
// <20><>Ŷ ó<><C3B3><EFBFBD><EFBFBD> UpdateQue<75><65> <20>̿<EFBFBD><CCBF><EFBFBD> ó<><C3B3><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Define
|
||||
// <20>̰<EFBFBD> Ȱ<><C8B0>ȭ <20><>Ű<EFBFBD><C5B0> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>Ҷ<EFBFBD> Receive<76><65><EFBFBD><EFBFBD><EFBFBD>尡 <20>ƴ<EFBFBD>
|
||||
// Process<73><73><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||
|
||||
// UPDATEQUE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Work<72><6B><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> Packet<65><74> <20>ϼ<EFBFBD><CFBC>Ǹ<EFBFBD> PacketQue<75><65> <20>̿<EFBFBD><CCBF><EFBFBD>
|
||||
// <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>. (MMO<4D>ÿ<EFBFBD> <20>ʿ<EFBFBD>)
|
||||
#define ENABLE_UPDATEQUE
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// [1] User Define
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#define DEF_MAXUSER 50 // Maximum connections for Test
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// [2] Server Declarations
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#define IOCP_SHUTDOWN ((DWORD) -1L) // Closing Server Message
|
||||
#define DEF_SERVER_PORT 25000 // PORT Number ( Client<6E><74> <20><><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE><EFBFBD> )
|
||||
|
||||
enum ESHOW_MSGTYPE
|
||||
{
|
||||
ACCEPT_FAILED,
|
||||
CLOSE_SOCKET,
|
||||
DEAD_CONNECTION,
|
||||
CONNECT_SUCCESS,
|
||||
CONNECT_FAILED,
|
||||
DISPATCH_FAILED,
|
||||
DOIOSWITCH_FAILED,
|
||||
// accept
|
||||
ALLOCACPT_FAILED,
|
||||
PREPAREACPT_FAILED,
|
||||
|
||||
// send, recv
|
||||
PREPARERECVSIZE_FAILED,
|
||||
PREPARESENDSIZE_FAILED,
|
||||
|
||||
ALLOCRECV_FAILED,
|
||||
ALLOCSEND_FAILED,
|
||||
|
||||
PREPARERECV_FAILED,
|
||||
PREPARESEND_FAILED,
|
||||
|
||||
RELEASEACPT_FAILED,
|
||||
RELEASERECV_FAILED,
|
||||
RELEASESEND_FAILED,
|
||||
|
||||
BINDIOCP_FAILED,
|
||||
|
||||
RECVPOST_FAILED,
|
||||
RECVPOSTPENDING_FAILED,
|
||||
|
||||
// ALLOCPROC_FAILED,
|
||||
SENDPOST_FAILED,
|
||||
SENDPOSTPENDING_FAILED,
|
||||
};
|
||||
|
||||
enum CONNECT_EVENT
|
||||
{
|
||||
CONNECT_NONE,
|
||||
CONNECT_TRUE,
|
||||
CONNECT_FALSE,
|
||||
DISCONNECT_TURE,
|
||||
CLOSEOPEN_TRUE,
|
||||
};
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>۵<EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>
|
||||
typedef enum CONN_STATUS
|
||||
{
|
||||
ClientIoUnknown, /// Raw status
|
||||
ClientIoAccept, /// accept status
|
||||
ClientIoRead, /// read status
|
||||
ClientIoWrite, /// write status
|
||||
}*pCONN_STATUS;
|
||||
|
||||
/// Ȯ<><C8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü : IOCPó<50><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct OVERLAPPEDPLUS {
|
||||
OVERLAPPED overlapped; /// OVERLAPPED struct
|
||||
SOCKET sckListen; /// listen socket handle
|
||||
SOCKET sckClient; /// send/recv socket handle
|
||||
CONN_STATUS nConnState; /// operation flag
|
||||
WSABUF wbuf; /// WSA buffer
|
||||
DWORD dwRemain; ///
|
||||
DWORD dwBytes; /// Processing Data Size
|
||||
DWORD dwFlags; ///
|
||||
PVOID pClientConn; /// Processing Client
|
||||
}*LPOVERLAPPEDPLUS;
|
||||
|
||||
}
|
||||
243
Server/NFAuthTool/NFAuthServer/NaveServer/NFMemPool.h
Normal file
243
Server/NFAuthTool/NFAuthServer/NaveServer/NFMemPool.h
Normal file
@@ -0,0 +1,243 @@
|
||||
/**
|
||||
* @file NFMemPool.h
|
||||
* @brief Packet Memory <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <Nave/NFSync.h>
|
||||
#include <Nave/NFLog.h>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
#pragma pack(push, struct_packing_before)
|
||||
#pragma pack(1)
|
||||
|
||||
/**
|
||||
* @class NFMemPool
|
||||
* @brief IOCP<43><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB8><EFBFBD>Pool Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-08-28
|
||||
*/
|
||||
template <class TYPE>
|
||||
class NFMemPool
|
||||
{
|
||||
public:
|
||||
/// <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Է<EFBFBD>
|
||||
NFMemPool(INT nTotalCnt, INT nAllocBufferSize=0);
|
||||
/// <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
~NFMemPool();
|
||||
|
||||
/**
|
||||
* @brief <09>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
* @param strLogTitle <20>α<EFBFBD><CEB1><EFBFBD> <20≯<EFBFBD>
|
||||
*/
|
||||
VOID SetLogTitle(WCHAR* strLogTitle)
|
||||
{
|
||||
wcscpy(m_strLogTitle, strLogTitle);
|
||||
}
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
INT GetCount();
|
||||
/// <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>Ŷ <20><>
|
||||
INT GetEmpty();
|
||||
/// <20><><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
INT GetIndex( TYPE *ptr );
|
||||
|
||||
/// <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><> <20><>Ŷ <20><>ȯ
|
||||
TYPE* Alloc();
|
||||
/// <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><DEB8> <20><><EFBFBD><EFBFBD>
|
||||
BOOL Free( TYPE *ptr );
|
||||
|
||||
private:
|
||||
/// INDEX Structure
|
||||
struct INDEX
|
||||
{
|
||||
/// <20><><EFBFBD><EFBFBD> Index <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INDEX* pNext;
|
||||
/// <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><>ȣ
|
||||
INT nIndex;
|
||||
|
||||
/// Structure constructure
|
||||
INDEX(){
|
||||
pNext = NULL;
|
||||
nIndex = 0;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
/// <20><><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
INT m_nCount;
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><>Ŷ <20><>
|
||||
INT m_nTotalCnt;
|
||||
/// <20><> <20><>Ŷ<EFBFBD><C5B6> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INT m_nAllocBufferSize;
|
||||
/// <20><> <20><>Ŷ<EFBFBD><C5B6> <20><>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INT m_nPerPacketSize;
|
||||
|
||||
/// <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
WCHAR m_strLogTitle[32];
|
||||
/// <20><>ü <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PVOID m_pPakets;
|
||||
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> ó<><C3B3> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
INDEX* m_pFreeRoom;
|
||||
|
||||
Nave::NFSync m_Sync;
|
||||
};
|
||||
#pragma pack( pop, struct_packing_before )
|
||||
|
||||
|
||||
template <class TYPE>
|
||||
NFMemPool<TYPE>::NFMemPool( INT nTotalCnt, INT nAllocBufferSize )
|
||||
{
|
||||
assert( nTotalCnt > 0 );
|
||||
|
||||
m_nCount = 0;
|
||||
m_pFreeRoom = NULL;
|
||||
m_pPakets = NULL;
|
||||
|
||||
m_nTotalCnt = nTotalCnt; // MAXUSER * 2
|
||||
m_nAllocBufferSize = nAllocBufferSize; // 1024 + 64
|
||||
m_nPerPacketSize = sizeof(INDEX) + sizeof(TYPE) + m_nAllocBufferSize;
|
||||
|
||||
m_pPakets = VirtualAlloc( NULL,
|
||||
m_nTotalCnt * m_nPerPacketSize,
|
||||
MEM_RESERVE | MEM_COMMIT, // reserve and commit
|
||||
PAGE_READWRITE );
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
// < <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > //
|
||||
// //
|
||||
// ----------------------------------------------- //
|
||||
// | INDEX | TYPE | m_nExBlockSize | //
|
||||
// ----------------------------------------------- //
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
assert( m_pPakets );
|
||||
INDEX* pIndex = (INDEX*) m_pPakets;
|
||||
assert( pIndex );
|
||||
|
||||
//////////////////////////////////////////
|
||||
// init linear linked list for buffer pool
|
||||
|
||||
// <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pIndex = (INDEX*) ((DWORD)pIndex + (m_nTotalCnt - 1) * m_nPerPacketSize);
|
||||
|
||||
// <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Linked List<73><74> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
for( INT i = m_nTotalCnt-1; i >= 0; i-- )
|
||||
{
|
||||
pIndex->pNext = m_pFreeRoom; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pNext = NULL<4C>̴<EFBFBD>
|
||||
pIndex->nIndex = i; // INDEX <20>۾<EFBFBD>
|
||||
|
||||
m_pFreeRoom = pIndex; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
#ifdef _DEBUG
|
||||
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ExBlockSize<7A><65> <20>κп<CEBA> <20><><EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD>
|
||||
if( m_nAllocBufferSize )
|
||||
memset((PVOID)( (DWORD)pIndex+sizeof(INDEX)+sizeof(TYPE)),
|
||||
(i%10+'0'),
|
||||
m_nAllocBufferSize );
|
||||
#endif
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> C8List <20><><EFBFBD><EFBFBD>Ʈ <20>̵<EFBFBD>
|
||||
pIndex = (INDEX*)((DWORD)pIndex - m_nPerPacketSize);
|
||||
}
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
NFMemPool<TYPE>::~NFMemPool()
|
||||
{
|
||||
if(NULL != m_pPakets) VirtualFree( m_pPakets, 0, MEM_RELEASE );
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
TYPE* NFMemPool<TYPE>::Alloc()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
INDEX* pIndex = NULL;
|
||||
TYPE* pType = NULL;
|
||||
|
||||
Nave::NFSyncLock CL(&m_Sync);
|
||||
|
||||
pIndex = m_pFreeRoom;
|
||||
if( pIndex != NULL )
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
m_pFreeRoom = m_pFreeRoom->pNext;
|
||||
m_nCount++; // ī<><C4AB>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD>ø<EFBFBD> Ÿ<><C5B8> <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
||||
pType = (TYPE*)(pIndex+1);
|
||||
|
||||
///////////////////////////////////////////
|
||||
// ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||
// assert( m_nCount > 0 ); // make sure we don't overflow
|
||||
if(m_nCount > m_nTotalCnt)
|
||||
{
|
||||
LOG_ERROR((L"[%s] MemPool Alloc Overflow Count(%d) >= %d", m_strLogTitle, m_nCount, m_nTotalCnt));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
LOG_ERROR((L"[%s] MemPool Alloc m_pFreeRoom = NULL, Count(%d)", m_strLogTitle, m_nCount));
|
||||
|
||||
return pType; // <20><><EFBFBD>ø<EFBFBD> Ÿ<><C5B8> <20><>ȯ
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
BOOL NFMemPool<TYPE>::Free( TYPE *ptr )
|
||||
{
|
||||
Nave::NFSyncLock CL(&m_Sync);
|
||||
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
INDEX* pIndex = ((INDEX*)(ptr))-1; // <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ִٸ<D6B4>
|
||||
if( m_nCount > 0 )
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ƾ
|
||||
pIndex->pNext = m_pFreeRoom;
|
||||
m_pFreeRoom = pIndex;
|
||||
m_nCount--; // <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> 1 <20><><EFBFBD><EFBFBD>
|
||||
bRet = TRUE; // <20><><EFBFBD><EFBFBD> ó<><C3B3> <20>˸<EFBFBD>
|
||||
}
|
||||
else
|
||||
LOG_ERROR((L"[%s] MemPool Free Faild Count(%d) <= 0", m_strLogTitle, m_nCount));
|
||||
|
||||
return bRet; // <20><><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><>ȯ
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
INT NFMemPool<TYPE>::GetCount()
|
||||
{
|
||||
Nave::NFSyncLock CL(&m_Sync);
|
||||
|
||||
INT nRet = m_nCount; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
return nRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
INT NFMemPool<TYPE>::GetEmpty()
|
||||
{
|
||||
Nave::NFSyncLock CL(&m_Sync);
|
||||
|
||||
INT nRet = m_nTotalCnt - m_nCount; // <20><><EFBFBD><EFBFBD>
|
||||
return nRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
template <class TYPE>
|
||||
INT NFMemPool<TYPE>::GetIndex( TYPE *ptr )
|
||||
{
|
||||
Nave::NFSyncLock CL(&m_Sync);
|
||||
|
||||
INT nRet = 0; // <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
INDEX* pIndex = ((INDEX*)(ptr))-1; // <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
nRet = pIndex->nIndex; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
return nRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
}
|
||||
1520
Server/NFAuthTool/NFAuthServer/NaveServer/NFOLEDB.cpp
Normal file
1520
Server/NFAuthTool/NFAuthServer/NaveServer/NFOLEDB.cpp
Normal file
File diff suppressed because it is too large
Load Diff
216
Server/NFAuthTool/NFAuthServer/NaveServer/NFOLEDB.h
Normal file
216
Server/NFAuthTool/NFAuthServer/NaveServer/NFOLEDB.h
Normal file
@@ -0,0 +1,216 @@
|
||||
/**
|
||||
* @file NFOLEDB.h
|
||||
* @brief OLD DB <20><>ü
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <oledb.h>
|
||||
#include <oledberr.h>
|
||||
|
||||
//#define _CHECK_OLEDB_PERFORMANCE // DB <20><><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD> üũ
|
||||
#ifdef _CHECK_OLEDB_PERFORMANCE
|
||||
#define DB_PERFORMANCE_CHECK(x) x
|
||||
#else
|
||||
#define DB_PERFORMANCE_CHECK(x) (void*)0;
|
||||
#endif
|
||||
|
||||
/*
|
||||
SQL Server Data Type ADO Data Type SQLOLEDB data type
|
||||
bigint adBigInt DBTYPE_I8
|
||||
binary adBinary DBTYPE_BYTES
|
||||
bit adBoolean DBTYPE_BOOL
|
||||
char adChar DBTYPE_STR
|
||||
datetime adDBTimeStamp DBTYPE_DBTIMESTAMP
|
||||
decimal adNumeric DBTYPE_NUMERIC
|
||||
float adDouble DBTYPE_R8
|
||||
image adVarbinary DBTYPE_BYTES
|
||||
int adInteger DBTYPE_I4
|
||||
money adCurrency DBTYPE_CY
|
||||
nchar adWChar DBTYPE_WSTR
|
||||
ntext adWChar DBTYPE_WSTR
|
||||
numeric adNumeric DBTYPE_NUMERIC
|
||||
nvarchar adWChar DBTYPE_WSTR
|
||||
real adSingle DBTYPE_R4
|
||||
smalldatetime adTimeStamp DBTYPE_DBTIMESTAMP
|
||||
smallint adSmallInt DBTYPE_I2
|
||||
smallmoney adCurrency DBTYPE_CY
|
||||
sql_variant adVariant DBTYPE_VARIANT, DBTYPE_SQLVARIANT*
|
||||
sysname adWChar DBTYPE_WSTR
|
||||
text adChar DBTYPE_STR
|
||||
timestamp adBinary DBTYPE_BYTES
|
||||
tinyint adVarbinary DBTYPE_UI1
|
||||
uniqueidentifier adGUID DBTYPE_GUID
|
||||
varbinary adVarBinary DBTYPE_BYTES
|
||||
varchar adChar DBTYPE_STR
|
||||
|
||||
<EFBFBD>з<EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <09><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Bit O <20>Ǵ<EFBFBD> 1 bit
|
||||
Int -2,147,483,648 ~ 2,147,483,647 4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Smallint -32,768 ~ 32,767 2 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Tinyint 0 ~ 255 1 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Bigint -2^63 ~ 2^63-1 8 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
<EFBFBD>ε<EFBFBD><EFBFBD>Ҽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
Float[n] -1.79E+308 ~ 1.79E+308
|
||||
n = 1~24 4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Float[n] -1.79E+308 ~ 1.79E+308
|
||||
n = 25~53 8 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
Real -3.40E + 38 ~ 3.40E + 38 4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char[n] n = 1~8000 n <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Varchar[n] n = 1~8000 <09>Է<EFBFBD><D4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Text <09>ִ<EFBFBD> 2,147,483,647<34><37><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Nchar n = 1~4000 n*2 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
nvarchar n = 1~4000 <09>Է<EFBFBD><D4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>*2 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Ntext <09>ִ<EFBFBD> 1,073,741,823<32><33><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
binary n = 1~8000 n+4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
varbinary n = 1~8000 <09>Է<EFBFBD><D4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>+4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
Image <09>ִ<EFBFBD> 2,147,483,647<34><37><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD>¥<EFBFBD>ͽð<EFBFBD>
|
||||
datetime 1753/1/1~9999/12/31 8 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
smalldatetime 1900/1/1~2079/6/6 4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
ȭ<EFBFBD><EFBFBD>
|
||||
money -922,337,203,685,477.5808~
|
||||
+922,337,203,685,477.5807 8 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
smallmoney -214,748.3648~214,748.3647 4 <20><><EFBFBD><EFBFBD>Ʈ
|
||||
*/
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
/**
|
||||
* @class NFOleDB
|
||||
* @brief NFOleDB<44><42> <20>̿<EFBFBD><CCBF><EFBFBD> Database<73><65> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
* @remarks
|
||||
*
|
||||
* @todo <20><><EFBFBD><EFBFBD> nchar<61><72> nvarchar <20><> 2byte <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
* <20>̺κ<CCBA><CEBA><EFBFBD> <20><EFBFBD>Ʈ <20>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>. 2byte <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ھտ<DABE> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4> <20>ִµ<D6B4> <20>̰Ŷ<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>谡 <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class NFOleDB
|
||||
{
|
||||
public:
|
||||
const static unsigned long MaxRowNum = 2000; /// <20>ִ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
const static unsigned long MaxErrorLen = 512; /// <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const static unsigned long MaxQueryTextLen = 8192; /// <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
public:
|
||||
/// DBConnect Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
enum ConnType
|
||||
{
|
||||
ConnType_ODBC = 0,
|
||||
ConnType_MSSQL = 1,
|
||||
ConnType_ORACLE
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD>
|
||||
enum Rowset
|
||||
{
|
||||
Rowset_Get = 0,
|
||||
Rowset_Update = 1
|
||||
};
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
typedef struct PARAM_INFO
|
||||
{
|
||||
const static unsigned short MaxColNum = 30; /// <20>ִ<EFBFBD> <20>÷<EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long ColNum; /// <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DBPARAMIO eParamIO[MaxColNum]; /// <20>÷<EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
unsigned long ColSize[MaxColNum]; /// <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned short ColType[MaxColNum]; /// <20>÷<EFBFBD> Ÿ<><C5B8>
|
||||
}*LPPARAM_INFO;
|
||||
|
||||
/// <20><><EFBFBD>̳ʸ<CCB3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
typedef struct SET_BINARY
|
||||
{
|
||||
unsigned long Size;
|
||||
}*LPSET_BINARY;
|
||||
|
||||
/// <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.)
|
||||
typedef struct COL_INFO
|
||||
{
|
||||
const static unsigned short MaxColNameLen = 100; /// <20>ִ<EFBFBD> <20>÷<EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
char ColName[MaxColNameLen]; /// <20>÷<EFBFBD> <20≯<EFBFBD>
|
||||
unsigned long ColSize; /// <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}*LPCOL_INFO;
|
||||
|
||||
public:
|
||||
NFOleDB(void);
|
||||
virtual ~NFOleDB(void);
|
||||
|
||||
inline LPCWSTR GetErrorString(void) const { return m_ErrorString; }
|
||||
inline LPCWSTR GetLastMessage(void) const { return m_LastMessage; }
|
||||
inline HRESULT GetLastError(void) const { return m_dwLastError; }
|
||||
|
||||
bool ConnectDataSourcePrompt(HWND hWnd_In);
|
||||
bool ConnectSQLServer(LPCWSTR ServerName_In, LPCWSTR DataBaseName_In, LPCWSTR UserID_In, LPCWSTR UserPass_In, ConnType ConnType_In);
|
||||
bool DisconnectDataSource(void);
|
||||
|
||||
bool ExecuteQuery(LPCWSTR Query_In, Rowset Rowset_In = Rowset_Get);
|
||||
bool ExecuteQueryWithParams(LPCWSTR Query_In, char *Data_In, const PARAM_INFO& ColInfo_In);
|
||||
bool ExecuteQueryGetData(LPCWSTR Query_In, void *Buffer_Out);
|
||||
|
||||
bool GetData(void *Buffer_Out);
|
||||
bool GetData(void **Buffer_Out, int RowSize_In, int Row_In, int *pGetRow_Out);
|
||||
|
||||
bool SetBinaryData(int ColNum_In, LPSET_BINARY lpSetBinary);
|
||||
|
||||
COL_INFO& GetColInfo(void) { return m_ColInfo; }
|
||||
|
||||
public:
|
||||
IDBInitialize* m_pIDBInit;
|
||||
IDBCreateSession* m_pIDBCreateSession;
|
||||
IDBCreateCommand* m_pIDBCreateCommand;
|
||||
IRowset* m_pIRowset;
|
||||
IRowsetChange* m_pIRowsetChange;
|
||||
|
||||
HRESULT m_dwLastError;
|
||||
|
||||
WCHAR m_ErrorString[MaxErrorLen];
|
||||
WCHAR m_LastMessage[MaxErrorLen];
|
||||
|
||||
private:
|
||||
/// <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
typedef struct RESULT_COLS
|
||||
{
|
||||
unsigned long ColNum;
|
||||
DBCOLUMNINFO* lpDBColumnInfo;
|
||||
WCHAR* lpStringsBuffer;
|
||||
}*LPRESULT_COLS;
|
||||
|
||||
WCHAR m_QueryText[MaxQueryTextLen]; /// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>
|
||||
COL_INFO m_ColInfo; /// <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
private:
|
||||
|
||||
bool HandleError(int ErrorLine_In, HRESULT hResult_In, WCHAR *Buffer_In);
|
||||
|
||||
bool CreateSession(void);
|
||||
bool DBCreateCommand(void);
|
||||
|
||||
bool AllocResultCols(IUnknown* lpIUnknown_In, RESULT_COLS &Rsult_Cols);
|
||||
bool ReleaseResultCols(IUnknown* lpIUnknown_In, RESULT_COLS &Rsult_Cols);
|
||||
|
||||
bool SetConnectionProperties(LPCWSTR ServerName_In, LPCWSTR DataBaseName_In, LPCWSTR UserID_In, LPCWSTR UserPass_In);
|
||||
DBBINDING* AllocBindGetData(int ColsNum_In, DBCOLUMNINFO* pDBColumnInfo_In);
|
||||
DBBINDING* AllocBindParamInputData(const PARAM_INFO &ColInfo_In);
|
||||
};
|
||||
|
||||
}
|
||||
328
Server/NFAuthTool/NFAuthServer/NaveServer/NFPacketPool.cpp
Normal file
328
Server/NFAuthTool/NFAuthServer/NaveServer/NFPacketPool.cpp
Normal file
@@ -0,0 +1,328 @@
|
||||
#include "Global.h"
|
||||
#include "NFMemPool.h"
|
||||
#include "NFPacketPool.h"
|
||||
#include <Nave/NFLog.h>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : //
|
||||
// [3]RETURN : //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
NFPacketPool::NFPacketPool()
|
||||
{
|
||||
m_hLogFile = NULL; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
m_pAcptPool = NULL;
|
||||
m_pRecvPool = NULL;
|
||||
m_pProcPool = NULL; // <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
|
||||
m_nMaxPacketSize = 0;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20>Ҹ<EFBFBD><D2B8><EFBFBD> - <20><EFBFBD><DEB8><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : //
|
||||
// [3]RETURN : //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
NFPacketPool::~NFPacketPool()
|
||||
{
|
||||
Release();
|
||||
}
|
||||
|
||||
VOID NFPacketPool::Release()
|
||||
{
|
||||
LogClose(); // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ݱ<EFBFBD>
|
||||
|
||||
m_nMaxPacketSize = 0;
|
||||
|
||||
if(m_pAcptPool)
|
||||
delete m_pAcptPool;
|
||||
|
||||
if(m_pRecvPool)
|
||||
delete m_pRecvPool;
|
||||
|
||||
if(m_pProcPool)
|
||||
delete m_pProcPool;
|
||||
|
||||
m_pAcptPool = NULL;
|
||||
m_pRecvPool = NULL;
|
||||
m_pProcPool = NULL; // <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20>ʱ<EFBFBD>ȭ <20>Լ<EFBFBD> //
|
||||
// [2]PARAMETER : lpszFileName - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> FALSE - <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::Create(INT nMaxUser,CHAR* lpszFileName,INT nMaxPacketSize,INT nAcptBuffCnt,INT nRecvBuffCnt,INT nSendBuffCnt)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28≯<EFBFBD>)<29><> <20><><EFBFBD><EFBFBD> <20>ϸ<EFBFBD>..
|
||||
if(lpszFileName) LogOpen( lpszFileName ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
m_nMaxPacketSize = nMaxPacketSize;
|
||||
|
||||
// <20><> <20><>Ŷ<EFBFBD><C5B6> <20><EFBFBD><DEB8><EFBFBD> <20>Ҵ<EFBFBD>
|
||||
// Winsock <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD> 64<36><34> <20><><EFBFBD>Ѵ<EFBFBD>
|
||||
// winsock<63><6B><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> OVERLAPPED <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>..
|
||||
m_pAcptPool = new NFMemPool <OVERLAPPEDPLUS> (nMaxUser*nAcptBuffCnt, m_nMaxPacketSize+64);
|
||||
m_pRecvPool = new NFMemPool <OVERLAPPEDPLUS> (nMaxUser*nRecvBuffCnt, m_nMaxPacketSize+64);
|
||||
m_pProcPool = new NFMemPool <OVERLAPPEDPLUS> (nMaxUser*nSendBuffCnt, m_nMaxPacketSize+64);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
LogWrite("acpt=%08X, recv=%08X, proc=%08X", m_pAcptPool, m_pRecvPool, m_pProcPool);
|
||||
|
||||
// <20>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB8><EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20>ȵǾ<C8B5><C7BE>ٸ<EFBFBD>
|
||||
if( !m_pAcptPool || !m_pRecvPool || !m_pProcPool)
|
||||
return FALSE; // FALSE
|
||||
|
||||
m_pAcptPool->SetLogTitle(L"ACPT");
|
||||
m_pRecvPool->SetLogTitle(L"RECV");
|
||||
m_pProcPool->SetLogTitle(L"SEND");
|
||||
|
||||
return TRUE; // TRUE
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : lpszFileName - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> FALSE - <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::LogOpen( CHAR *lpszFileName )
|
||||
{
|
||||
// <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҴٸ<D2B4>
|
||||
if( m_hLogFile || lpszFileName == NULL ) return FALSE; // FALSE <20><><EFBFBD><EFBFBD>
|
||||
|
||||
m_hLogFile = fopen( lpszFileName, "ab" ); // ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if( !m_hLogFile ) return FALSE;
|
||||
|
||||
return TRUE; // TRUE <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : lpszFileName - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD>ϱ<EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> FALSE - <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL __cdecl NFPacketPool::LogWrite( CHAR *lpszFmt, ... )
|
||||
{
|
||||
if(NULL == m_hLogFile) return FALSE;
|
||||
|
||||
va_list argptr;
|
||||
CHAR szOutStr[1024];
|
||||
va_start(argptr, lpszFmt);
|
||||
vsprintf(szOutStr, lpszFmt, argptr);
|
||||
va_end(argptr);
|
||||
|
||||
INT nBytesWritten = fprintf( m_hLogFile, "%s\r\n", szOutStr );// LOG <20><><EFBFBD><EFBFBD>
|
||||
fflush( m_hLogFile );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD>µ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : void //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
void NFPacketPool::LogClose()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵٸ<D1B4>,
|
||||
if(m_hLogFile) fclose( m_hLogFile ); // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ݱ<EFBFBD>
|
||||
m_hLogFile = NULL; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Accept Packet <20>Ҵ<EFBFBD> //
|
||||
// [2]PARAMETER : newolp - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::AllocAcptPacket( LPOVERLAPPEDPLUS &newolp )
|
||||
{
|
||||
LPOVERLAPPEDPLUS olp = NULL; // <20><><EFBFBD><EFBFBD>ü <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
if(!m_pAcptPool)
|
||||
return bRet; // <20><>ȯ
|
||||
|
||||
olp = m_pAcptPool->Alloc(); // Accept Pool<6F><6C><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LogWrite( "AlocAcptPacket(%08X)", (DWORD)olp ); // logging
|
||||
|
||||
// <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
|
||||
if(olp)
|
||||
{
|
||||
// <20>Ҵ<EFBFBD> <20><EFBFBD><DEB8><EFBFBD> ó<><C3B3> <20>κ<EFBFBD>
|
||||
newolp = olp; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
newolp->wbuf.buf = (CHAR*)(olp+1); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bRet = TRUE; // <20><>ȯ<EFBFBD><C8AF> - TRUE<55><45> <20>ٲ<EFBFBD>
|
||||
}
|
||||
|
||||
return bRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Receive Packet <20>Ҵ<EFBFBD> //
|
||||
// [2]PARAMETER : newolp - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::AllocRecvPacket( LPOVERLAPPEDPLUS &newolp )
|
||||
{
|
||||
LPOVERLAPPEDPLUS olp = NULL; // <20><><EFBFBD><EFBFBD>ü <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
if(!m_pRecvPool)
|
||||
return bRet; // <20><>ȯ
|
||||
|
||||
olp = m_pRecvPool->Alloc(); // Receive Pool<6F><6C><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LogWrite( "AlocRecvPacket(%08X)", (DWORD)olp ); // logging
|
||||
|
||||
// <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
|
||||
if(olp)
|
||||
{
|
||||
// <20>Ҵ<EFBFBD> <20><EFBFBD><DEB8><EFBFBD> ó<><C3B3> <20>κ<EFBFBD>
|
||||
newolp = olp; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
newolp->wbuf.buf = (CHAR*)(olp+1); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bRet = TRUE; // <20><>ȯ<EFBFBD><C8AF> - TRUE<55><45> <20>ٲ<EFBFBD>
|
||||
}
|
||||
else
|
||||
LOG_ERROR((L"NFPacketPool::AllocRecvPacket Pool Alloc Faild.."));
|
||||
|
||||
return bRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Process Packet <20>Ҵ<EFBFBD> //
|
||||
// [2]PARAMETER : newolp - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 10<31><30> 7<><37> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::AllocSendPacket(LPOVERLAPPEDPLUS &newolp)
|
||||
{
|
||||
LPOVERLAPPEDPLUS olp = NULL; // <20><><EFBFBD><EFBFBD>ü <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
if(!m_pProcPool)
|
||||
return bRet; // <20><>ȯ
|
||||
|
||||
olp = m_pProcPool->Alloc(); // Accept Pool<6F><6C><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LogWrite( "AlocAcptPacket(%08X)", (DWORD)olp ); // logging
|
||||
|
||||
// <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
|
||||
if(olp)
|
||||
{
|
||||
// <20>Ҵ<EFBFBD> <20><EFBFBD><DEB8><EFBFBD> ó<><C3B3> <20>κ<EFBFBD>
|
||||
newolp = olp; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
newolp->wbuf.buf = (CHAR*)(olp+1); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bRet = TRUE; // <20><>ȯ<EFBFBD><C8AF> - TRUE<55><45> <20>ٲ<EFBFBD>
|
||||
}
|
||||
return bRet; // <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Process Buffer <20>Ҵ<EFBFBD> //
|
||||
// [2]PARAMETER : newolp - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 10<31><30> 7<><37> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::AllocProcBuffer(PCHAR &newbuf)
|
||||
{
|
||||
LPOVERLAPPEDPLUS olp = NULL; // <20><><EFBFBD><EFBFBD>ü <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
if(!m_pProcPool)
|
||||
return bRet; // <20><>ȯ
|
||||
|
||||
olp = m_pProcPool->Alloc(); // Accept Pool<6F><6C><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LogWrite( "AllocProcBuffer(%08X)", (DWORD)olp ); // logging
|
||||
|
||||
// <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
|
||||
if(olp)
|
||||
{
|
||||
// <20>Ҵ<EFBFBD> <20><EFBFBD><DEB8><EFBFBD> ó<><C3B3> <20>κ<EFBFBD>
|
||||
newbuf = (CHAR*)(olp+1); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bRet = TRUE; // <20><>ȯ<EFBFBD><C8AF> - TRUE<55><45> <20>ٲ<EFBFBD>
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Accept <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : olp - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD> ó<><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::FreeAcptPacket( LPOVERLAPPEDPLUS olp )
|
||||
{
|
||||
LogWrite( "FreeAcptPacket(%08X)", (DWORD)olp ); // Logging
|
||||
|
||||
if(!m_pAcptPool)
|
||||
return FALSE; // <20><>ȯ
|
||||
|
||||
return(m_pAcptPool->Free(olp)); // <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Receive <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : olp - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD> ó<><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::FreeRecvPacket( LPOVERLAPPEDPLUS olp )
|
||||
{
|
||||
LogWrite( "FreeRecvPacket(%08X)", (DWORD)olp ); // Logging
|
||||
|
||||
if(!m_pRecvPool)
|
||||
return FALSE; // <20><>ȯ
|
||||
|
||||
return( m_pRecvPool->Free(olp) ); // <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Process <20>Ҵ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : olp - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD> ó<><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::FreeSendPacket(LPOVERLAPPEDPLUS olp)
|
||||
{
|
||||
LogWrite( "FreeProcPacket(%08X)", (DWORD)olp ); // Logging
|
||||
|
||||
if(!m_pProcPool)
|
||||
return FALSE; // <20><>ȯ
|
||||
|
||||
return(m_pProcPool->Free(olp)); // <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Process <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : olp - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ //
|
||||
// [3]RETURN : TRUE - <20><><EFBFBD><EFBFBD> ó<><C3B3> //
|
||||
// [4]DATE : 2000<30><30> 9<><39> 4<><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFPacketPool::FreeProcBuffer(PCHAR buffer)
|
||||
{
|
||||
LPOVERLAPPEDPLUS olp;
|
||||
olp = ((LPOVERLAPPEDPLUS)buffer) - 1;
|
||||
LogWrite( "FreeProcBuffer(%08X)", (DWORD)olp ); // Logging
|
||||
|
||||
if(!m_pProcPool)
|
||||
return FALSE; // <20><>ȯ
|
||||
|
||||
return(m_pProcPool->Free(olp)); // <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ
|
||||
}
|
||||
|
||||
}
|
||||
58
Server/NFAuthTool/NFAuthServer/NaveServer/NFPacketPool.h
Normal file
58
Server/NFAuthTool/NFAuthServer/NaveServer/NFPacketPool.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* @file NFPacketPool.h
|
||||
* @brief Packet Pool <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü, <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> Buffer<65><72> <20>Ҵ<EFBFBD><D2B4>ϰų<CFB0> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// NFPacketPool Class
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class NFPacketPool
|
||||
{
|
||||
//---------------------- Member Functions ----------------------//
|
||||
public:
|
||||
NFPacketPool(); // Contructor
|
||||
virtual ~NFPacketPool(); // Destructor
|
||||
|
||||
BOOL Create(INT nMaxUse = DEF_MAXUSER, // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CHAR* lpszFileName = NULL, // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
INT nMaxPacketSize = DEF_MAXPACKETSIZE,
|
||||
INT nAcptBuffCnt = 1,
|
||||
INT nRecvBuffCnt = 8,
|
||||
INT nSendBuffCnt = 32); // Create Packet Pool
|
||||
|
||||
VOID Release();
|
||||
|
||||
// Operations
|
||||
BOOL AllocAcptPacket(LPOVERLAPPEDPLUS &newolp); // Accept <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
BOOL AllocRecvPacket(LPOVERLAPPEDPLUS &newolp); // Receive <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
BOOL AllocSendPacket(LPOVERLAPPEDPLUS &newolp); // Send Buffer <20><><EFBFBD><EFBFBD>
|
||||
BOOL AllocProcBuffer(PCHAR &newbuf); // Send Buffer <20><><EFBFBD><EFBFBD>
|
||||
|
||||
BOOL FreeAcptPacket(LPOVERLAPPEDPLUS olp); // Accept <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
BOOL FreeRecvPacket(LPOVERLAPPEDPLUS olp); // Receive <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
BOOL FreeSendPacket(LPOVERLAPPEDPLUS olp); // Send Buffer <20><><EFBFBD><EFBFBD>
|
||||
BOOL FreeProcBuffer(PCHAR buffer); // Send Buffer <20><><EFBFBD><EFBFBD>
|
||||
|
||||
private:
|
||||
BOOL LogOpen(CHAR *lpszFileName); // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
BOOL __cdecl LogWrite(CHAR *lpszFmt, ...); // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
VOID LogClose(); // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD>
|
||||
|
||||
//---------------------- Member Variables ----------------------//
|
||||
private:
|
||||
FILE* m_hLogFile; // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><>ü
|
||||
|
||||
NFMemPool <OVERLAPPEDPLUS>* m_pAcptPool; // Accept Packet
|
||||
NFMemPool <OVERLAPPEDPLUS>* m_pRecvPool; // Receive Packet
|
||||
NFMemPool <OVERLAPPEDPLUS>* m_pProcPool; // Process Packet
|
||||
|
||||
INT m_nMaxPacketSize; // <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD>
|
||||
};
|
||||
|
||||
}
|
||||
446
Server/NFAuthTool/NFAuthServer/NaveServer/NFServerCtrl.cpp
Normal file
446
Server/NFAuthTool/NFAuthServer/NaveServer/NFServerCtrl.cpp
Normal file
@@ -0,0 +1,446 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Filename: IOCPServerCtrl.cpp
|
||||
// Coder : <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Edithe@chollian.net)
|
||||
// Comp. : Navezine
|
||||
// Compiler: Visual C++ .net
|
||||
// Title : IOCP Base <20><>Ʈ<EFBFBD>ѷ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "Global.h"
|
||||
#include "NFServerCtrl.h"
|
||||
#include <Nave/NFLog.h>
|
||||
#include <Nave/NFSync.h>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
// INT iMaxRecvPacket = 0;
|
||||
// INT iRecvPacket = 0; // <20><> <20><>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
// DWORD uRecvTickCnt = 0; // <20><><EFBFBD><EFBFBD> Tick Count
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
NFServerCtrl::NFServerCtrl()
|
||||
{
|
||||
m_bServerRun = FALSE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_bPause = FALSE;
|
||||
|
||||
m_nMaxThreadNum = (GetNumberOfProcess() * 2); // CPU<50><55> * 2<><32><EFBFBD><EFBFBD> Thread <20><> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
m_iPort = 0;
|
||||
m_iMaxConn = 50;
|
||||
|
||||
m_pWorkThread = NULL; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
m_hProcThread = 0;
|
||||
m_hPacketThread = 0;
|
||||
m_hIOCP = NULL; // IOCP <20>ڵ<EFBFBD>
|
||||
m_pUpdateManager = new NFUpdateManager();
|
||||
}
|
||||
|
||||
NFServerCtrl::~NFServerCtrl()
|
||||
{
|
||||
m_bServerRun = FALSE;
|
||||
_DELETE(m_pUpdateManager);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : IOCP <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : HANDLE = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IOCP //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
HANDLE NFServerCtrl::CreateIOCP()
|
||||
{
|
||||
return CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,0);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Listen <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : SOCKET = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LISTEN SOCKET //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
SOCKET NFServerCtrl::CreateListenSocket(INT nServerPort, CHAR cBindQue)
|
||||
{
|
||||
SOCKET Socket = NULL; // a Socket Variable for using Listener
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD>
|
||||
SOCKADDR_IN addr;
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
addr.sin_port = htons( (short)nServerPort );
|
||||
|
||||
// [1] Create Listen Socket
|
||||
Socket = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED );
|
||||
|
||||
if(Socket == NULL)
|
||||
return Socket;
|
||||
|
||||
// [2] bind listen socket
|
||||
if(bind(Socket,(SOCKADDR *)&addr,sizeof(addr)) != 0)
|
||||
return Socket;
|
||||
|
||||
// [3] listening for an concurrent incoming connections limited in 5
|
||||
listen(Socket, cBindQue);
|
||||
|
||||
LISTENER stLin;
|
||||
stLin.Init();
|
||||
|
||||
stLin.s = Socket;
|
||||
stLin.nPort = nServerPort;
|
||||
stLin.cBindQue = cBindQue;
|
||||
|
||||
m_vecListener.push_back(stLin);
|
||||
|
||||
return Socket;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : Listen Socket <20><> iocp <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : SOCKET sckListener //
|
||||
// [3]RETURN : HANDLE = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IOCP //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
HANDLE NFServerCtrl::ConnectIOCPSocket(SOCKET sckListener)
|
||||
{
|
||||
return CreateIoCompletionPort((HANDLE)sckListener,m_hIOCP,0,0);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : SOCKET<45><54><EFBFBD><EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF> Ȱ<><C8B0>ȭ //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : void //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFServerCtrl::InitSocket()
|
||||
{
|
||||
WSADATA wsaData; // Initialzing Variables
|
||||
return (SOCKET_ERROR != WSAStartup(0x202,&wsaData)); // Start Up
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> CPU <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : INT = <20><><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> CPU <20><> <20><>ȯ //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
INT NFServerCtrl::GetNumberOfProcess()
|
||||
{
|
||||
SYSTEM_INFO si; // a System Info Structure Object
|
||||
GetSystemInfo( &si ); // Get the System Information
|
||||
return (INT)si.dwNumberOfProcessors; // return the number of processors
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : BOOL - <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFServerCtrl::Stop()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Server Closing Process //
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
INT nCnt;
|
||||
// [01] Queue Suicide Packets into each IOCP Main Thread
|
||||
for( nCnt = 0; nCnt < m_nMaxThreadNum; nCnt++ )
|
||||
{
|
||||
if(PostQueuedCompletionStatus(m_hIOCP,0,IOCP_SHUTDOWN,0) ==NULL)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// [02] Wait for thread terminations
|
||||
nCnt = WaitForMultipleObjects( m_nMaxThreadNum, m_pWorkThread, TRUE, 15000 );
|
||||
|
||||
switch ( nCnt )
|
||||
{
|
||||
case WAIT_TIMEOUT:
|
||||
LOG_ERROR((L"Not All WorkThreads Died in Time."));
|
||||
break;
|
||||
case WAIT_FAILED:
|
||||
LOG_ERROR((L"WAIT_FAILED, WaitForMultipleObjects()."));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// [03] Close Thread Handles
|
||||
if( m_pWorkThread )
|
||||
{
|
||||
for( nCnt = 0; nCnt < m_nMaxThreadNum; nCnt++ )
|
||||
CloseHandle( m_pWorkThread[nCnt] );
|
||||
|
||||
_DELETE_ARRAY(m_pWorkThread);
|
||||
}
|
||||
|
||||
// [04] Process Thread Stop and Close
|
||||
m_bServerRun = FALSE;
|
||||
CloseHandle(m_hProcThread);
|
||||
|
||||
CloseHandle(m_hPacketThread);
|
||||
|
||||
if(ReleaseSession() == TRUE)
|
||||
{
|
||||
LOG_IMPORTANT((L"shutdown session.."));
|
||||
}
|
||||
|
||||
// [05] Close Listener Socket
|
||||
int iListener = m_vecListener.size();
|
||||
for(int i = 0; i < iListener; ++i)
|
||||
{
|
||||
m_vecListener[i].Release();
|
||||
}
|
||||
|
||||
// [6] Close IOCP Handle
|
||||
if(m_hIOCP) CloseHandle(m_hIOCP);
|
||||
|
||||
// [7] <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF> <20><><EFBFBD><EFBFBD>
|
||||
WSACleanup();
|
||||
|
||||
// [8] Show the Result of Close Processing
|
||||
LOG_IMPORTANT((L"shutdown sequence finished.."));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : void //
|
||||
// [3]RETURN : BOOL - <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
BOOL NFServerCtrl::Start(INT nPort, INT nMaxConn, INT nMaxThreadNum)
|
||||
{
|
||||
m_iPort = nPort;
|
||||
m_iMaxConn = nMaxConn;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Work<72><6B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CPU*2<><32>
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD>̳<EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>ϴ<EFBFBD> Update<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD> <20><>Ÿ <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>带 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
||||
/*
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4>
|
||||
IOCP<43><50> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ (IOCP<43><50> <20><><EFBFBD><EFBFBD> Accept, Recv, Send<6E><64> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
EventUpdate<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31> (<28><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> ť)
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ױ<CDB9>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?<3F><>
|
||||
*/
|
||||
|
||||
// 0<>̾ƴϸ<C6B4> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(nMaxThreadNum != 0)
|
||||
m_nMaxThreadNum = nMaxThreadNum;
|
||||
else
|
||||
m_nMaxThreadNum = (GetNumberOfProcess() * 2); // CPU<50><55> * 2<><32><EFBFBD><EFBFBD> Thread <20><> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// [00] <20><><EFBFBD><EFBFBD> <20><> <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
INT nCnt = 0; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
UINT nDummy; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3>
|
||||
SOCKET skListener;
|
||||
|
||||
// [01] initialize socket library
|
||||
if(!InitSocket()) goto Error_Procss;
|
||||
|
||||
// [02] Create IOCP
|
||||
if((m_hIOCP = CreateIOCP()) == NULL) goto Error_Procss;
|
||||
|
||||
// [03] Create Listener Socket
|
||||
if((skListener = CreateListenSocket(m_iPort)) == INVALID_SOCKET) goto Error_Procss;
|
||||
|
||||
// [04] Connect listener socket to IOCP
|
||||
if(ConnectIOCPSocket(skListener) == NULL) goto Error_Procss;
|
||||
|
||||
// [05] ȭ<>鿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5>
|
||||
ShowServerInfo();
|
||||
|
||||
// [06] Create Session..
|
||||
if(CreateSession(skListener) == FALSE) goto Error_Procss;
|
||||
|
||||
// [07] Update Session..
|
||||
if((m_pWorkThread = new HANDLE[m_nMaxThreadNum]) == NULL) goto Error_Procss; // Create thread Control Handle
|
||||
|
||||
for(nCnt = 0; nCnt < m_nMaxThreadNum; nCnt++) // Run Thread
|
||||
{
|
||||
if((m_pWorkThread[nCnt] = (HANDLE)_beginthreadex(0,0,Thread_MainEx,m_hIOCP,0,&nDummy)) == NULL) goto Error_Procss;
|
||||
}
|
||||
|
||||
//--------------> Server Initializing has been done <---------------//
|
||||
// [8] Process Thread <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
m_bServerRun = TRUE;
|
||||
if((m_hProcThread = (HANDLE)_beginthreadex(0,0,Process_MainEx,this,0,&nDummy)) == NULL) goto Error_Procss;
|
||||
|
||||
// [9] Process Thread <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
if((m_hPacketThread = (HANDLE)_beginthreadex(0,0,Packet_MainEx,this,0,&nDummy)) == NULL) goto Error_Procss;
|
||||
|
||||
return TRUE;
|
||||
|
||||
Error_Procss:
|
||||
Stop();
|
||||
m_bServerRun = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID NFServerCtrl::ShowServerInfo()
|
||||
{
|
||||
WCHAR szDate[32],
|
||||
szTime[32];
|
||||
|
||||
_tzset();
|
||||
_wstrdate( szDate );
|
||||
_wstrtime( szTime );
|
||||
LOG_IMPORTANT((L"------------------------------------------------"));
|
||||
LOG_IMPORTANT((L" %s initialized at %s, %s", L"Server", szDate, szTime) );
|
||||
LOG_IMPORTANT((L"------------------------------------------------"));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Server start //
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
LOG_IMPORTANT((L"------------------------------------------------"));
|
||||
LOG_IMPORTANT((L"| SERVER START |"));
|
||||
LOG_IMPORTANT((L"------------------------------------------------"));
|
||||
|
||||
WCHAR Ip[32];
|
||||
GetLocalIP(Ip);
|
||||
LOG_IMPORTANT((L"IP(%s) Port(%d)", Ip, m_iPort ));
|
||||
}
|
||||
|
||||
VOID NFServerCtrl::Pause(BOOL bPause)
|
||||
{
|
||||
m_bPause = bPause;
|
||||
}
|
||||
|
||||
VOID NFServerCtrl::Update()
|
||||
{
|
||||
/* if(timeGetTime() - uRecvTickCnt > 1000)
|
||||
{
|
||||
InterlockedExchange((LONG*)&iMaxRecvPacket,iRecvPacket);
|
||||
InterlockedExchange((LONG*)&iRecvPacket,0);
|
||||
InterlockedExchange((LONG*)&uRecvTickCnt,timeGetTime());
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : IOCPó<50><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : lpVoid - IOCP Handle //
|
||||
// [3]RETURN : BOOL - <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
unsigned NFServerCtrl::Thread_MainEx(LPVOID lpVoid)
|
||||
{
|
||||
DWORD dwIoSize; // <20>Ϸ<EFBFBD>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ULONG lCompletionKey; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ż<><C5BB> <20><><EFBFBD><EFBFBD> <20><>
|
||||
BOOL bSuccess; // <20><><EFBFBD><EFBFBD>ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
HANDLE hIOCP = (HANDLE)lpVoid; // IOCP <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LPOVERLAPPED lpOverlapped; // <20><>ø Ȯ<><C8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
////////////
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
while( TRUE )
|
||||
{
|
||||
// IOCP ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> BLOCKING MODE
|
||||
bSuccess = GetQueuedCompletionStatus(hIOCP, // IOCP Handle
|
||||
&dwIoSize, // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
&lCompletionKey, // <20>Ϸ<EFBFBD> Ű
|
||||
(LPOVERLAPPED*) &lpOverlapped, // <20><>ø Ȯ<><C8AE>
|
||||
INFINITE); // Waiting Time
|
||||
|
||||
LPOVERLAPPEDPLUS lpOverlapPlus = (LPOVERLAPPEDPLUS)lpOverlapped;
|
||||
|
||||
if(bSuccess)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>Դٸ<D4B4>, <20><><EFBFBD><EFBFBD> Ż<><C5BB>
|
||||
if( lCompletionKey == IOCP_SHUTDOWN ) break;
|
||||
|
||||
if( NULL != lpOverlapPlus )
|
||||
{
|
||||
///////////////////////////////////////////////
|
||||
// ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
lpOverlapPlus->dwBytes = dwIoSize; // ó<><C3B3> <20><><EFBFBD><EFBFBD>Ÿ Size
|
||||
// ó<><C3B3> <20><><EFBFBD><EFBFBD> Cast <20><>ȯ
|
||||
// <20>ӵ<EFBFBD><D3B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD> try~catch<63><68> <20><><EFBFBD><EFBFBD>.
|
||||
// <20>˼<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> Exception::EnableUnhandledExceptioinFilter(true)<29><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
|
||||
/*
|
||||
// Recv ī<><C4AB>Ʈ ó<><C3B3>
|
||||
if(lpOverlapPlus->nConnState == ClientIoRead)
|
||||
{
|
||||
InterlockedExchange((LONG*)&iRecvPacket,iRecvPacket+1);
|
||||
}
|
||||
*/
|
||||
NFConnection* lpClientConn = (NFConnection*) lpOverlapPlus->pClientConn;
|
||||
lpClientConn->DoIo(lpOverlapPlus); // IOCP ó<><C3B3> <20>ڵ鸵
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!lpOverlapPlus)
|
||||
{
|
||||
LOG_ERROR((L"Critical Error on GetQueuedCompletionStatus()."));
|
||||
}
|
||||
else
|
||||
{
|
||||
// ó<><C3B3> <20><><EFBFBD><EFBFBD> Cast <20><>ȯ
|
||||
NFConnection* lpClientConn = (NFConnection*) lpOverlapPlus->pClientConn;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Clear<61><72><EFBFBD>ָ<EFBFBD> <20>ȵȴ<C8B5>. (<28><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>)
|
||||
// lpClientConn->Clear();
|
||||
// LOG_ERROR(("[%04d] IOCP OverlapPlus Error, Close_Open()ȣ<><C8A3>. SOCKET_ERROR, %d", lpClientConn->GetIndex(), WSAGetLastError()));
|
||||
lpClientConn->SetClose_Open(lpOverlapPlus, TRUE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : IOCPó<50><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : lpVoid - IOCP Handle //
|
||||
// [3]RETURN : BOOL - <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
unsigned NFServerCtrl::Process_MainEx(LPVOID lpVoid)
|
||||
{
|
||||
NFServerCtrl* pCtrl = (NFServerCtrl*)lpVoid; // IOCP <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
assert(pCtrl);
|
||||
|
||||
while( pCtrl->IsRun())
|
||||
{
|
||||
if(pCtrl->IsPause())
|
||||
{
|
||||
Sleep(1);
|
||||
continue;
|
||||
}
|
||||
|
||||
pCtrl->Update();
|
||||
Sleep(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// [1]DESCRIPTION : UpateQueó<65><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
|
||||
// [2]PARAMETER : lpVoid - IOCP Handle //
|
||||
// [3]RETURN : BOOL - <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
// [4]DATE : 2003<30><33> 10<31><30> 24<32><34> //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
unsigned NFServerCtrl::Packet_MainEx(LPVOID lpVoid)
|
||||
{
|
||||
NFServerCtrl* pCtrl = (NFServerCtrl*)lpVoid; // IOCP <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
NFUpdateManager* pUpdateManager = NFUpdateManager::GetInstancePtr();
|
||||
|
||||
assert(pCtrl);
|
||||
assert(pUpdateManager);
|
||||
|
||||
while( pCtrl->IsRun())
|
||||
{
|
||||
pUpdateManager->Update();
|
||||
Sleep(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
99
Server/NFAuthTool/NFAuthServer/NaveServer/NFServerCtrl.h
Normal file
99
Server/NFAuthTool/NFAuthServer/NaveServer/NFServerCtrl.h
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* @file NFServerCtrl.h
|
||||
* @brief IOCP Base <20><>Ʈ<EFBFBD>ѷ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "NFConnection.h"
|
||||
#include <vector>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
// extern INT iMaxRecvPacket;
|
||||
|
||||
typedef struct LISTENER
|
||||
{
|
||||
SOCKET s; // Listen Socket
|
||||
INT nPort; // <20><>Ʈ
|
||||
CHAR cBindQue; // <20><><EFBFBD>ε<EFBFBD> ť
|
||||
|
||||
VOID Init()
|
||||
{
|
||||
s = INVALID_SOCKET; // Listen Socket
|
||||
nPort = 0; // <20><>Ʈ
|
||||
cBindQue = 0;
|
||||
}
|
||||
|
||||
VOID Release()
|
||||
{
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ť<><C5A5> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ɼ<EFBFBD>
|
||||
struct linger li = {1, 0}; // Default: SO_DONTLINGER
|
||||
shutdown(s, SD_BOTH);
|
||||
setsockopt(s, SOL_SOCKET, SO_LINGER, (CHAR *)&li, sizeof(li));
|
||||
closesocket(s );
|
||||
|
||||
Init();
|
||||
}
|
||||
}*LPLISTENER;
|
||||
|
||||
class NFServerCtrl
|
||||
{
|
||||
public:
|
||||
NFServerCtrl();
|
||||
virtual ~NFServerCtrl();
|
||||
|
||||
public:
|
||||
SOCKET CreateListenSocket(INT nServerPort, CHAR cBindQue = 32); // Listen Socket <20><><EFBFBD><EFBFBD>
|
||||
HANDLE ConnectIOCPSocket(SOCKET sckListener); // Listen Socket <20><> iocp <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
inline HANDLE GetIOCP() { return m_hIOCP; };
|
||||
|
||||
inline BOOL IsRun() { return m_bServerRun; };
|
||||
inline BOOL IsPause() { return m_bPause; };
|
||||
|
||||
static unsigned __stdcall WINAPI Thread_MainEx(LPVOID lpVoid); // IOCP <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Thread
|
||||
static unsigned __stdcall WINAPI Process_MainEx(LPVOID lpVoid); // Process ó<><C3B3> Thread
|
||||
static unsigned __stdcall WINAPI Packet_MainEx(LPVOID lpVoid); // Packet ó<><C3B3> Thread
|
||||
|
||||
virtual VOID Update(); // Process ó<><C3B3> <20>Լ<EFBFBD>
|
||||
|
||||
virtual VOID ShowServerInfo(); // <20><><EFBFBD>۽<EFBFBD> ȭ<>鿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5>
|
||||
|
||||
virtual BOOL CreateSession(SOCKET sckListener) { return TRUE; } // Client Session <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
virtual BOOL ReleaseSession() { return TRUE; } // Client Session <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
|
||||
protected:
|
||||
|
||||
HANDLE CreateIOCP(); // IOCP <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
BOOL InitSocket(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF> Ȱ<><C8B0>
|
||||
INT GetNumberOfProcess(); // CPU<50><55><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
|
||||
INT GetNumberOfThread() { return m_nMaxThreadNum; }; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
|
||||
BOOL Start(INT nPort, INT nMaxConn, INT nMaxThreadNum = 0); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
VOID Pause(BOOL bPause);
|
||||
BOOL Stop(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
protected:
|
||||
INT m_nMaxThreadNum; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
HANDLE* m_pWorkThread; // IOCP Work <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
HANDLE m_hIOCP; // IOCP <20>ڵ<EFBFBD>
|
||||
|
||||
std::vector<LISTENER> m_vecListener; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
||||
|
||||
HANDLE m_hProcThread; // <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HANDLE m_hPacketThread; // PacketUpdate<74><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
INT m_iPort;
|
||||
INT m_iMaxConn;
|
||||
|
||||
BOOL m_bPause;
|
||||
BOOL m_bServerRun; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> TRUE<55><45><EFBFBD><EFBFBD>.
|
||||
|
||||
NFUpdateManager* m_pUpdateManager;
|
||||
};
|
||||
|
||||
}
|
||||
113
Server/NFAuthTool/NFAuthServer/NaveServer/NFUpdateManager.cpp
Normal file
113
Server/NFAuthTool/NFAuthServer/NaveServer/NFUpdateManager.cpp
Normal file
@@ -0,0 +1,113 @@
|
||||
#include "Global.h"
|
||||
#include "NFUpdateManager.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
// INT iMaxProcPacket = 0;
|
||||
// INT iProcPacket = 0; // <20><> <20><>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
// DWORD uProcTickCnt = 0; // <20><><EFBFBD><EFBFBD> Tick Count
|
||||
|
||||
NFUpdateManager::NFUpdateManager(VOID) : m_Head(0), m_Tail(0)
|
||||
{
|
||||
}
|
||||
|
||||
NFUpdateManager::~NFUpdateManager(VOID)
|
||||
{
|
||||
}
|
||||
|
||||
VOID NFUpdateManager::Draw()
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
INT Tail = m_Tail;
|
||||
INT S = Tail-m_Head;
|
||||
if(Tail < m_Head)
|
||||
S = (MaxQueCount-m_Head)+Tail;
|
||||
|
||||
LOG_IMPORTANT((L"UpdateManager PacketCount : %d", S));
|
||||
}
|
||||
|
||||
VOID NFUpdateManager::Update()
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
INT i;
|
||||
INT Tail = m_Tail;
|
||||
/*
|
||||
if(timeGetTime() - uProcTickCnt > 1000)
|
||||
{
|
||||
InterlockedExchange((LONG*)&iMaxProcPacket,iProcPacket);
|
||||
InterlockedExchange((LONG*)&iProcPacket,0);
|
||||
InterlockedExchange((LONG*)&uProcTickCnt,timeGetTime());
|
||||
}
|
||||
*/
|
||||
// <20><><EFBFBD><EFBFBD>.
|
||||
if(m_Head == Tail)
|
||||
return;
|
||||
|
||||
INT iCount = 0;
|
||||
// Tail<69><6C> <20>տ<EFBFBD> <20>ִ<EFBFBD>.
|
||||
if(Tail < m_Head)
|
||||
{
|
||||
for(i = m_Head; i < MaxQueCount; ++i)
|
||||
{
|
||||
if(m_Conn[i] == NULL)
|
||||
continue;
|
||||
|
||||
m_Conn[i]->UpdatePacket(m_Packet[i]);
|
||||
m_Conn[i] = NULL;
|
||||
iCount++;
|
||||
}
|
||||
for(i = 0; i < Tail; ++i)
|
||||
{
|
||||
if(m_Conn[i] == NULL)
|
||||
continue;
|
||||
|
||||
m_Conn[i]->UpdatePacket(m_Packet[i]);
|
||||
m_Conn[i] = NULL;
|
||||
iCount++;
|
||||
}
|
||||
}
|
||||
else // Tail<69><6C> <20>ڿ<EFBFBD><DABF>ִ<EFBFBD>.
|
||||
{
|
||||
for(i = m_Head; i < Tail; ++i)
|
||||
{
|
||||
if(m_Conn[i] == NULL)
|
||||
continue;
|
||||
|
||||
m_Conn[i]->UpdatePacket(m_Packet[i]);
|
||||
m_Conn[i] = NULL;
|
||||
iCount++;
|
||||
}
|
||||
|
||||
}
|
||||
// InterlockedExchange((LONG*)&iProcPacket,iProcPacket+iCount);
|
||||
|
||||
m_Head = Tail;
|
||||
}
|
||||
|
||||
VOID NFUpdateManager::Add(NFConnection* pUser, NaveNet::NFPacket* pPacket)
|
||||
{
|
||||
Nave::NFSyncLock Sync(&m_Lock);
|
||||
|
||||
if(!pUser)
|
||||
return;
|
||||
|
||||
INT Tail = m_Tail;
|
||||
m_Conn[Tail] = pUser;
|
||||
|
||||
if(pPacket)
|
||||
memcpy(&m_Packet[Tail], pPacket, sizeof(NaveNet::NFPacket));
|
||||
else
|
||||
m_Packet[Tail].Init();
|
||||
|
||||
if(Tail+1 >= MaxQueCount)
|
||||
m_Tail = 0;
|
||||
else
|
||||
m_Tail = Tail+1;
|
||||
|
||||
// if(m_Tail == m_Head)
|
||||
// NAVE_ERROR(("UpdateManager Overflow. (H:%d, T:%d)", m_Head, m_Tail));
|
||||
}
|
||||
|
||||
}
|
||||
44
Server/NFAuthTool/NFAuthServer/NaveServer/NFUpdateManager.h
Normal file
44
Server/NFAuthTool/NFAuthServer/NaveServer/NFUpdateManager.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* @file NFUpdateManager.h
|
||||
* @brief <09>Ѱ<EFBFBD><D1B0><EFBFBD> <20>ϼ<EFBFBD><CFBC><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4><EFBFBD>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>ť
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <Nave/NFSingleton.h>
|
||||
#include <Nave/NFSync.h>
|
||||
#include <NaveNet/NFPacket.h>
|
||||
#include "NFConnection.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
class NFUpdateManager : public Nave::NFSingleton<NFUpdateManager>
|
||||
{
|
||||
public:
|
||||
NFUpdateManager(VOID);
|
||||
~NFUpdateManager(VOID);
|
||||
|
||||
public:
|
||||
VOID Add(NFConnection* pUser, NaveNet::NFPacket* pPacket);
|
||||
VOID Update();
|
||||
|
||||
VOID Draw();
|
||||
|
||||
private:
|
||||
enum {
|
||||
MaxQueCount = 1024,
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ť <20><><EFBFBD><EFBFBD>.
|
||||
INT m_Head;
|
||||
INT m_Tail;
|
||||
NFConnection* m_Conn[MaxQueCount];
|
||||
NaveNet::NFPacket m_Packet[MaxQueCount];
|
||||
|
||||
/// Sync <20><>ü
|
||||
Nave::NFSync m_Lock;
|
||||
};
|
||||
|
||||
}
|
||||
22
Server/NFAuthTool/NFAuthServer/NaveServer/ReadMe.txt
Normal file
22
Server/NFAuthTool/NFAuthServer/NaveServer/ReadMe.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
========================================================================
|
||||
정적 라이브러리 : Server 프로젝트 개요
|
||||
========================================================================
|
||||
|
||||
응용 프로그램 마법사에서 이 Server 라이브러리를 만들었습니다.
|
||||
|
||||
프로젝트에 대해 소스 파일은 만들어지지 않았습니다.
|
||||
|
||||
|
||||
Server.vcproj
|
||||
응용 프로그램 마법사를 사용하여 생성한 VC++ 프로젝트의 기본 프로젝트 파일입니다.
|
||||
파일을 생성한 Visual C++ 버전에 대한 정보와
|
||||
응용 프로그램 마법사를 사용하여 선택한 플랫폼, 구성 및 프로젝트 기능에 대한
|
||||
정보가 들어 있습니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
기타 참고:
|
||||
|
||||
응용 프로그램 마법사에서 사용하는 "TODO:" 주석은 사용자가 추가하거나 사용자 지정해야 하는
|
||||
소스 코드 부분을 나타냅니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
10
Server/NFAuthTool/NFAuthServer/NaveServer/Struct.h
Normal file
10
Server/NFAuthTool/NFAuthServer/NaveServer/Struct.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>.
|
||||
#ifdef _WIN32
|
||||
#pragma pack( push ,1 )
|
||||
#else
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
97
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdEdit.cpp
Normal file
97
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdEdit.cpp
Normal file
@@ -0,0 +1,97 @@
|
||||
#include "Global.h"
|
||||
#include "UICmdEdit.h"
|
||||
#include "UICmdMsgView.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
HWND UICmdEdit::s_hEditWnd = NULL; // <20><><EFBFBD><EFBFBD>Ʈ,
|
||||
CHAR UICmdEdit::s_EditStr[MAX_EDITSTRING];
|
||||
WNDPROC UICmdEdit::s_OldEditProc;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
LRESULT UICmdEdit::OnEditDefault( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
return CallWindowProc( s_OldEditProc, hWnd, uMsg, wParam, lParam );
|
||||
}
|
||||
|
||||
LRESULT UICmdEdit::OnEditKeyDown( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
switch( wParam )
|
||||
{
|
||||
case VK_TAB:
|
||||
// ListView<65><77> <20><>Ŀ<EFBFBD><C4BF> <20>ѱ<EFBFBD>
|
||||
SetFocus(UICmdMsgView::s_hListWnd);
|
||||
return FALSE;
|
||||
}
|
||||
return OnEditDefault(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT UICmdEdit::OnEditChar( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
switch( wParam )
|
||||
{
|
||||
case 13: // EditBox<6F><78><EFBFBD><EFBFBD> return<72><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SendMessage( hWnd, WM_GETTEXT, MAX_EDITSTRING, (LPARAM)(LPSTR )s_EditStr);
|
||||
if(strlen(s_EditStr) == 0)
|
||||
break;
|
||||
// <20>Է<EFBFBD><D4B7>ѰͿ<D1B0> <20><><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SendMessage( hWnd, EM_SETSEL, 0, (LPARAM )-1 );
|
||||
// <20>θ<CEB8> Return<72><6E> <20><><EFBFBD><EFBFBD>
|
||||
SendMessage( GetParent(hWnd), WM_EDIT_RETURN, strlen(s_EditStr), (LPARAM)(LPSTR )s_EditStr );
|
||||
return FALSE;
|
||||
}
|
||||
return OnEditDefault(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK UICmdEdit::EditProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
switch( uMsg )
|
||||
{
|
||||
case WM_KEYDOWN:
|
||||
return OnEditKeyDown( hWnd, uMsg, wParam, lParam );
|
||||
case WM_CHAR :
|
||||
return OnEditChar( hWnd, uMsg, wParam, lParam );
|
||||
default :
|
||||
return OnEditDefault( hWnd, uMsg, wParam, lParam );
|
||||
}
|
||||
}
|
||||
|
||||
HWND UICmdEdit::InitEditProc( HWND hParent, HFONT hFont )
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. ó<><C3B3>
|
||||
ZeroMemory(s_EditStr, sizeof(s_EditStr));
|
||||
|
||||
RECT rect;
|
||||
GetClientRect( hParent, &rect );
|
||||
|
||||
s_hEditWnd = CreateWindowW( L"EDIT", L"",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_TABSTOP | WS_VISIBLE | WS_BORDER | ES_WANTRETURN | ES_AUTOHSCROLL,
|
||||
0, rect.bottom-EDIT_HEIGHT, rect.right, EDIT_HEIGHT,
|
||||
hParent, (HMENU )ID_EDIT,
|
||||
(HINSTANCE )GetWindowLong( hParent, GWL_HINSTANCE ), NULL );
|
||||
|
||||
ShowWindow( s_hEditWnd, SW_SHOW );
|
||||
UpdateWindow( s_hEditWnd );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
::SendMessage(s_hEditWnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE,0));
|
||||
|
||||
// <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD>Ʈ <20>ڽ<EFBFBD><DABD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
|
||||
s_OldEditProc = (WNDPROC )GetWindowLong( s_hEditWnd, GWL_WNDPROC );
|
||||
SetWindowLong( s_hEditWnd, GWL_WNDPROC, (LONG )EditProc );
|
||||
|
||||
return s_hEditWnd;
|
||||
}
|
||||
|
||||
VOID UICmdEdit::ResizeEdit( HWND hParent )
|
||||
{
|
||||
RECT r;
|
||||
GetClientRect( hParent, &r );
|
||||
|
||||
MoveWindow( s_hEditWnd, 0, r.bottom-EDIT_HEIGHT, r.right, EDIT_HEIGHT, TRUE );
|
||||
}
|
||||
|
||||
}
|
||||
37
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdEdit.h
Normal file
37
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdEdit.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* @file UICmdEdit.h
|
||||
* @brief Server UIFramework<72><6B><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Edit<69><74>Ʈ<EFBFBD><C6AE>
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
class UICmdEdit
|
||||
{
|
||||
public:
|
||||
UICmdEdit();
|
||||
~UICmdEdit();
|
||||
|
||||
public:
|
||||
#define MAX_EDITSTRING 1024
|
||||
#define WM_EDIT_RETURN (WM_USER+101)
|
||||
#define EDIT_HEIGHT 16
|
||||
#define ID_EDIT 200
|
||||
|
||||
static HWND s_hEditWnd; // <20><><EFBFBD><EFBFBD>Ʈ,
|
||||
static CHAR s_EditStr[MAX_EDITSTRING];
|
||||
static WNDPROC s_OldEditProc;
|
||||
|
||||
static LRESULT OnEditDefault( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT OnEditKeyDown( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT OnEditChar( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT CALLBACK EditProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static HWND InitEditProc( HWND hParent, HFONT hFont );
|
||||
|
||||
static VOID ResizeEdit( HWND hParent );
|
||||
};
|
||||
|
||||
}
|
||||
111
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdMsgView.cpp
Normal file
111
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdMsgView.cpp
Normal file
@@ -0,0 +1,111 @@
|
||||
#include "Global.h"
|
||||
#include "UICmdMsgView.h"
|
||||
#include "UICmdEdit.h"
|
||||
|
||||
//#include "Richedit.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
HWND UICmdMsgView::s_hInfoWnd = NULL; // <20><><EFBFBD><EFBFBD>Ʈ
|
||||
HWND UICmdMsgView::s_hListWnd = NULL; // <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
/*
|
||||
Len = (int)SendMessage( s_hListWnd, LB_GETCOUNT, 0, 0L );
|
||||
while( Len > MAX_MSGLIST )
|
||||
Len = (int)SendMessage( s_hListWnd, LB_DELETESTRING, 0, 0L );
|
||||
|
||||
// <20><>ü ī<><C4AB><EFBFBD><EFBFBD>
|
||||
int Top = (int)SendMessage( s_hListWnd, LB_GETTOPINDEX, 0, 0L );
|
||||
int ItemHeight = (int)SendMessage( s_hListWnd, LB_GETITEMHEIGHT, 0, 0L );
|
||||
RECT rect;
|
||||
GetClientRect(s_hListWnd, &rect);
|
||||
int PageCnt = abs(rect.bottom-rect.top)/ItemHeight;
|
||||
int Total = abs(Len-Top);
|
||||
|
||||
if(Top+PageCnt+1 == Len)
|
||||
SendMessage( s_hListWnd, LB_SETTOPINDEX, Top+1, 0L );
|
||||
*/
|
||||
// HINSTANCE g_hInstRichEdit;
|
||||
|
||||
|
||||
LRESULT UICmdMsgView::OnVkeyToItem( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
if( (HWND )lParam == s_hListWnd )
|
||||
{
|
||||
if(LOWORD( wParam ) == VK_TAB )
|
||||
SetFocus( GetParent(s_hListWnd) );
|
||||
}
|
||||
return DefWindowProc( hWnd, uMsg, wParam, lParam );
|
||||
}
|
||||
|
||||
VOID UICmdMsgView::ClrarMsgView( void )
|
||||
{
|
||||
SendMessage(s_hListWnd, LB_RESETCONTENT, 0, 0);
|
||||
}
|
||||
|
||||
VOID UICmdMsgView::UpdateInfo(WCHAR* strInfo)
|
||||
{
|
||||
SendMessage(s_hInfoWnd, WM_SETTEXT, MAX_EDITSTRING, (LPARAM)strInfo);
|
||||
}
|
||||
|
||||
HWND UICmdMsgView::InitMsgView( HWND hParent, HFONT hFont )
|
||||
{
|
||||
RECT rect;
|
||||
GetClientRect( hParent, &rect );
|
||||
|
||||
// g_hInstRichEdit = LoadLibraryA("RICHED20.DLL");
|
||||
/*
|
||||
s_hInfoWnd = CreateWindow( _T("RICHEDIT20A"), _T("Info"),
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_TABSTOP | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_READONLY | ES_MULTILINE | ES_AUTOVSCROLL,
|
||||
0, 0, rect.right, INFO_HEIGHT,
|
||||
hParent, (HMENU )ID_INFO,
|
||||
(HINSTANCE )GetWindowLong( hParent, GWL_HINSTANCE ), NULL );
|
||||
*/
|
||||
|
||||
s_hInfoWnd = CreateWindowW( L"EDIT", L"Infomation",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_TABSTOP | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_READONLY | ES_MULTILINE | ES_AUTOVSCROLL,
|
||||
0, 0, rect.right, INFO_HEIGHT,
|
||||
hParent, (HMENU )ID_INFO,
|
||||
(HINSTANCE )GetWindowLong( hParent, GWL_HINSTANCE ), NULL );
|
||||
|
||||
ShowWindow( s_hInfoWnd, SW_SHOW );
|
||||
UpdateWindow( s_hInfoWnd );
|
||||
|
||||
// rich edit 2.0
|
||||
// rich edit <20><><EFBFBD><EFBFBD> Hyperlink<6E><6B> ǥ<><C7A5>
|
||||
// ::SendMessage(s_hInfoWnd, EM_AUTOURLDETECT, TRUE, 0 );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
::SendMessage(s_hInfoWnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE,0));
|
||||
|
||||
|
||||
s_hListWnd = CreateWindowW( L"LISTBOX", L"Message List",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | WS_BORDER | WS_VSCROLL
|
||||
| LBS_DISABLENOSCROLL | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | LBS_USETABSTOPS,
|
||||
0, INFO_HEIGHT, rect.right, rect.bottom - EDIT_HEIGHT - INFO_HEIGHT,
|
||||
hParent, (HMENU )ID_MSGVIEW,
|
||||
(HINSTANCE )GetWindowLong( hParent, GWL_HINSTANCE ),
|
||||
NULL );
|
||||
|
||||
ShowWindow( s_hListWnd, SW_SHOW );
|
||||
UpdateWindow( s_hListWnd );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
::SendMessage(s_hListWnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE,0));
|
||||
|
||||
// FreeLibrary(g_hInstRichEdit);
|
||||
|
||||
return s_hListWnd;
|
||||
}
|
||||
|
||||
VOID UICmdMsgView::ResizeLog( HWND hParent )
|
||||
{
|
||||
RECT r;
|
||||
GetClientRect( hParent, &r );
|
||||
|
||||
MoveWindow( s_hInfoWnd, 0, 0, r.right, INFO_HEIGHT, TRUE );
|
||||
MoveWindow( s_hListWnd, 0, INFO_HEIGHT, r.right, r.bottom - EDIT_HEIGHT - INFO_HEIGHT, TRUE );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
38
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdMsgView.h
Normal file
38
Server/NFAuthTool/NFAuthServer/NaveServer/UICmdMsgView.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* @file UICmdMsgView.h
|
||||
* @brief Server UIFramework<72><6B><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> List, Info<66><6F>Ʈ<EFBFBD><C6AE>
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
class UICmdMsgView
|
||||
{
|
||||
public:
|
||||
UICmdMsgView();
|
||||
~UICmdMsgView();
|
||||
|
||||
public:
|
||||
#define MAX_MSGLIST 1024
|
||||
#define MAX_MSGSTRING 1024
|
||||
#define INFO_HEIGHT 200
|
||||
#define ID_INFO 201
|
||||
#define ID_MSGVIEW 202
|
||||
|
||||
static HWND s_hInfoWnd; // <20><><EFBFBD><EFBFBD>Ʈ
|
||||
static HWND s_hListWnd; // <20><><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
static HWND InitMsgView( HWND hParent, HFONT hFont );
|
||||
static VOID ClrarMsgView( void );
|
||||
|
||||
static VOID UpdateInfo(WCHAR* strInfo);
|
||||
|
||||
static VOID ResizeLog( HWND hParent );
|
||||
|
||||
// ListView <20>Է<EFBFBD>.
|
||||
static LRESULT OnVkeyToItem( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
};
|
||||
}
|
||||
247
Server/NFAuthTool/NFAuthServer/NaveServer/UIFramework.cpp
Normal file
247
Server/NFAuthTool/NFAuthServer/NaveServer/UIFramework.cpp
Normal file
@@ -0,0 +1,247 @@
|
||||
#include "Global.h"
|
||||
#include "UIFramework.h"
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
//////////////////////////////////////
|
||||
UIConsol::UIConsol()
|
||||
{
|
||||
m_bCommandExit = FALSE;
|
||||
}
|
||||
|
||||
UIConsol::~UIConsol()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL UIConsol::Init()
|
||||
{
|
||||
Nave::NFLog::SetLogHandel(UICmdMsgView::s_hListWnd);
|
||||
// Nave::NFLog::EnableLogFile(true);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ʱ<EFBFBD>ȭ
|
||||
InitObject();
|
||||
|
||||
// Ŀ<><C4BF><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
|
||||
InitializeCommand();
|
||||
|
||||
m_bCommandExit = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID UIConsol::StartCommand()
|
||||
{
|
||||
wprintf(L"\n");
|
||||
WCHAR Command[DEF_BUFSIZE];
|
||||
while(!m_bCommandExit)
|
||||
{
|
||||
_getws(Command);
|
||||
|
||||
DoCommand(Command);
|
||||
}
|
||||
|
||||
ReleaseObject();
|
||||
}
|
||||
|
||||
VOID UIConsol::EndCommand()
|
||||
{
|
||||
m_bCommandExit = TRUE;
|
||||
}
|
||||
|
||||
static UIWindow* g_pMain = NULL;
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Descrip : <20><><EFBFBD>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Proc..
|
||||
// Date : 2001-04-11<31><31><EFBFBD><EFBFBD> 10:41:02
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if(g_pMain)
|
||||
return g_pMain->MsgProc(hWnd, uMsg, wParam, lParam);
|
||||
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
UIWindow::UIWindow()
|
||||
{
|
||||
m_bCommandExit = FALSE;
|
||||
m_hFont = NULL;
|
||||
g_pMain = this;
|
||||
}
|
||||
|
||||
UIWindow::~UIWindow()
|
||||
{
|
||||
g_pMain = NULL;
|
||||
|
||||
if(m_hFont)
|
||||
DeleteObject(m_hFont);
|
||||
m_hFont = NULL;
|
||||
}
|
||||
|
||||
VOID UIWindow::OnEditReturn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WCHAR buff[MAX_EDITSTRING];
|
||||
ZeroMemory(buff, sizeof(buff));
|
||||
CopyMemory( buff, (WCHAR*)lParam, sizeof(buff) );
|
||||
|
||||
// <20><><EFBFBD>⼭ <20>Էµ<D4B7> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>м<EFBFBD><D0BC>ؼ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
DoCommand(buff);
|
||||
}
|
||||
|
||||
VOID UIWindow::ResizeWindows( VOID )
|
||||
{
|
||||
UICmdEdit::ResizeEdit(m_hMainWnd);
|
||||
UICmdMsgView::ResizeLog(m_hMainWnd);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Descrip : <20><><EFBFBD>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MsgProc , WindowProc<6F><63><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ȴ<EFBFBD>.
|
||||
// Date : 2001-04-11<31><31><EFBFBD><EFBFBD> 10:41:02
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
LRESULT UIWindow::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_SETFOCUS:
|
||||
SetFocus( UICmdEdit::s_hEditWnd );
|
||||
break;
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
return FALSE;
|
||||
|
||||
case WM_SIZE:
|
||||
ResizeWindows();
|
||||
return FALSE;
|
||||
|
||||
case WM_COMMAND:
|
||||
OnCommand(hWnd, LOWORD(wParam), HIWORD(wParam), lParam);
|
||||
return FALSE;
|
||||
|
||||
// ListView Ű<><C5B0><EFBFBD><EFBFBD> <20>Է<EFBFBD>.
|
||||
case WM_VKEYTOITEM :
|
||||
return UICmdMsgView::OnVkeyToItem(hWnd, uMsg, wParam, lParam);
|
||||
|
||||
// EditBox <20><><EFBFBD><EFBFBD> <20>Է<EFBFBD>.
|
||||
case WM_EDIT_RETURN:
|
||||
OnEditReturn(hWnd, uMsg, wParam, lParam);
|
||||
return FALSE;
|
||||
|
||||
case WM_CLOSE:
|
||||
case WM_DESTROY:
|
||||
case WM_QUIT:
|
||||
EndCommand();
|
||||
return FALSE;
|
||||
}
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
BOOL UIWindow::Init(HINSTANCE hInstance, int nCmdShow, int iWidth, int iHeight, WCHAR* AppName, WCHAR* Icon)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
WNDCLASSEX wcex;
|
||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
||||
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wcex.lpfnWndProc = (WNDPROC)WindowProc;
|
||||
wcex.cbClsExtra = 0;
|
||||
wcex.cbWndExtra = 16;
|
||||
wcex.hInstance = (HINSTANCE)hInstance;
|
||||
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)Icon);
|
||||
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wcex.hbrBackground = NULL;
|
||||
wcex.lpszMenuName = NULL;
|
||||
wcex.lpszClassName = AppName;
|
||||
wcex.hIconSm = LoadIcon(wcex.hInstance, Icon);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
RegisterClassExW(&wcex);
|
||||
|
||||
if(iHeight < INFO_HEIGHT+150)
|
||||
{
|
||||
iHeight = INFO_HEIGHT+150;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE, AppName, AppName, WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, iWidth, iHeight,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
|
||||
if(!m_hMainWnd)
|
||||
{
|
||||
MessageBoxW(NULL, L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", L"Error", MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
m_hFont = ::CreateFontW(12, 0, 0, 0, 0, 0, 0, 0, HANGEUL_CHARSET, 3, 2, 1, VARIABLE_PITCH|FF_ROMAN, L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü");
|
||||
|
||||
UICmdEdit::InitEditProc(m_hMainWnd, m_hFont);
|
||||
UICmdMsgView::InitMsgView(m_hMainWnd, m_hFont);
|
||||
|
||||
Nave::NFLog::SetLogHandel(UICmdMsgView::s_hListWnd);
|
||||
// Nave::NFLog::EnableLogFile(true);
|
||||
|
||||
ShowWindow(nCmdShow); // Show The UIWindow
|
||||
SetForegroundWindow(m_hMainWnd); // Slightly Higher Priority
|
||||
// EditBox<6F><78> <20><>Ŀ<EFBFBD><C4BF> <20>ֱ<EFBFBD>
|
||||
SetFocus(UICmdEdit::s_hEditWnd); // Sets Keyboard Focus To The UIWindow
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD> (<28><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD>)
|
||||
HICON hIcon = LoadIcon( hInstance, (LPCTSTR)Icon );
|
||||
SendMessage( m_hMainWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hIcon );
|
||||
SendMessage( m_hMainWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hIcon );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ʱ<EFBFBD>ȭ
|
||||
InitObject();
|
||||
|
||||
// Ŀ<><C4BF><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
|
||||
InitializeCommand();
|
||||
|
||||
m_bCommandExit = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID UIWindow::ShowWindow(int nCmdShow)
|
||||
{
|
||||
::ShowWindow(m_hMainWnd, nCmdShow); // Show The UIWindow
|
||||
}
|
||||
|
||||
VOID UIWindow::StartCommand()
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
while( !m_bCommandExit )
|
||||
{
|
||||
if( GetMessage( &msg, NULL, 0U, 0U ) )
|
||||
{
|
||||
TranslateMessage( &msg );
|
||||
DispatchMessage( &msg );
|
||||
}
|
||||
}
|
||||
|
||||
LOG_IMPORTANT((L"Programe Quitting"));
|
||||
|
||||
ReleaseObject();
|
||||
|
||||
InvalidateRect(m_hMainWnd, NULL, FALSE);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> ǥ<><C7A5> <20><> <20>ֱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>
|
||||
for(int i = 0; i < 10; i++)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> ȭ<>鿡 <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>.
|
||||
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
|
||||
{
|
||||
TranslateMessage( &msg );
|
||||
DispatchMessage( &msg );
|
||||
}
|
||||
}
|
||||
|
||||
Nave::NFLog::CloseLog();
|
||||
|
||||
Sleep(1000);
|
||||
}
|
||||
|
||||
VOID UIWindow::EndCommand()
|
||||
{
|
||||
m_bCommandExit = TRUE;
|
||||
InvalidateRect(m_hMainWnd, NULL, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
220
Server/NFAuthTool/NFAuthServer/NaveServer/UIFramework.h
Normal file
220
Server/NFAuthTool/NFAuthServer/NaveServer/UIFramework.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/**
|
||||
* @file UIFramework.h
|
||||
* @brief Server<65><72> ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> UIFramework <20><>ü
|
||||
* @remarks
|
||||
* @author <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(edith2580@gmail.com)
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "UICmdEdit.h"
|
||||
#include "UICmdMsgView.h"
|
||||
#include <vector>
|
||||
|
||||
namespace NaveServer {
|
||||
|
||||
/// <20><><EFBFBD>ο<EFBFBD> Ŀ<>ǵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
/// ADD_COMMAND(_T("help"), CCmdHelp, L"ȭ<>鿡 Ŀ<><C4BF><EFBFBD>帮<EFBFBD><E5B8AE>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.");
|
||||
#define ADD_COMMAND(cmd, object, msg) AddCommand(cmd, new object, msg)
|
||||
|
||||
/**
|
||||
* @class UICommand
|
||||
* @brief <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>̼ǿ<CCBC><C7BF><EFBFBD> Ŀ<>ǵ带 <20>ۼ<EFBFBD><DBBC>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> <20><>ü
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class UICommand
|
||||
{
|
||||
public:
|
||||
virtual BOOL DoProcess(WCHAR* lpParam) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @class UICommandFactory
|
||||
* @brief Ŀ<>ǵ带 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Factory <20><>ü Server<65><72> Server<65><72> UI<55><49>ü<EFBFBD><C3BC> <20><><EFBFBD>ӹ´<DEB4>.
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class UICommandFactory
|
||||
{
|
||||
public:
|
||||
BOOL AddCommand(const WCHAR* szCommand, UICommand* lpCommand, const WCHAR* szMessage)
|
||||
{
|
||||
if(0 == szCommand, 0 == lpCommand)
|
||||
return FALSE;
|
||||
|
||||
m_CMDVector.push_back(COMMAND(szCommand, lpCommand, szMessage));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID ReleaseCommand()
|
||||
{
|
||||
int iSize = m_CMDVector.size();
|
||||
for(int i = 0; i < iSize; ++i)
|
||||
{
|
||||
delete m_CMDVector[i].m_lpCMD;
|
||||
}
|
||||
|
||||
m_CMDVector.clear();
|
||||
}
|
||||
|
||||
virtual VOID InitializeCommand() {};
|
||||
|
||||
virtual VOID StartCommand() {}; // UIConsol<6F><6C><EFBFBD><EFBFBD> Command <20>Է<EFBFBD>
|
||||
virtual VOID EndCommand() {};
|
||||
|
||||
VOID ShowCommand()
|
||||
{
|
||||
LOG_IMPORTANT( (L"------------------- Commands -------------------") );
|
||||
int iSize = m_CMDVector.size();
|
||||
for(int i = 0; i < iSize; ++i)
|
||||
{
|
||||
LOG_IMPORTANT((L"%s : %s", m_CMDVector[i].m_szCMD, m_CMDVector[i].m_szMSG));
|
||||
}
|
||||
LOG_IMPORTANT( (L"----------------- Commands End -----------------") );
|
||||
}
|
||||
|
||||
VOID DoCommand(WCHAR* Command)
|
||||
{
|
||||
WCHAR Buff[DEF_BUFSIZE];
|
||||
ZeroMemory(Buff, DEF_BUFSIZE);
|
||||
wcscpy(Buff, Command);
|
||||
|
||||
WCHAR* cmd;
|
||||
cmd = wcstok(Command, L" ");
|
||||
if(cmd)
|
||||
{
|
||||
Nave::uint32 uiHash = Nave::Hash(cmd);
|
||||
WCHAR* NextCmd = &Buff[wcslen(cmd)+1];
|
||||
|
||||
int iSize = m_CMDVector.size();
|
||||
for(int i = 0; i < iSize; ++i)
|
||||
{
|
||||
if(m_CMDVector[i].m_uiHash != uiHash)
|
||||
continue;
|
||||
|
||||
m_CMDVector[i].m_lpCMD->DoProcess(NextCmd);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
UICommandFactory()
|
||||
{
|
||||
}
|
||||
~UICommandFactory()
|
||||
{
|
||||
ReleaseCommand();
|
||||
}
|
||||
|
||||
private:
|
||||
struct COMMAND
|
||||
{
|
||||
Nave::uint32 m_uiHash;
|
||||
WCHAR m_szCMD[32];
|
||||
WCHAR m_szMSG[128];
|
||||
UICommand* m_lpCMD;
|
||||
|
||||
COMMAND(const WCHAR* szCommand, UICommand* lpCMD, const WCHAR* szMessage)
|
||||
{
|
||||
m_uiHash = Nave::Hash(szCommand);
|
||||
|
||||
wcscpy(m_szCMD, szCommand);
|
||||
|
||||
if(szMessage)
|
||||
wcscpy(m_szMSG, szMessage);
|
||||
else
|
||||
wcscpy(m_szMSG, L"No Help Message");
|
||||
|
||||
m_lpCMD = lpCMD;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::vector<COMMAND> CMDVector;
|
||||
CMDVector m_CMDVector;
|
||||
};
|
||||
|
||||
/**
|
||||
* @class UIConsol
|
||||
* @brief <20>ܼ<EFBFBD> UI
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class UIConsol : public UICommandFactory
|
||||
{
|
||||
BOOL m_bCommandExit;
|
||||
public:
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ʱ<EFBFBD>ȭ <20>մϴ<D5B4>. (<28><><EFBFBD><EFBFBD><EFBFBD>켳<EFBFBD><ECBCB3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD> ȣ<><C8A3>)
|
||||
virtual VOID InitObject() {};
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. (<28><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(EndProcessȣ<73><C8A3><EFBFBD><EFBFBD>) ȣ<><C8A3>)
|
||||
virtual VOID ReleaseObject() {};
|
||||
|
||||
BOOL Init();
|
||||
|
||||
virtual VOID InitializeCommand() {};
|
||||
virtual VOID StartCommand(); // UIConsol<6F><6C><EFBFBD><EFBFBD> Command <20>Է<EFBFBD>
|
||||
virtual VOID EndCommand();
|
||||
|
||||
public:
|
||||
UIConsol(VOID);
|
||||
~UIConsol(VOID);
|
||||
};
|
||||
|
||||
/**
|
||||
* @class UIWindow
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI
|
||||
* @remarks
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-05-09
|
||||
*/
|
||||
class UIWindow : public UICommandFactory
|
||||
{
|
||||
public:
|
||||
HWND GetWnd() { return m_hMainWnd; }
|
||||
BOOL IsExit() { return m_bCommandExit; }
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ʱ<EFBFBD>ȭ <20>մϴ<D5B4>. (<28><><EFBFBD><EFBFBD><EFBFBD>켳<EFBFBD><ECBCB3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD> ȣ<><C8A3>)
|
||||
virtual VOID InitObject() {};
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. (<28><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(EndProcessȣ<73><C8A3><EFBFBD><EFBFBD>) ȣ<><C8A3>)
|
||||
virtual VOID ReleaseObject() {};
|
||||
|
||||
virtual VOID ShowWindow(int nCmdShow);
|
||||
|
||||
// Windows MsgProc
|
||||
virtual LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
|
||||
BOOL Init(HINSTANCE hInstance, int nCmdShow, int iWidth, int iHeight, WCHAR* AppName, WCHAR* Icon);
|
||||
|
||||
virtual VOID InitializeCommand() {};
|
||||
virtual VOID StartCommand(); // UIConsol<6F><6C><EFBFBD><EFBFBD> Command <20>Է<EFBFBD>
|
||||
virtual VOID EndCommand();
|
||||
|
||||
public:
|
||||
UIWindow(VOID);
|
||||
~UIWindow(VOID);
|
||||
|
||||
private:
|
||||
HWND m_hMainWnd;
|
||||
BOOL m_bCommandExit;
|
||||
HFONT m_hFont;
|
||||
|
||||
VOID ResizeWindows( VOID );
|
||||
|
||||
// WM_EDIT_RETURN
|
||||
virtual VOID OnEditReturn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
// WM_COMMAND
|
||||
virtual VOID OnCommand(HWND hWnd, INT nID, INT iEvent, LPARAM lParam) { return; }
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user