📄 mapserver.cpp
字号:
return false;
}
#endif
//
// MAP Class积己
//
g_pMap = new Map;
if( !g_pMap )
{
ErrorMsg("(X) Create MAP ERROR" );
return FALSE;
}
// --------------------------------------------------------------------------------
// DB俊辑 扁檬 沥焊甫 掘澜
// --------------------------------------------------------------------------------
if( !g_Base.LoadDBData())
{
ErrorMsg("(X) DB Load ERROR" );
return FALSE;
}
ErrorMsg("(O) DB Load Success");
for(int i = 0 ; i < g_pMap->m_nMaxLayer ; ++i)
{
g_AIMsgList[i] = new SafeList ;
}
// --------------------------------------------------------------------------------
// Map Server Socket 积己
// --------------------------------------------------------------------------------
g_pServer = new MapServerSocket;
if( !g_pServer->Initialize() )
{
ErrorMsg("(X) Map Socket ERROR" );
return FALSE;
}
ErrorMsg("(O) Map Socket Sucess");
#ifdef DEF_AUTHCODE
//Jason 2004-10-06
g_pServer->Load_AuthCode();
#endif
// --------------------------------------------------------------------------------
// WORLD SERVER - TCP SOCKET积己
// --------------------------------------------------------------------------------
g_lpDBSock = new DBSocket ;
if( !g_lpDBSock->bInit() )
{
ErrorMsg("(X) World TCP Socket Erro" );
return FALSE;
}
ErrorMsg("(O) World TCP Socket Sucess");
// --------------------------------------------------------------------------------
// WORLD SERVER - UDP SOCKET积己
// --------------------------------------------------------------------------------
g_lpUdpSock = new CUdpSocket;
if (!g_lpUdpSock->bInit(_Module.m_szUdpIP ,_Module.m_nMapPORT) )
{
ErrorMsg("(X) World UDP Socket Error" );
return FALSE ;
}
g_lpLog = new CLogManager ;
g_lpLog->Init() ;
m_ServerStatus = SERVER_START;
char lpszFileName[MAX_PATH];
sprintf( lpszFileName, "%s%s%s.exe", _Module.m_szDrv, _Module.m_szPath, _Module.m_szFname );
DWORD dwHandle;
DWORD dwFileVersionInfoSize = GetFileVersionInfoSize((LPTSTR)lpszFileName, &dwHandle);
if (dwFileVersionInfoSize)
{
LPVOID lpData = (LPVOID)new BYTE[dwFileVersionInfoSize];
if ( lpData )
{
if (GetFileVersionInfo((LPTSTR)lpszFileName, dwHandle, dwFileVersionInfoSize, lpData))
{
LPVOID lpInfo;
UINT unInfoLen;
VS_FIXEDFILEINFO m_FileInfo;
if (VerQueryValue(lpData, _T("\\"), &lpInfo, &unInfoLen))
{
if (unInfoLen == sizeof(m_FileInfo))
{
memcpy(&m_FileInfo, lpInfo, unInfoLen);
char szVer[64];
sprintf (szVer, "Ver : %d.%d.%d.%d",
(WORD)((m_FileInfo.dwFileVersionMS & 0xFFFF0000) >> 16),
(WORD)(m_FileInfo.dwFileVersionMS & 0x0000FFFF),
(WORD)((m_FileInfo.dwFileVersionLS & 0xFFFF0000) >> 16),
(WORD)(m_FileInfo.dwFileVersionLS & 0x0000FFFF) );
ErrorMsg( "Version: %s", szVer );
}
}
}
}
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////
// Read Setup Registry
//
// Registery File俊辑 包访 Setting沥焊甫 Load矫糯
// --------------------------------------------------------
// IP Address Load
// Prot Load
//
// Map Seq
// PK Mode
////////////////////////////////////////////////////////////////////////////////////////
BOOL CServiceModule::ReadRegisteryValue()
{
// --------------------------------------------------------------------------------
// 角青 颇老 疙阑 掘澜
// --------------------------------------------------------------------------------
GetModuleFileName(NULL, m_szFilename, sizeof( m_szFilename) );
_splitpath( m_szFilename, m_szDrv, m_szPath, m_szFname, m_szExt);
// --------------------------------------------------------------------------------
// Registry沥焊甫 掘澜
// --------------------------------------------------------------------------------
DWORD pdwCount;
char strRegName[512] = "SOFTWARE\\Zemi Interactive, Inc.\\";
strcat( strRegName, m_szFname );
// --------------------------------------------------------------------------------
// 滚傈 沥焊甫 啊廉棵 荐 绝促.
// --------------------------------------------------------------------------------
GetMapServerVersion() ;
CRegKey keySetting;
LONG lRes = keySetting.Open(HKEY_LOCAL_MACHINE, strRegName, KEY_READ);
if (lRes != ERROR_SUCCESS)
{
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
MessageBox( NULL, "Map Server Registry Error", "Map Server", MB_OK );
#else
LogEvent(_T("Map Server Registry Error"));
#endif
return FALSE;
}
// Get Map SEQ
lRes = keySetting.QueryValue( _Module.m_nMapSeq, _T("MapSeq") );
if (lRes != ERROR_SUCCESS)
{
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
MessageBox( NULL, "Map Serial Registry Error", "Map Server", MB_OK );
#else
LogEvent(_T("Map Serial Registry Error"));
#endif
return FALSE;
}
// DB Server IP Address
pdwCount = 50;
lRes = keySetting.QueryValue( _Module.m_szDBIP, _T("DB_IP"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
MessageBox( NULL, "DB IP Registry Error", "Map Server", MB_OK );
#else
LogEvent(_T("DB IP Registry Error"));
#endif
return FALSE;
}
// Map File #0 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[0], _T("MapFile0"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[0], 0x00, sizeof( m_strMapFile[0] ) );
}
// Map File #1 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[1], _T("MapFile1"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[1], 0x00, sizeof( m_strMapFile[1] ) );
}
// Map File #2 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[2], _T("MapFile2"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[2], 0x00, sizeof( m_strMapFile[2] ) );
}
// Map File #3 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[3], _T("MapFile3"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[3], 0x00, sizeof( m_strMapFile[3] ) );
}
// Map File #4 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[4], _T("MapFile4"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[4], 0x00, sizeof( m_strMapFile[4] ) );
}
// Map File #5 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[5], _T("MapFile5"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[5], 0x00, sizeof( m_strMapFile[5] ) );
}
// Map File #6 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[6], _T("MapFile6"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[6], 0x00, sizeof( m_strMapFile[6] ) );
}
// Map File #7 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[7], _T("MapFile7"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[7], 0x00, sizeof( m_strMapFile[7] ) );
}
// Map File #8 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[8], _T("MapFile8"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[8], 0x00, sizeof( m_strMapFile[8] ) );
}
// Map File #9 沥焊甫 Read
pdwCount = 256;
lRes = keySetting.QueryValue( m_strMapFile[9], _T("MapFile9"), &pdwCount );
if (lRes != ERROR_SUCCESS)
{
memset( m_strMapFile[9], 0x00, sizeof( m_strMapFile[9] ) );
}
// 眠啊 利牢 MAP SEQ沥焊甫 掘澜
m_nWorldID = m_nMapSeq / 10000; // GAME WORLD ID盒府
m_nServerID = m_nMapSeq / 100; // Map ID
m_nServerUniqNum = ((m_nServerID%100)*10 + m_nMapSeq % 100 )*10000000 ;
keySetting.Close();
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////
// Clean Memory (Map Server)
//
////////////////////////////////////////////////////////////////////////////////////////
void CServiceModule::Clean_MapServer()
{
_Module.m_bService = FALSE;
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("MapServerSocket stop Start") ;
#endif
SAFE_DELETE< MapServerSocket> (&g_pServer);
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("DBSocket stop Start") ;
#endif
SAFE_DELETE< DBSocket> (&g_lpDBSock);
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("DBSocket stop End") ;
#endif
SAFE_DELETE< CUdpSocket> (&g_lpUdpSock);
SAFE_DELETE< CLogManager> (&g_lpLog);
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("g_AIMsgList stop Start") ;
#endif
if(g_pMap )
{
for(int i = 0 ; i < g_pMap->m_nMaxLayer ; ++i)
{
SAFE_DELETE<SafeList > (&g_AIMsgList[i]) ;
}
}
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("Map stop Start") ;
#endif
SAFE_DELETE< Map > (&g_pMap);
#ifdef DEF_SERVERDOWNDELAYTRACE
ErrorMsg("Map stop End") ;
#endif
#ifdef DEF_AZIT
SAFE_DELETE< AzitManager > (&m_pAzitManager ); // Delete Azit Manager
#endif
#ifdef DEF_UNIQUEITEM
SAFE_DELETE< UniqueManager > (&m_pUniqueManager); // Delete Unique Manager
#endif
SAFE_DELETE< ServerMem > (&g_pServerMem ); // Delete Server Memory
SAFE_DELETE< CQuestEngine > (&g_pQuestEngine ); // Delete Quest Engine
}
////////////////////////////////////////////////////////////////////////////////////////
// Function : Zemi Map Server Main
//
////////////////////////////////////////////////////////////////////////////////////////
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
g_hInstance = hInstance;
// --------------------------------------------------------------------------------
// Winsocekt 荤侩 檬扁拳
// --------------------------------------------------------------------------------
{
WSACleanup();
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return FALSE;
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return FALSE;
}
}
#ifdef DEF_NEWREGISTRY
////////////////////////////////////////////////////////////////////////
// 角青 颇老 疙阑 掘澜
////////////////////////////////////////////////////////////////////////
TCHAR mfilename[MAX_PATH];
TCHAR drv[MAX_PATH];
TCHAR path[MAX_PATH];
TCHAR fname[MAX_PATH];
TCHAR ext[MAX_PATH];
GetModuleFileName(NULL, mfilename, sizeof mfilename);
_splitpath(mfilename, drv, path, fname, ext);
#endif
// --------------------------------------------------------------------------------
// Debug Mode
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
#ifdef DEF_NEWREGISTRY
if(lpCmdLine[0] != '\0')
{
SaveParam_MapServer(lpCmdLine, fname);
return 0;
}
#endif
_Module.m_bService = TRUE;
DialogBox( hInstance , MAKEINTRESOURCE( IDD_DIALOG_MAP ), HWND_DESKTOP, MainDlgProc);
return 0;
// --------------------------------------------------------------------------------
// Relase Mode
// --------------------------------------------------------------------------------
#else
#ifdef DEF_NEWREGISTRY
////////////////////////////////////////////////////////////////////////
// 辑厚胶 矫累
////////////////////////////////////////////////////////////////////////
lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
#else
// 角青 颇老 疙阑 掘澜
TCHAR mfilename[MAX_PATH];
TCHAR drv[MAX_PATH];
TCHAR path[MAX_PATH];
TCHAR fname[MAX_PATH];
TCHAR ext[MAX_PATH];
GetModuleFileName(NULL, mfilename, sizeof mfilename);
_splitpath(mfilename, drv, path, fname, ext);
// 辑厚胶 矫累
lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
#endif
_Module.Init(ObjectMap, hInstance, IDS_SERVICENAME, &LIBID_MAPSERVERLib);
_Module.m_bService = TRUE;
// 颇扼固磐肺 涝仿等 蔼阑 掘澜
TCHAR szTokens[] = _T(" ");
LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
// 颇扼固磐 涝仿捞 等版快父 贸府
if( lpszToken != NULL )
{
// Service Install
if( !strcmpi( lpszToken , _T( "-I") ) )
{
strcpy( _Module.m_szServiceName, fname );
// Register as Service
return _Module.RegisterServer(TRUE, TRUE);
}
// Service UnInstall
else if( !strcmpi( lpszToken , _T( "-U") ) )
{
strcpy( _Module.m_szServiceName, fname );
return _Module.UnregisterServer();
}
#ifdef DEF_NEWREGISTRY
// 7.22 by kuma
else
{
if ( SaveParam_MapServer( lpszToken, fname ) )
return 0;
}
#endif
}
_Module.Start();
// When we get here, the service has been stopped
return _Module.m_status.dwWin32ExitCode;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -