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:
95
Server/AdminTool/AdminToolServer/AdminManagerServer.rc
Normal file
95
Server/AdminTool/AdminToolServer/AdminManagerServer.rc
Normal file
@@ -0,0 +1,95 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Çѱ¹¾î resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
|
||||
#pragma code_page(949)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
IDR_MENU_POPUP MENU
|
||||
BEGIN
|
||||
POPUP "MENU"
|
||||
BEGIN
|
||||
POPUP "Console(&C)"
|
||||
BEGIN
|
||||
MENUITEM "Open Console(&O)", ID_CONSOL_OPENCONSOLE
|
||||
MENUITEM "Close Console(&C)", ID_CONSOLE_CLOSECONSOLE
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Connect All(&A)", ID_CONNECTALL
|
||||
MENUITEM "Flush(&F)", ID_FLUSH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Shutdown(&E)", ID_QUIT
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_TRAY_ICON ICON "AdminToolServer.ico"
|
||||
#endif // Çѱ¹¾î resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
BIN
Server/AdminTool/AdminToolServer/AdminToolServer.ico
Normal file
BIN
Server/AdminTool/AdminToolServer/AdminToolServer.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
233
Server/AdminTool/AdminToolServer/AdminToolServer.vcproj
Normal file
233
Server/AdminTool/AdminToolServer/AdminToolServer.vcproj
Normal file
@@ -0,0 +1,233 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="AdminToolServer"
|
||||
ProjectGUID="{21AA2880-D5FC-40D4-82B2-5ECA5579B815}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="./;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary;../AdminToolLibrary;"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;NO_GAMEGUARD"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/AdminToolServer.exe"
|
||||
LinkIncremental="0"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/AdminToolServer.pdb"
|
||||
GenerateMapFile="TRUE"
|
||||
MapFileName="$(OutDir)/AdminToolServer.map"
|
||||
MapExports="TRUE"
|
||||
MapLines="TRUE"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="./;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary;../AdminToolLibrary;"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/AdminToolServer.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/AdminToolServer.pdb"
|
||||
GenerateMapFile="TRUE"
|
||||
MapFileName="$(OutDir)/AdminToolServer.map"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Network"
|
||||
Filter="">
|
||||
<Filter
|
||||
Name="Dispatch"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\RYL_AdminMgrDispatch.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminMgrDispatch.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AgentServerDispatch.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AgentServerDispatch.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Keeper"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\RYL_ServerRequestKeeper.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_ServerRequestKeeper.h">
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="SessionTable"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\ClientDispatchTable.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ClientDispatchTable.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AgentServerTable.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AgentServerTable.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
<File
|
||||
RelativePath=".\AdminManagerServer.rc">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\AdminToolServer.ico">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="SQL Scripts"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\P2_1480_AdminTool DB_All Create.sql">
|
||||
</File>
|
||||
<Filter
|
||||
Name="Add"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\P2_1440_Table Add.sql">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\P2_1480_AdminToolDB All Edit (AdminInfo Excepted).sql">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\P2_1480_Procedure Alter.sql">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Etc"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\New Admin Account Add.sql">
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\resource.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminManagerServer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminManagerServer.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminServerCommand.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminWindow.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminWindow.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RYL_AdminWinMain.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
53
Server/AdminTool/AdminToolServer/ClientDispatchTable.cpp
Normal file
53
Server/AdminTool/AdminToolServer/ClientDispatchTable.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "ClientDispatchTable.h"
|
||||
#include "RYL_AdminMgrDispatch.h"
|
||||
#include <./Network/Session/Session.h>
|
||||
#include <Stream/Buffer/Buffer.h>
|
||||
|
||||
|
||||
void CClientDispatchTable::insert(CRylAdminMgrDispatch * lpDispatch)
|
||||
{
|
||||
DispatchLock::Syncronize Lock(m_DispatchLock);
|
||||
|
||||
m_lstDispatch.push_back(lpDispatch);
|
||||
}
|
||||
|
||||
void CClientDispatchTable::erase(CRylAdminMgrDispatch * lpDispatch)
|
||||
{
|
||||
DispatchLock::Syncronize Lock(m_DispatchLock);
|
||||
|
||||
lstDispatch::iterator Itr_ =
|
||||
std::find(m_lstDispatch.begin(), m_lstDispatch.end(), lpDispatch);
|
||||
|
||||
if(m_lstDispatch.end() != Itr_)
|
||||
{
|
||||
m_lstDispatch.erase(Itr_);
|
||||
}
|
||||
}
|
||||
|
||||
bool CClientDispatchTable::SendAll(CBuffer * lpBuffer)
|
||||
{
|
||||
bool bResult = true;
|
||||
|
||||
DispatchLock::Syncronize Lock(m_DispatchLock);
|
||||
|
||||
lstDispatch::iterator Itr_ = m_lstDispatch.begin();
|
||||
lstDispatch::iterator end_ = m_lstDispatch.end();
|
||||
|
||||
for(;Itr_ != end_;)
|
||||
{
|
||||
CRylAdminMgrDispatch * lpDispatch = (*Itr_);
|
||||
|
||||
CSession & Session = lpDispatch->GetSession();
|
||||
|
||||
if(!Session.SendPending(lpBuffer))
|
||||
{
|
||||
bResult = false;
|
||||
}
|
||||
|
||||
++ Itr_;
|
||||
}
|
||||
|
||||
return bResult;
|
||||
}
|
||||
36
Server/AdminTool/AdminToolServer/ClientDispatchTable.h
Normal file
36
Server/AdminTool/AdminToolServer/ClientDispatchTable.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef _CLIENT_DISPATCH_TABLE_H_
|
||||
#define _CLIENT_DISPATCH_TABLE_H_
|
||||
|
||||
#include <Thread/Lock.h>
|
||||
#include <Pattern/Singleton.h>
|
||||
|
||||
class CBuffer;
|
||||
class CRylAdminMgrDispatch;
|
||||
|
||||
/*!
|
||||
\class CClientDispatchTable
|
||||
운영서버와 연결중인 클라이언트 연결 세션 테이블
|
||||
*/
|
||||
class CClientDispatchTable
|
||||
{
|
||||
private:
|
||||
typedef CCSLock DispatchLock ;
|
||||
typedef std::list<CRylAdminMgrDispatch*> lstDispatch ;
|
||||
|
||||
DispatchLock m_DispatchLock;
|
||||
lstDispatch m_lstDispatch;
|
||||
|
||||
public:
|
||||
static CClientDispatchTable & GetInstance()
|
||||
{
|
||||
static CClientDispatchTable DispatchTable;
|
||||
return DispatchTable;
|
||||
}
|
||||
|
||||
void insert(CRylAdminMgrDispatch * lpDispatch);
|
||||
void erase(CRylAdminMgrDispatch * lpDispatch);
|
||||
bool SendAll(CBuffer * lpBuffer);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
-- VALUES 이후의 괄호안의 항목을 편집합니다.
|
||||
|
||||
INSERT INTO TblToolAdmin(strAdminID, strPasswd, strLevel, strName, strIP)
|
||||
VALUES ('zunpyo', '1234', 'D', '임준표', '61.251.229.131')
|
||||
38
Server/AdminTool/AdminToolServer/P2_1440_Table Add.sql
Normal file
38
Server/AdminTool/AdminToolServer/P2_1440_Table Add.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
CREATE TABLE [dbo].[TblRestraintChar] (
|
||||
[tinyServerID] [tinyint] NOT NULL ,
|
||||
[UID] [int] NOT NULL ,
|
||||
[strClientID] [varchar] (20) NOT NULL ,
|
||||
[strCharName] [varchar] (20) NOT NULL ,
|
||||
[tinyType] [tinyint] NOT NULL ,
|
||||
[tinyKind] [tinyint] NOT NULL ,
|
||||
[tinyBlocked] [tinyint] NOT NULL ,
|
||||
[dateStartTime] [smalldatetime] NOT NULL ,
|
||||
[dateEndTime] [smalldatetime] NOT NULL ,
|
||||
[intEndTime] [int] NOT NULL ,
|
||||
[strAdminID] [varchar] (20) NULL ,
|
||||
[strDescription] [varchar] (30) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg] (
|
||||
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg_Log] (
|
||||
[LogID] [int] NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL ,
|
||||
[InsertTime] [smalldatetime] NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
@@ -0,0 +1,470 @@
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CMS_DoingRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[CMS_DoingRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USPCheckRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[USPCheckRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USPDeleteRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[USPDeleteRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblChatBanList]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblChatBanList]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblGMLogMsg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblGMLogMsg]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblGMLogMsg_Log]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblGMLogMsg_Log]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblInterestedUser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblInterestedUser]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblRestraintChar]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblAdminStore]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblAdminStore]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblDetailLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblDetailLog]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblLog]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblToolAdmin]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblToolAdmin]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblChatBanList] (
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NULL ,
|
||||
[RemainTime] [int] NULL ,
|
||||
[AdminCID] [int] NULL ,
|
||||
[StartTime] [smalldatetime] NULL ,
|
||||
[EndTime] [smalldatetime] NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg] (
|
||||
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg_Log] (
|
||||
[LogID] [int] NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL ,
|
||||
[InsertTime] [smalldatetime] NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblInterestedUser] (
|
||||
[strAccount] [varchar] (20) COLLATE NOT NULL ,
|
||||
[strReason] [varchar] (260) COLLATE NULL ,
|
||||
[intUID] [int] NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblRestraintChar] (
|
||||
[tinyServerID] [tinyint] NOT NULL ,
|
||||
[UID] [int] NOT NULL ,
|
||||
[strClientID] [varchar] (20) NOT NULL ,
|
||||
[strCharName] [varchar] (20) NOT NULL ,
|
||||
[tinyType] [tinyint] NOT NULL ,
|
||||
[tinyKind] [tinyint] NOT NULL ,
|
||||
[tinyBlocked] [tinyint] NOT NULL ,
|
||||
[dateStartTime] [smalldatetime] NOT NULL ,
|
||||
[dateEndTime] [smalldatetime] NOT NULL ,
|
||||
[intEndTime] [int] NOT NULL ,
|
||||
[strAdminID] [varchar] (20) NULL ,
|
||||
[strDescription] [varchar] (30) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblAdminStore] (
|
||||
[uid] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[server] [tinyint] NOT NULL ,
|
||||
[owner] [varchar] (20) NOT NULL ,
|
||||
[ItemName] [varchar] (32) NOT NULL ,
|
||||
[ItemInfo] [binary] (100) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblDetailLog] (
|
||||
[DetailLogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[LogID] [int] NOT NULL ,
|
||||
[UpdateDate] [smalldatetime] NOT NULL ,
|
||||
[UpdateType] [int] NULL ,
|
||||
[Before] [varchar] (200) NULL ,
|
||||
[After] [varchar] (200) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblLog] (
|
||||
[UID] [int] NOT NULL ,
|
||||
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[Login] [smalldatetime] NOT NULL ,
|
||||
[Logout] [smalldatetime] NULL ,
|
||||
[UseIP] [varchar] (16) NOT NULL ,
|
||||
[UseMsg] [varchar] (100) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblToolAdmin] (
|
||||
[UID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[strAdminID] [varchar] (20) NOT NULL ,
|
||||
[strPasswd] [varchar] (20) NOT NULL ,
|
||||
[strLevel] [varchar] (2) NOT NULL ,
|
||||
[strName] [varchar] (20) NOT NULL ,
|
||||
[strIP] [varchar] (16) NOT NULL ,
|
||||
[dateRegit] [smalldatetime] NOT NULL ,
|
||||
[binZone] [binary] (3400) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblGMLogMsg] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg_Log] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblGMLogMsg_Log] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblDetailLog] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblDetailLog] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[DetailLogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblLog] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblLog] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblToolAdmin] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblToolAdmin] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[strAdminID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE INDEX [idx_TblChatBanList_cid] ON [dbo].[TblChatBanList]([CID]) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg] ADD
|
||||
CONSTRAINT [DF_TblGMLogMsg_UID] DEFAULT (0) FOR [UID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_CID] DEFAULT (0) FOR [CID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_EditDate] DEFAULT (getdate()) FOR [EditDate]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg_Log] ADD
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_UID] DEFAULT (0) FOR [UID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_CID] DEFAULT (0) FOR [CID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_EditDate] DEFAULT (getdate()) FOR [EditDate],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_InsertTime] DEFAULT (getdate()) FOR [InsertTime]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblRestraintChar] ADD
|
||||
CONSTRAINT [DF__TblRestra__strCh__11158940] DEFAULT ('ACCOUNT') FOR [strCharName],
|
||||
CONSTRAINT [DF__TblRestra__dateS__1209AD79] DEFAULT (getdate()) FOR [dateStartTime],
|
||||
CONSTRAINT [DF__TblRestra__intEn__12FDD1B2] DEFAULT (0) FOR [intEndTime]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblDetailLog] ADD
|
||||
CONSTRAINT [DF_TblDetailLog_UpdateDate] DEFAULT (getdate()) FOR [UpdateDate]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblLog] ADD
|
||||
CONSTRAINT [DF_TblLog_Login] DEFAULT (getdate()) FOR [Login]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblToolAdmin] ADD
|
||||
CONSTRAINT [DF_TblToolAdmin_dateRegit] DEFAULT (getdate()) FOR [dateRegit]
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- 블럭 하기
|
||||
CREATE PROC CMS_DoingRestraintChar @ServerID TINYINT,@UID INT, @strClientID VARCHAR(20), @strCharName varchar(16),@Type tinyint,@Kind tinyint,@EndDate varchar(10),
|
||||
@AdminID VARCHAR(20),@Description VARCHAR(50)
|
||||
AS
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @EndDateTime INT
|
||||
|
||||
IF @strCharName IS NULL
|
||||
BEGIN
|
||||
SET @strCharName = 'Unknown'
|
||||
END
|
||||
|
||||
SET @EndDateTime = cast(@EndDate as INT)
|
||||
|
||||
INSERT INTO TblRestraintChar (tinyServerID,UID,strClientID,strCharName,tinyType,tinyKind,tinyBlocked,dateEndTime,strAdminID,strDescription)
|
||||
VALUES (@ServerID,@UID,@strClientid,@strCharName,@Type,@Kind,1,GETDATE() + @EndDateTime,@AdminID,@Description)
|
||||
|
||||
SELECT @@ROWCOUNT
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
-- 블럭 체크
|
||||
CREATE Proc USPCheckRestraintChar @ServerID Tinyint,@UID INT
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @tinyType TINYINT
|
||||
SET @tinyType = 0
|
||||
|
||||
DECLARE @tinyKind TINYINT -- 1:영구,0:임시
|
||||
DECLARE @EndTime INT
|
||||
DECLARE @dateEndTime SMALLDATETIME
|
||||
DECLARE @intEndTime INT
|
||||
|
||||
DECLARE @RETURNCHAR1 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR2 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR3 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR4 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR5 VARCHAR(20)
|
||||
|
||||
DECLARE @strCharName VARCHAR(20)
|
||||
DECLARE @TIME INT
|
||||
|
||||
SELECT @tinyType=tinyType,@tinyKind = tinykind,@EndTime =DATEDIFF(MINUTE,GETDATE(),dateEndTime)
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
ORDER BY tinyType
|
||||
|
||||
IF @tinyType = 0 -- 블럭안함
|
||||
BEGIN
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
ELSE IF @tinyType = 1 -- 계정블럭
|
||||
BEGIN
|
||||
|
||||
-- 기간여부체크
|
||||
IF (@EndTime <= 0 and @tinyKind = 0) --블럭해제된 상태임
|
||||
BEGIN
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
SET @tinyType = 0
|
||||
|
||||
SELECT @tinyType=tinyType,@tinyKind = tinykind,@EndTime =DATEDIFF(MINUTE,GETDATE(),dateEndTime)
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
ORDER BY tinyType
|
||||
|
||||
IF @tinyType = 2 --캐릭터블럭
|
||||
BEGIN
|
||||
SET @strCharName = NULL
|
||||
SET @EndTime = 0
|
||||
SET @TIME = 1
|
||||
|
||||
DECLARE Restraint_Cursor_A CURSOR FOR
|
||||
SELECT strCharName,DATEDIFF(MINUTE,GETDATE(),dateEndTime),tinyKind
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
OPEN Restraint_Cursor_A FETCH NEXT FROM Restraint_Cursor_A INTO @strCharName,@EndTime,@tinyKind
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
|
||||
IF ((@EndTime > 0) or (@tinyKind = 1))
|
||||
BEGIN
|
||||
|
||||
IF @TIME = 1
|
||||
SET @RETURNCHAR1 = @strCharName
|
||||
ELSE IF @TIME = 2
|
||||
SET @RETURNCHAR2 = @strCharName
|
||||
ELSE IF @TIME = 3
|
||||
SET @RETURNCHAR3 = @strCharName
|
||||
ELSE IF @TIME = 4
|
||||
SET @RETURNCHAR4 = @strCharName
|
||||
ELSE IF @TIME = 5
|
||||
SET @RETURNCHAR5 = @strCharName
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND strCharName = @strCharName AND tinyBlocked = 1
|
||||
END
|
||||
|
||||
|
||||
SET @TIME = @TIME + 1
|
||||
|
||||
FETCH NEXT FROM Restraint_Cursor_A into @strCharName,@EndTime,@tinyKind
|
||||
|
||||
END
|
||||
|
||||
CLOSE Restraint_Cursor_A
|
||||
DEALLOCATE Restraint_Cursor_A
|
||||
|
||||
IF ((@RETURNCHAR1 IS NULL) AND (@RETURNCHAR2 IS NULL) AND (@RETURNCHAR3 IS NULL) and (@RETURNCHAR4 IS NULL) and (@RETURNCHAR5 IS NULL))
|
||||
BEGIN
|
||||
SET @tinyType = 0
|
||||
END
|
||||
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
|
||||
SET @tinyType = 0
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
ELSE IF @tinyType = 2 --캐릭터블럭
|
||||
BEGIN
|
||||
SET @strCharName = NULL
|
||||
SET @EndTime = 0
|
||||
SET @TIME = 1
|
||||
|
||||
DECLARE Restraint_Cursor CURSOR FOR
|
||||
SELECT strCharName,DATEDIFF(MINUTE,GETDATE(),dateEndTime),tinyKind
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
|
||||
OPEN Restraint_Cursor FETCH NEXT FROM Restraint_Cursor INTO @strCharName,@EndTime,@tinyKind
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
|
||||
IF ((@EndTime > 0) or (@tinyKind = 1))
|
||||
BEGIN
|
||||
|
||||
IF @TIME = 1
|
||||
SET @RETURNCHAR1 = @strCharName
|
||||
ELSE IF @TIME = 2
|
||||
SET @RETURNCHAR2 = @strCharName
|
||||
ELSE IF @TIME = 3
|
||||
SET @RETURNCHAR3 = @strCharName
|
||||
ELSE IF @TIME = 4
|
||||
SET @RETURNCHAR4 = @strCharName
|
||||
ELSE IF @TIME = 5
|
||||
SET @RETURNCHAR5 = @strCharName
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND strCharName = @strCharName AND tinyBlocked = 1
|
||||
END
|
||||
|
||||
|
||||
SET @TIME = @TIME + 1
|
||||
|
||||
FETCH NEXT FROM Restraint_Cursor into @strCharName,@EndTime,@tinyKind
|
||||
|
||||
END
|
||||
|
||||
CLOSE Restraint_Cursor
|
||||
DEALLOCATE Restraint_Cursor
|
||||
|
||||
IF ((@RETURNCHAR1 IS NULL) AND (@RETURNCHAR2 IS NULL) AND (@RETURNCHAR3 IS NULL) and (@RETURNCHAR4 IS NULL) and (@RETURNCHAR5 IS NULL))
|
||||
BEGIN
|
||||
SET @tinyType = 0
|
||||
END
|
||||
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
|
||||
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
CREATE PROC USPDeleteRestraintChar @SeverID tinyint,@UID INT,@Charname varchar(16)
|
||||
AS
|
||||
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF EXISTS (SELECT UID FROM TblRestraintChar WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname)
|
||||
BEGIN
|
||||
DELETE TblRestraintChar
|
||||
WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname
|
||||
|
||||
SELECT @@ROWCOUNT
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT 0
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
@@ -0,0 +1,433 @@
|
||||
-- 해외쪽 운영DB 버전 관리가 지금까지 제대로 되지 않아 운영계정을 제외하곤 최신으로 모두 수정!
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CMS_DoingRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[CMS_DoingRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USPCheckRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[USPCheckRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USPDeleteRestraintChar]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
|
||||
drop procedure [dbo].[USPDeleteRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblChatBanList]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblChatBanList]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblGMLogMsg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblGMLogMsg]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblGMLogMsg_Log]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblGMLogMsg_Log]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblInterestedUser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblInterestedUser]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblRestraintChar]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblRestraintChar]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblDetailLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblDetailLog]
|
||||
GO
|
||||
|
||||
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[TblLog]
|
||||
GO
|
||||
|
||||
|
||||
CREATE TABLE [dbo].[TblChatBanList] (
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NULL ,
|
||||
[RemainTime] [int] NULL ,
|
||||
[AdminCID] [int] NULL ,
|
||||
[StartTime] [smalldatetime] NULL ,
|
||||
[EndTime] [smalldatetime] NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg] (
|
||||
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblGMLogMsg_Log] (
|
||||
[LogID] [int] NOT NULL ,
|
||||
[UID] [int] NULL ,
|
||||
[CID] [int] NULL ,
|
||||
[ServerGroupID] [tinyint] NOT NULL ,
|
||||
[EditDate] [smalldatetime] NOT NULL ,
|
||||
[LogMsg] [varchar] (200) NULL ,
|
||||
[AdminID] [varchar] (20) NOT NULL ,
|
||||
[InsertTime] [smalldatetime] NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblInterestedUser] (
|
||||
[strAccount] [varchar] (20) NOT NULL ,
|
||||
[strReason] [varchar] (260) NULL ,
|
||||
[intUID] [int] NOT NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblRestraintChar] (
|
||||
[tinyServerID] [tinyint] NOT NULL ,
|
||||
[UID] [int] NOT NULL ,
|
||||
[strClientID] [varchar] (20) NOT NULL ,
|
||||
[strCharName] [varchar] (20) NOT NULL ,
|
||||
[tinyType] [tinyint] NOT NULL ,
|
||||
[tinyKind] [tinyint] NOT NULL ,
|
||||
[tinyBlocked] [tinyint] NOT NULL ,
|
||||
[dateStartTime] [smalldatetime] NOT NULL ,
|
||||
[dateEndTime] [smalldatetime] NOT NULL ,
|
||||
[intEndTime] [int] NOT NULL ,
|
||||
[strAdminID] [varchar] (20) NULL ,
|
||||
[strDescription] [varchar] (30) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblDetailLog] (
|
||||
[DetailLogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[LogID] [int] NOT NULL ,
|
||||
[UpdateDate] [smalldatetime] NOT NULL ,
|
||||
[UpdateType] [int] NULL ,
|
||||
[Before] [varchar] (200) NULL ,
|
||||
[After] [varchar] (200) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[TblLog] (
|
||||
[UID] [int] NOT NULL ,
|
||||
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
|
||||
[Login] [smalldatetime] NOT NULL ,
|
||||
[Logout] [smalldatetime] NULL ,
|
||||
[UseIP] [varchar] (16) NOT NULL ,
|
||||
[UseMsg] [varchar] (100) NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblGMLogMsg] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg_Log] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblGMLogMsg_Log] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblDetailLog] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblDetailLog] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[DetailLogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblLog] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_TblLog] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[LogID]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE INDEX [idx_TblChatBanList_cid] ON [dbo].[TblChatBanList]([CID]) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg] ADD
|
||||
CONSTRAINT [DF_TblGMLogMsg_UID] DEFAULT (0) FOR [UID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_CID] DEFAULT (0) FOR [CID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_EditDate] DEFAULT (getdate()) FOR [EditDate]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblGMLogMsg_Log] ADD
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_UID] DEFAULT (0) FOR [UID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_CID] DEFAULT (0) FOR [CID],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_EditDate] DEFAULT (getdate()) FOR [EditDate],
|
||||
CONSTRAINT [DF_TblGMLogMsg_Log_InsertTime] DEFAULT (getdate()) FOR [InsertTime]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblRestraintChar] ADD
|
||||
CONSTRAINT [DF__TblRestra__strCh__11158940] DEFAULT ('ACCOUNT') FOR [strCharName],
|
||||
CONSTRAINT [DF__TblRestra__dateS__1209AD79] DEFAULT (getdate()) FOR [dateStartTime],
|
||||
CONSTRAINT [DF__TblRestra__intEn__12FDD1B2] DEFAULT (0) FOR [intEndTime]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblDetailLog] ADD
|
||||
CONSTRAINT [DF_TblDetailLog_UpdateDate] DEFAULT (getdate()) FOR [UpdateDate]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[TblLog] ADD
|
||||
CONSTRAINT [DF_TblLog_Login] DEFAULT (getdate()) FOR [Login]
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- 블럭 하기
|
||||
CREATE PROC CMS_DoingRestraintChar @ServerID TINYINT,@UID INT, @strClientID VARCHAR(20), @strCharName varchar(16),@Type tinyint,@Kind tinyint,@EndDate varchar(10),
|
||||
@AdminID VARCHAR(20),@Description VARCHAR(50)
|
||||
AS
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @EndDateTime INT
|
||||
|
||||
IF @strCharName IS NULL
|
||||
BEGIN
|
||||
SET @strCharName = 'Unknown'
|
||||
END
|
||||
|
||||
SET @EndDateTime = cast(@EndDate as INT)
|
||||
|
||||
INSERT INTO TblRestraintChar (tinyServerID,UID,strClientID,strCharName,tinyType,tinyKind,tinyBlocked,dateEndTime,strAdminID,strDescription)
|
||||
VALUES (@ServerID,@UID,@strClientid,@strCharName,@Type,@Kind,1,GETDATE() + @EndDateTime,@AdminID,@Description)
|
||||
|
||||
SELECT @@ROWCOUNT
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
-- 블럭 체크
|
||||
CREATE Proc USPCheckRestraintChar @ServerID Tinyint,@UID INT
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @tinyType TINYINT
|
||||
SET @tinyType = 0
|
||||
|
||||
DECLARE @tinyKind TINYINT -- 1:영구,0:임시
|
||||
DECLARE @EndTime INT
|
||||
DECLARE @dateEndTime SMALLDATETIME
|
||||
DECLARE @intEndTime INT
|
||||
|
||||
DECLARE @RETURNCHAR1 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR2 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR3 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR4 VARCHAR(20)
|
||||
DECLARE @RETURNCHAR5 VARCHAR(20)
|
||||
|
||||
DECLARE @strCharName VARCHAR(20)
|
||||
DECLARE @TIME INT
|
||||
|
||||
SELECT @tinyType=tinyType,@tinyKind = tinykind,@EndTime =DATEDIFF(MINUTE,GETDATE(),dateEndTime)
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
ORDER BY tinyType
|
||||
|
||||
IF @tinyType = 0 -- 블럭안함
|
||||
BEGIN
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
ELSE IF @tinyType = 1 -- 계정블럭
|
||||
BEGIN
|
||||
|
||||
-- 기간여부체크
|
||||
IF (@EndTime <= 0 and @tinyKind = 0) --블럭해제된 상태임
|
||||
BEGIN
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
SET @tinyType = 0
|
||||
|
||||
SELECT @tinyType=tinyType,@tinyKind = tinykind,@EndTime =DATEDIFF(MINUTE,GETDATE(),dateEndTime)
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
ORDER BY tinyType
|
||||
|
||||
IF @tinyType = 2 --캐릭터블럭
|
||||
BEGIN
|
||||
SET @strCharName = NULL
|
||||
SET @EndTime = 0
|
||||
SET @TIME = 1
|
||||
|
||||
DECLARE Restraint_Cursor_A CURSOR FOR
|
||||
SELECT strCharName,DATEDIFF(MINUTE,GETDATE(),dateEndTime),tinyKind
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
OPEN Restraint_Cursor_A FETCH NEXT FROM Restraint_Cursor_A INTO @strCharName,@EndTime,@tinyKind
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
|
||||
IF ((@EndTime > 0) or (@tinyKind = 1))
|
||||
BEGIN
|
||||
|
||||
IF @TIME = 1
|
||||
SET @RETURNCHAR1 = @strCharName
|
||||
ELSE IF @TIME = 2
|
||||
SET @RETURNCHAR2 = @strCharName
|
||||
ELSE IF @TIME = 3
|
||||
SET @RETURNCHAR3 = @strCharName
|
||||
ELSE IF @TIME = 4
|
||||
SET @RETURNCHAR4 = @strCharName
|
||||
ELSE IF @TIME = 5
|
||||
SET @RETURNCHAR5 = @strCharName
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND strCharName = @strCharName AND tinyBlocked = 1
|
||||
END
|
||||
|
||||
|
||||
SET @TIME = @TIME + 1
|
||||
|
||||
FETCH NEXT FROM Restraint_Cursor_A into @strCharName,@EndTime,@tinyKind
|
||||
|
||||
END
|
||||
|
||||
CLOSE Restraint_Cursor_A
|
||||
DEALLOCATE Restraint_Cursor_A
|
||||
|
||||
IF ((@RETURNCHAR1 IS NULL) AND (@RETURNCHAR2 IS NULL) AND (@RETURNCHAR3 IS NULL) and (@RETURNCHAR4 IS NULL) and (@RETURNCHAR5 IS NULL))
|
||||
BEGIN
|
||||
SET @tinyType = 0
|
||||
END
|
||||
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
|
||||
SET @tinyType = 0
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
ELSE IF @tinyType = 2 --캐릭터블럭
|
||||
BEGIN
|
||||
SET @strCharName = NULL
|
||||
SET @EndTime = 0
|
||||
SET @TIME = 1
|
||||
|
||||
DECLARE Restraint_Cursor CURSOR FOR
|
||||
SELECT strCharName,DATEDIFF(MINUTE,GETDATE(),dateEndTime),tinyKind
|
||||
FROM TblRestraintChar
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
||||
|
||||
|
||||
OPEN Restraint_Cursor FETCH NEXT FROM Restraint_Cursor INTO @strCharName,@EndTime,@tinyKind
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
|
||||
IF ((@EndTime > 0) or (@tinyKind = 1))
|
||||
BEGIN
|
||||
|
||||
IF @TIME = 1
|
||||
SET @RETURNCHAR1 = @strCharName
|
||||
ELSE IF @TIME = 2
|
||||
SET @RETURNCHAR2 = @strCharName
|
||||
ELSE IF @TIME = 3
|
||||
SET @RETURNCHAR3 = @strCharName
|
||||
ELSE IF @TIME = 4
|
||||
SET @RETURNCHAR4 = @strCharName
|
||||
ELSE IF @TIME = 5
|
||||
SET @RETURNCHAR5 = @strCharName
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
|
||||
UPDATE TblRestraintChar
|
||||
SET tinyBlocked = 0
|
||||
WHERE tinyServerID=@ServerID AND UID = @UID AND strCharName = @strCharName AND tinyBlocked = 1
|
||||
END
|
||||
|
||||
|
||||
SET @TIME = @TIME + 1
|
||||
|
||||
FETCH NEXT FROM Restraint_Cursor into @strCharName,@EndTime,@tinyKind
|
||||
|
||||
END
|
||||
|
||||
CLOSE Restraint_Cursor
|
||||
DEALLOCATE Restraint_Cursor
|
||||
|
||||
IF ((@RETURNCHAR1 IS NULL) AND (@RETURNCHAR2 IS NULL) AND (@RETURNCHAR3 IS NULL) and (@RETURNCHAR4 IS NULL) and (@RETURNCHAR5 IS NULL))
|
||||
BEGIN
|
||||
SET @tinyType = 0
|
||||
END
|
||||
|
||||
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3,@RETURNCHAR4,@RETURNCHAR5
|
||||
RETURN
|
||||
END
|
||||
|
||||
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
CREATE PROC USPDeleteRestraintChar @SeverID tinyint,@UID INT,@Charname varchar(16)
|
||||
AS
|
||||
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF EXISTS (SELECT UID FROM TblRestraintChar WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname)
|
||||
BEGIN
|
||||
DELETE TblRestraintChar
|
||||
WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname
|
||||
|
||||
SELECT @@ROWCOUNT
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT 0
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
34
Server/AdminTool/AdminToolServer/P2_1480_Procedure Alter.sql
Normal file
34
Server/AdminTool/AdminToolServer/P2_1480_Procedure Alter.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
|
||||
-- ºí·° Çϱâ
|
||||
ALTER PROC CMS_DoingRestraintChar @ServerID TINYINT,@UID INT, @strClientID VARCHAR(20), @strCharName varchar(16),@Type tinyint,@Kind tinyint,@EndDate varchar(10),
|
||||
@AdminID VARCHAR(20),@Description VARCHAR(50)
|
||||
AS
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @EndDateTime INT
|
||||
|
||||
IF @strCharName IS NULL
|
||||
BEGIN
|
||||
SET @strCharName = 'Unknown'
|
||||
END
|
||||
|
||||
SET @EndDateTime = cast(@EndDate as INT)
|
||||
|
||||
INSERT INTO TblRestraintChar (tinyServerID,UID,strClientID,strCharName,tinyType,tinyKind,tinyBlocked,dateEndTime,strAdminID,strDescription)
|
||||
VALUES (@ServerID,@UID,@strClientid,@strCharName,@Type,@Kind,1,GETDATE() + @EndDateTime,@AdminID,@Description)
|
||||
|
||||
SELECT @@ROWCOUNT
|
||||
|
||||
|
||||
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
311
Server/AdminTool/AdminToolServer/RYL_AdminManagerServer.cpp
Normal file
311
Server/AdminTool/AdminToolServer/RYL_AdminManagerServer.cpp
Normal file
@@ -0,0 +1,311 @@
|
||||
#include "stdafx.h"
|
||||
#include "RYL_AdminManagerServer.h"
|
||||
#include "RYL_AdminWindow.h"
|
||||
#include "RYL_AdminMgrDispatch.h"
|
||||
#include "RYL_AgentServerTable.h"
|
||||
|
||||
#include <Network/IOCP/IOCPNet.h>
|
||||
#include <Network/Session/CreatePolicy.h>
|
||||
#include <Network/Protocol/RYL_AdminMgrProtocol.h>
|
||||
|
||||
#include <DBComponent/RYL_AdminMgrDB.h>
|
||||
#include <DBComponent/BillingDB.h>
|
||||
#include <DBComponent/AuthDB.h>
|
||||
|
||||
#include <Utility/Time/Pulse/Pulse.h>
|
||||
#include <Utility/Setup/ServerSetup.h>
|
||||
|
||||
#include <Item/ItemMgr.h>
|
||||
#include <Skill/SkillMgr.h>
|
||||
#include <Quest/QuestMgr.h>
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Parser/ServerInfo.h>
|
||||
|
||||
#include <mmsystem.h>
|
||||
|
||||
#include "RYL_AdminServerCommand.h"
|
||||
|
||||
CRylAdminManagerServer CRylAdminManagerServer::ms_this;
|
||||
unsigned char PktAdminMgr::AuthorityMask::AdminAuthority[PktAdminMgr::PktCMD::PktEnd];
|
||||
|
||||
// ServerFramework Process 상속.. ( Thread )
|
||||
class CAdminToolProcessThread : public CProcessThread
|
||||
{
|
||||
public:
|
||||
|
||||
enum Const
|
||||
{
|
||||
PROCESS_TPP = 100, // 200ms(0.2초) 에 1틱.
|
||||
CONNECT_CHECK = 10, // 10틱 - 3초마다 연결 체크
|
||||
INTERESTED_USER_CHK = 10 // 3초마다 관심유저 접속 체크
|
||||
};
|
||||
|
||||
CAdminToolProcessThread(CRylAdminManagerServer& AdminServer)
|
||||
: CProcessThread(AdminServer, PROCESS_TPP)
|
||||
, m_AdminServer(AdminServer)
|
||||
{
|
||||
}
|
||||
|
||||
~CAdminToolProcessThread()
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
virtual void Cleanup(CPulse& Pulse)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void InternalRun(CPulse& Pulse)
|
||||
{
|
||||
unsigned long dwCurrentPulse = Pulse.GetCurrentPulse();
|
||||
|
||||
if(0 == (dwCurrentPulse % CONNECT_CHECK))
|
||||
{
|
||||
m_AdminServer.PrintServerInfo();
|
||||
//CRylAdminManagerServer.PrintStatistics();
|
||||
}
|
||||
|
||||
// 10초에 한번 테스트
|
||||
if(Pulse.ProcessBySecond(10))
|
||||
{
|
||||
if((CAgentServerTable::GetInstance().GetBillingDB() && CAgentServerTable::GetInstance().GetBillingDB()->GetQueryErrorCount() >= 1) ||
|
||||
(CAgentServerTable::GetInstance().GetAuthDB() && CAgentServerTable::GetInstance().GetAuthDB()->GetQueryErrorCount() >= 1) )
|
||||
{
|
||||
CAgentServerTable::GetInstance().InitAgentServerTable(*m_AdminServer.GetIOCPNet());
|
||||
}
|
||||
|
||||
|
||||
// DB테스트
|
||||
// edith 2009.10.1 DB 자동 커넥트 추가기능
|
||||
// 10초에 한번씩 네트워크 오류를 검사한다.
|
||||
// 쿼리 에러가 연속으로 10번이상 일어나면 DB에 먼가 문제가 있다.
|
||||
if(CDBAdminTool::GetInstance().GetQueryErrorCount() >= 1)
|
||||
{
|
||||
// DB에 새로 커넥트를 시도한다.
|
||||
CDBAdminTool::GetInstance().ConnectAdminToolDB();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CRylAdminManagerServer& m_AdminServer;
|
||||
};
|
||||
|
||||
CRylAdminManagerServer& CRylAdminManagerServer::GetInstance()
|
||||
{
|
||||
static CRylAdminManagerServer ServerInstance;
|
||||
return ServerInstance;
|
||||
}
|
||||
|
||||
CRylAdminManagerServer::CRylAdminManagerServer()
|
||||
: m_bInitializedClientListener(FALSE)
|
||||
, m_lpClientSessionPolicy(SessionPolicy::CreateTCPPolicy<CRylAdminMgrDispatch >())
|
||||
{
|
||||
}
|
||||
|
||||
CRylAdminManagerServer::~CRylAdminManagerServer()
|
||||
{
|
||||
if(0 != m_lpClientSessionPolicy)
|
||||
{
|
||||
m_lpClientSessionPolicy->Release();
|
||||
m_lpClientSessionPolicy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool CRylAdminManagerServer::ApplicationSpecificInit(const TCHAR* szCmdLine)
|
||||
{
|
||||
const int MAX_BUFFER = 255;
|
||||
CServerInfo& InfoScript = CServerInfo::GetInstance();
|
||||
|
||||
// 서버 커맨드 실행
|
||||
if(!InitializeCommand())
|
||||
{
|
||||
ERRLOG0(g_Log, "Command lnit failed");
|
||||
return false;
|
||||
}
|
||||
// 서버 스크립트 파일 로드
|
||||
if(!InfoScript.Reload())
|
||||
{
|
||||
ERRLOG0(g_Log, "ServerInfo file load failed");
|
||||
return false;
|
||||
}
|
||||
// 아이템 스크립트 파일 로드
|
||||
if(!Item::CItemMgr::GetInstance().LoadItemProtoType("./Script/Game/ItemScript.txt"))
|
||||
{
|
||||
ERRLOG0(g_Log, "ItemScript load failed");
|
||||
return false;
|
||||
}
|
||||
// 스킬 스크립트 로드
|
||||
if(!CSkillMgr::GetInstance().LoadSkillsFromFile())
|
||||
{
|
||||
ERRLOG0(g_Log, "SkillScript load failed");
|
||||
return false;
|
||||
}
|
||||
// 퀘스트 매니터 초기화
|
||||
if(!CQuestMgr::GetInstance().LoadQuestInfo())
|
||||
{
|
||||
ERRLOG0(g_Log, "QuestScript load failed");
|
||||
return false;
|
||||
}
|
||||
// 사용자 정의 윈도우 메세지 등록
|
||||
if(!InitializeMsgProc())
|
||||
{
|
||||
ERRLOG0(g_Log, "Window message registing failed");
|
||||
}
|
||||
// AdminToolDB 접속
|
||||
if(!CDBAdminTool::GetInstance().ConnectAdminToolDB())
|
||||
{
|
||||
ERRLOG0(g_Log, "Connecting failed: AdminTool DB");
|
||||
return false;
|
||||
}
|
||||
// Listener 생성
|
||||
if(!GetIOCPNet()->AddListener(m_lpClientSessionPolicy, 0, CServerSetup::P2AdminToolServerClientListen))
|
||||
{
|
||||
ERRLOG0(g_Log, "Add listener failed");
|
||||
return false;
|
||||
}
|
||||
// CAdminToolProcessThread 시작및 Thread관리자에 등록...
|
||||
if(!AddProcessThread(new CAdminToolProcessThread(*this)))
|
||||
{
|
||||
ERRLOG0(g_Log, "Add process thread failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 패킷 권한 설정
|
||||
InitializeAuthority();
|
||||
|
||||
// 중계서버 테이블 초기화 (과금 디비도 포함된 테이블)
|
||||
CAgentServerTable::GetInstance().InitAgentServerTable(*GetIOCPNet());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRylAdminManagerServer::InitializeAuthority()
|
||||
{
|
||||
using namespace PktAdminMgr;
|
||||
|
||||
// 권한 없음
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktLogin] = AuthorityMask::QUEST_MODE;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktLogUseMessage] = AuthorityMask::FREE_MODE;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSetZoneList] = AuthorityMask::FREE_MODE;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCloseCharacter] = AuthorityMask::FREE_MODE;
|
||||
|
||||
// 개발자
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktItemDistribute] = AuthorityMask::DEVELOPER;
|
||||
|
||||
// 마스터
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktNewAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; // MASTER 권한 계정 생성은 DEVELOPER 만 가능
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktAdminList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDelAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdateLevel] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdateIP] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdatePasswd] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGameAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktLogList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDetailLog] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktBeforeAfter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktItemQtyControl] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER;
|
||||
|
||||
// 게임 마스터
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCheckName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktChangeName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDelCharList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCharRestore] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdateStatus] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCreateItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdateItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktRemoveItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktItemReset] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktInvenGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSkillEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDepositPasswd] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktAdminStoreInsert] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktAdminStoreDelete] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGetAdminStoreItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUpdateAdminStore] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDelCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktStoreGoldUpdate] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDuplicatedItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCancelExecuteQuest] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDeleteHistoryQuest] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGMLogMsg] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGuildMemberEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM;
|
||||
|
||||
// 서포터
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSearchBlock] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktAddBlockUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDelBlockUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSearchID] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSearchName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktSetCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGetCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktForcedDis] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUserBillingLog] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGuildSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGuildRight] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktRequestGuildMemberList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGuildRestoreDataList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktFortSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktMiningCamp] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktShopCamp] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktShopCampGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktShopCampTax] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCastleSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktCastleCreature] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktChangePos] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktConnectAllServerz] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktRefreshConnectedList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktInterestedUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktConnectionChk] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktConnectedUserList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUnifiedCharInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUnifiedGuildInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktDetailCharInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktUserNation] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktShiftToUID] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktStoreTabEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktAmountOfGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktNameChangeCount] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
AuthorityMask::AdminAuthority[PktCMD::PktGetCharInfoTime] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER;
|
||||
}
|
||||
|
||||
void CRylAdminManagerServer::PrintServerInfo()
|
||||
{
|
||||
char szServInfo[4096];
|
||||
|
||||
CAgentServerTable& ServerTable = CAgentServerTable::GetInstance();
|
||||
|
||||
ServerTable.PrintServerState(szServInfo, sizeof(szServInfo));
|
||||
PrintInfo(szServInfo, sizeof(szServInfo));
|
||||
}
|
||||
|
||||
bool CRylAdminManagerServer::InitializeCommand()
|
||||
{
|
||||
CConsoleCMDFactory& CMDFactory = *GetCommandFactory();
|
||||
|
||||
if(!CMDFactory.AddCommand("flush", new CCMDFlush))
|
||||
{
|
||||
ERRLOG0(g_Log, "Command failed : flush");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!CMDFactory.AddCommand("connect_all", new CCMDConnectAll))
|
||||
{
|
||||
ERRLOG0(g_Log, "Command failed : connect_all");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!CMDFactory.AddCommand("reload_script", new CCMDReload))
|
||||
{
|
||||
ERRLOG0(g_Log, "Command failed : reload");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!CMDFactory.AddCommand("connect_index", new CCMDConnect))
|
||||
{
|
||||
ERRLOG0(g_Log, "Command failed : connect");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
41
Server/AdminTool/AdminToolServer/RYL_AdminManagerServer.h
Normal file
41
Server/AdminTool/AdminToolServer/RYL_AdminManagerServer.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef _RYL_ADMIN_MANAGER_SERVER_
|
||||
#define _RYL_ADMIN_MANAGER_SERVER_
|
||||
|
||||
#include < BaseLibrary/Pattern/Singleton.h >
|
||||
#include < RylServerLibrary/Utility/ServerAppFramework/ServerWindowFramework.h >
|
||||
|
||||
|
||||
class CSessionPolicy;
|
||||
|
||||
/*!
|
||||
\class CRylAdminManagerServer
|
||||
관리툴 서버 클래스
|
||||
*/
|
||||
class CRylAdminManagerServer : public CServerWindowFramework
|
||||
{
|
||||
public:
|
||||
//!Singletone 객체 리턴
|
||||
static CRylAdminManagerServer& GetInstance();
|
||||
//!서버상태 Console창에 표시*/
|
||||
void PrintServerInfo();
|
||||
//!서버 초기화작업
|
||||
virtual bool ApplicationSpecificInit(const TCHAR* szCmdLine);
|
||||
|
||||
private:
|
||||
CRylAdminManagerServer();
|
||||
~CRylAdminManagerServer();
|
||||
|
||||
//!패킷 권한 초기화
|
||||
void InitializeAuthority();
|
||||
//!윈도우 메세지 초기화
|
||||
bool InitializeMsgProc();
|
||||
bool InitializeCommand();
|
||||
|
||||
CSessionPolicy* m_lpClientSessionPolicy;
|
||||
BOOL m_bInitializedClientListener;
|
||||
|
||||
//!Singletone 객체
|
||||
static CRylAdminManagerServer ms_this;
|
||||
};
|
||||
|
||||
#endif
|
||||
6619
Server/AdminTool/AdminToolServer/RYL_AdminMgrDispatch.cpp
Normal file
6619
Server/AdminTool/AdminToolServer/RYL_AdminMgrDispatch.cpp
Normal file
File diff suppressed because it is too large
Load Diff
181
Server/AdminTool/AdminToolServer/RYL_AdminMgrDispatch.h
Normal file
181
Server/AdminTool/AdminToolServer/RYL_AdminMgrDispatch.h
Normal file
@@ -0,0 +1,181 @@
|
||||
#ifndef _RYL_ADMIN_MGR_DISPATCH_H_
|
||||
#define _RYL_ADMIN_MGR_DISPATCH_H_
|
||||
|
||||
#include <DBComponent/RYL_DetailLog.h>
|
||||
#include <Network/Dispatch/RylServerDispatch.h>
|
||||
#include <Stream/Buffer/BufferFactory.h>
|
||||
|
||||
|
||||
namespace PktAdminMgr
|
||||
{
|
||||
struct PktCreateItem;
|
||||
struct PktUpdateItem;
|
||||
struct PktRemoveItem;
|
||||
struct PktItemReset;
|
||||
};
|
||||
|
||||
namespace ItemData
|
||||
{
|
||||
class CDepositLock;
|
||||
};
|
||||
|
||||
/*!
|
||||
\class CRylAdminMgrDispatch
|
||||
운영 클라이언트로부터 받은 패킷 처리
|
||||
*/
|
||||
class CRylAdminMgrDispatch : public CRylServerDispatch
|
||||
{
|
||||
public:
|
||||
CRylAdminMgrDispatch(CSession& Session);
|
||||
|
||||
virtual void Destroy(void); // 객체 파괴 이벤트
|
||||
virtual void Disconnected(void); // 접속 끊김 이벤트
|
||||
virtual void Connected(void);
|
||||
|
||||
bool SendResult(unsigned char cResult); // 결과 패킷 보내기
|
||||
bool SendResultnRequestKey(unsigned char cResult, unsigned long dwRequestKey); // 결과 패킷과 리퀘스트 키 보내기
|
||||
|
||||
private:
|
||||
virtual bool DispatchPacket(PktBase* lpPktBase); // 받은 패킷 처리
|
||||
|
||||
bool PktAuthority(); // 사용 권한 없음 알리기
|
||||
bool PktUnkonwnPacket(); // 알 수 없는 패킷을 받았을 경우 처리
|
||||
|
||||
// 운영 계정 관리
|
||||
bool PktLogin (PktBase* lpPktBase); // 운영자 로그인
|
||||
bool PktNewAdmin (PktBase* lpPktBase); // 새 운영 계정 생성
|
||||
bool PktAdminList (PktBase* lpPktBase=0); // 등록된 운영 계정 리스트 요청
|
||||
bool PktDelAdmin (PktBase* lpPktBase); // 운영 계정 삭제
|
||||
bool PktUpdateLev (PktBase* lpPktBase); // 운영 계정LV 변경
|
||||
bool PktUpdateIP (PktBase* lpPktBase); // 운영 계정 접속 제한 IP변경
|
||||
bool PktUpdatePasswd (PktBase* lpPktBase); // 운영계정 패스 변경
|
||||
bool PktLogList (PktBase* lpPktBase); // 툴 사용내역 요청
|
||||
bool PktDetailLog (PktBase* lpPktBase); // 상세 사용내역 요청
|
||||
bool PktBeforAfter (PktBase* lpPktBase); // 수정전후 내역 요청
|
||||
bool PktLogUseMessage (PktBase* lpPktBase); // 툴 사용내역 기록
|
||||
|
||||
// 캐릭터 정보 수정
|
||||
bool PktSearchID (PktBase* lpPktBase); // 캐릭터 검색 (UID, CID)
|
||||
bool PktSearchName (PktBase* lpPktBase); // 캐릭터 검색 (계정명, 캐릭명)
|
||||
bool PktCloseCharacter (PktBase* lpPktBase); // 캐릭 수정 독점권 해제
|
||||
bool PktUpdateStatus (PktBase* lpPktBase); // 캐릭터 스테이터스 수정
|
||||
bool PktCreateItem (PktBase* lpPktBase); // 아이템 생성
|
||||
bool PktUpdateItem (PktBase* lpPktBase); // 아이템 수정
|
||||
bool PktRemoveItem (PktBase* lpPktBase); // 아이템 삭제
|
||||
bool PktItemReset (PktBase* lpPktBase); // 각종 아이템 컨테이너 초기화
|
||||
bool PktSkillEdit (PktBase* lpPktBase); // 스킬 관련 (수정, 추가, 삭제)
|
||||
bool PktChangePos (PktBase* lpPktBase); // 캐릭터 위치 정보 수정
|
||||
bool PktDepositPasswd (PktBase* lpPktBase); // 창고 패스워드 변경
|
||||
bool PktChangeName (PktBase* lpPktBase); // 캐릭명 변경
|
||||
bool PktSetGold (PktBase* lpPktBase); // 인벤토리 골드 수정
|
||||
bool PktInvenGold (PktBase* lpPktBase); // 인벤토리 골드 수정 2
|
||||
bool PktStoreGoldUpdate (PktBase* lpPktBase); // 창고 골드 수정
|
||||
bool PktCancelExecuteQuest (PktBase* lpPktBase); // 수행 중인 퀘스트 취소
|
||||
bool PktDeleteHistoryQuest (PktBase* lpPktBase); // 완료한 퀘스트 목록에서 제거
|
||||
bool PktUserNation (PktBase* lpPktBase); // 계정의 국적 얻기
|
||||
bool PktStoreTabEdit (PktBase* lpPktBase); // 창고 탭 수정
|
||||
bool PktNameChangeCount (PktBase* lpPktBase); // 캐릭명 변경 기회 수정
|
||||
|
||||
bool PktGetCharacter (PktBase* lpPktBase); // 캐릭터 정보 얻기
|
||||
bool PktSetCharacter (PktBase* lpPktBase); // 캐릭터를 수정한 정보 저장
|
||||
|
||||
bool PktDelCharacter (PktBase* lpPktBase); // 캐릭터 삭제 (보류기능)
|
||||
|
||||
// 길드
|
||||
bool PktGuildSearch (PktBase* lpPktBase); // 길드 검색
|
||||
bool PktRequestGuildMemberList (PktBase* lpPktBase); // 길드 멤버 리스트 요청
|
||||
bool PktGuildRestoreDataList (PktBase* lpPktBase); // 지워진 길드 리스트 요청
|
||||
bool PktGuildRight (PktBase* lpPktBase); // 길드 권한
|
||||
bool PktGuildMemberEdit (PktBase* lpPktBase); // 길드 멤버 권한 수정, 축출
|
||||
|
||||
//요새
|
||||
bool PktFortSearch (PktBase* lpPktBase); // 요새 검색
|
||||
bool PktMiningCamp (PktBase* lpPktBase); // 채굴요새 정보 얻기
|
||||
bool PktShopCamp (PktBase* lpPktBase); // 상점요새 정보 얻기
|
||||
bool PktShopCampGold (PktBase* lpPktBase); // 상점요새 골드 수정
|
||||
bool PktShopCampTax (PktBase* lpPktBase); // 상점요새 세금 수정
|
||||
|
||||
//성
|
||||
bool PktCastleSearch (PktBase* lpPktBase); // 성 검색
|
||||
bool PktCastleCreature (PktBase* lpPktBase); // 성 검색
|
||||
|
||||
|
||||
// 운영 창고
|
||||
bool SendAdminStoreList (void); // 운영자 창고 정보 보내기
|
||||
bool PktAdminStoreInsert (PktBase* lpPktBase); // 운영자 창고 사용 (아이템 등록)
|
||||
bool PktAdminStoreDelete (PktBase* lpPktBase); // 운영자 창고 사용 (아이템 삭제)
|
||||
bool PktGetAdminStoreItem (PktBase* lpPktBase); // 운영자 창고 아이템 정보 요청
|
||||
bool PktUpdateAdminStore (PktBase* lpPktBase); // 운영자 창고 사용 (아이템 수정)
|
||||
|
||||
// 복구 및 블럭
|
||||
bool PktDelCharList (PktBase* lpPktBase); // 삭제된 캐릭터 목록 검색
|
||||
bool PktCharRestore (PktBase* lpPktBase); // 캐릭터 복구
|
||||
bool PktSearchBlock (PktBase* lpPktBase); // 블럭 목록 검색
|
||||
bool PktAddBlockUser (PktBase* lpPktBase); // 블럭
|
||||
bool PktDelBlockUser (PktBase* lpPktBase); // 블럭 해제
|
||||
|
||||
// 서버 통합 관련
|
||||
bool PktUnifiedCharInfo (PktBase* lpPktBase); // 통합 캐릭터 정보
|
||||
bool PktUnifiedGuildInfo (PktBase* lpPktBase); // 통합 길드 정보
|
||||
bool PktDetailCharInfo (PktBase* lpPktBase); // 통합 캐릭터 상세 정보
|
||||
|
||||
// 기타
|
||||
bool PktGameAdmin (PktBase* lpPktBase); // 게임 운영자 관련
|
||||
bool PktItemQtyControlData (PktBase* lpPktBase); // 이벤트 아이템 수량 제어
|
||||
bool PktCheckName (PktBase* lpPktBase); // 캐릭명 중복 체크
|
||||
bool PktForcedDis (PktBase* lpPktBase); // 강제 접속 끊기
|
||||
bool PktUserBillingLogRequest (PktBase* lpPktBase); // 유저 과금 내역 로그 요청
|
||||
bool PktSetZoneList (PktBase* lpPktBase); // 존 좌표 템플릿 저장
|
||||
bool SendZoneList (void); // 존 좌표 템플릿 리스트 보내기
|
||||
bool PktConnectAllServerz (PktBase* lpPktBase); // 운영서버에서 모든 중계서버 접속
|
||||
bool SendConnectedServerIndex (void); // 접속 중인 중계서버 리스트 보내기
|
||||
bool PktInterestedUser (PktBase* lpPktBase); // 관심 유저 관련 (등록, 삭제, 리스트 요청)
|
||||
bool ReqInterestedUserList (char* szQuery); // 관심 유저 리스트 요청
|
||||
bool PktConnectionChk (PktBase* lpPktBase); // 접속 확인 및 접속 정보 요청
|
||||
bool PktConnectedUserList (void); // 접속한 관심 유저 리스트 보내기
|
||||
bool PktDuplicatedItem (PktBase* lpPktBase); // 중복 아이템 관련 패킷
|
||||
bool PktItemDistribute (PktBase* lpPktBase); // 아이템 분배
|
||||
bool PktShiftToUID (PktBase* lpPktBase); // UID, 계정명간 변환
|
||||
bool PktAmountOfGold (PktBase* lpPktBase); // 서버그룹 골드량 확인
|
||||
bool PktGMLogMsg (PktBase* lpPktBase); // GM 로그 메세지 (UID, CID 단위 로그)
|
||||
bool PktSearchCharInfoTime (PktBase* lpPktBase); // 캐릭터 생성/수정 정보 확인
|
||||
|
||||
// Ack 전용
|
||||
bool PktNewAdminAck(char* szAccount); // 운영 계정 생성 Ack
|
||||
bool PktDelAdminAck(char* szAccount); // 운영 계정 삭제 Ack
|
||||
bool PktUpdateLevAck(char* szAccount, unsigned char Level); // 운영 계정LV 변경 Ack
|
||||
bool PktUpdateIPAck(char* szAccount, char* szIP); // 운영 계정 접속 제한 IP변경 Ack
|
||||
bool PktSearchUIDAck(unsigned long UID, unsigned int nOldServerID, unsigned long dwKey, bool& bResult); // UID 검색 Ack
|
||||
bool PktSearchCIDAck(unsigned long CID, unsigned long dwGroup, unsigned long dwKey, bool& bResult); // CID 검색 Ack
|
||||
bool PktSearchResultAck (unsigned char Result, unsigned long dwRequestKey); // 검색 결과 Ack
|
||||
|
||||
|
||||
CBuffer* MakeCreateItemAck(unsigned long dwRequestKey, unsigned long dwCID, unsigned __int64 dwItemID, unsigned short dwPrototypeID, PktAdminMgr::PktCreateItem* lpCreateItem);
|
||||
CBuffer* MakeUpdateItemAck(unsigned long dwRequestKey, unsigned long dwCID, unsigned __int64 dwItemID, unsigned short dwPrototypeID, PktAdminMgr::PktUpdateItem* lpUpdateItem);
|
||||
CBuffer* MakeRemoveItemAck(unsigned long dwRequestKey, unsigned long dwCID, unsigned __int64 dwItemID, unsigned short dwPrototypeID, PktAdminMgr::PktRemoveItem* lpRemoveItem);
|
||||
CBuffer* MakeItemResetAck(unsigned long dwRequestKey, unsigned long dwCID, PktAdminMgr::PktItemReset* lpPktItemReset);
|
||||
|
||||
bool DepositCheckIt(ItemData::CDepositLock& DepositLock, unsigned long dwUID, unsigned long dwCID); // 창고 사용 가능 여부 판별
|
||||
|
||||
bool m_bLogin; // 로그인 여부
|
||||
|
||||
unsigned char m_MyAuthority; // 현재 로그인된 관리자의 권한마스크
|
||||
unsigned int m_MyUID; // 클라이언트 식별자
|
||||
unsigned int m_MyLogID; // 업데이트할 LogID
|
||||
unsigned int m_nAgentType; // 중계서버 타입
|
||||
unsigned int m_nIPCheck; // 운영자 로그인시 IP 체크
|
||||
char m_szToolNation[256]; // 국가 타입
|
||||
|
||||
CDetailLog m_DetailLog; // DB에 로그 남기기 위한 인스턴스
|
||||
|
||||
char m_szAccount[20]; // Dispatch를 사용하고 있는 관리자 계정
|
||||
|
||||
bool SendLoginInfo(char* szAccount); // 계정정로를 클라이이언트로 보냄
|
||||
bool SendAgentServerInfo(void); // 중계서버명과 인덱스를 보냄
|
||||
|
||||
char* GetItemState(unsigned char cTake); // 아이템 위치 정보 문자열 얻기
|
||||
|
||||
unsigned char SetAuthorityMask(unsigned char cLV);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,5 @@
|
||||
#ifndef _RYL_ADMIN_MGR_SERVER_STRUCT_H_
|
||||
#define _RYL_ADMIN_MGR_SERVER_STRUCT_H_
|
||||
|
||||
|
||||
#endif
|
||||
62
Server/AdminTool/AdminToolServer/RYL_AdminWinMain.cpp
Normal file
62
Server/AdminTool/AdminToolServer/RYL_AdminWinMain.cpp
Normal file
@@ -0,0 +1,62 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <crtdbg.h>
|
||||
#include <Thread/Lock.h>
|
||||
#include <Utility/Debug/ExceptionReport.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include "RYL_AdminManagerServer.h"
|
||||
#include "resource.h"
|
||||
|
||||
|
||||
#include <GameGuardLib/ggsrv.h>
|
||||
|
||||
|
||||
GGAUTHS_API void NpLog(int mode, char* msg)
|
||||
{
|
||||
}
|
||||
|
||||
GGAUTHS_API void GGAuthUpdateCallback(PGG_UPREPORT report)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
// !Execption
|
||||
int WINAPI ExceptionUserFunc(char* szBuffer, int nBufferLen)
|
||||
{
|
||||
g_Log.Flush();
|
||||
g_SessionLog.Flush();
|
||||
|
||||
return _snprintf(szBuffer, nBufferLen, "Exception Occured. Flush all buffers.");
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
CNamedMutex Mutex("ROWAdminToolServer", true);
|
||||
|
||||
if(GetLastError() == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
MessageBox(NULL, "Already AdminToolServer process exist.", "Err", MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Exception ¿É¼Ç ¼³Á¤
|
||||
unsigned long dwExceptionFeatures =
|
||||
CExceptionReport::CATCH_EXCEPTION | CExceptionReport::USE_MINIDUMP | CExceptionReport::USE_REPORT;
|
||||
|
||||
CExceptionReport::GetInstance().Enable(dwExceptionFeatures);
|
||||
CExceptionReport::GetInstance().SetDumpLevel(MiniDumpWithFullMemory);
|
||||
CExceptionReport::GetInstance().SetUserFunc(ExceptionUserFunc);
|
||||
|
||||
CRylAdminManagerServer& RylAdminMgrServer = CRylAdminManagerServer::GetInstance();
|
||||
|
||||
// ¼¹ö ÃʱâÈ
|
||||
if(RylAdminMgrServer.Initialize(
|
||||
hInstance, "AdminToolServer", lpCmdLine, IDI_TRAY_ICON, IDR_MENU_POPUP))
|
||||
{
|
||||
RylAdminMgrServer.ProcessMessage();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
89
Server/AdminTool/AdminToolServer/RYL_AdminWindow.cpp
Normal file
89
Server/AdminTool/AdminToolServer/RYL_AdminWindow.cpp
Normal file
@@ -0,0 +1,89 @@
|
||||
#include "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "RYL_AdminManagerServer.h"
|
||||
#include "RYL_AgentServerTable.h"
|
||||
|
||||
#include <BaseLibrary/Log/ServerLog.h>
|
||||
#include <RylServerLibrary/Utility/ServerAppFramework/MsgProc/MsgProc.h>
|
||||
#include <RylServerLibrary/Utility/ServerAppFramework/ConsoleWindow/ConsoleWindow.h>
|
||||
#include <RylServerLibrary/Utility/ServerAppFramework/ConsoleWindow/ConsoleCMDFactory.h>
|
||||
|
||||
// !Window Message Class
|
||||
class CProcessCOMMAND : public CMsgProc
|
||||
{
|
||||
public:
|
||||
|
||||
CProcessCOMMAND(CConsoleWindow& ConsoleWindow) : m_ConsoleWindow(ConsoleWindow) { }
|
||||
virtual ~CProcessCOMMAND() { }
|
||||
|
||||
// !WM_COMMAND Message
|
||||
virtual LRESULT operator () (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
char* szCommand = 0;
|
||||
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_CONNECTALL: szCommand = "connect_all"; break;
|
||||
case ID_CONSOL_OPENCONSOLE: m_ConsoleWindow.Initialize("AdminManageServer"); break;
|
||||
case ID_CONSOLE_CLOSECONSOLE: m_ConsoleWindow.Destroy(); break;
|
||||
}
|
||||
|
||||
if(NULL != szCommand)
|
||||
{
|
||||
m_ConsoleWindow.GetCMDProcess().Add(
|
||||
m_ConsoleWindow.GetConsoleCMDFactory().Create(szCommand, strlen(szCommand)));
|
||||
}
|
||||
|
||||
if(LOWORD(wParam) == ID_FLUSH)
|
||||
{
|
||||
DETLOG0(g_Log, "Flush Log");
|
||||
g_Log.Flush();
|
||||
}
|
||||
|
||||
if(LOWORD(wParam) == ID_QUIT)
|
||||
{
|
||||
DETLOG0(g_Log, "AdminManageServer systray end");
|
||||
PostMessage(hWnd, WM_QUIT, 0, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
CConsoleWindow& m_ConsoleWindow;
|
||||
};
|
||||
|
||||
// !Window Message Class
|
||||
class CWM_DESTROY : public CMsgProc
|
||||
{
|
||||
public:
|
||||
|
||||
// !WM_DESTROY Message
|
||||
virtual LRESULT operator () (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
// !Window Message Class Initialize
|
||||
bool CRylAdminManagerServer::InitializeMsgProc()
|
||||
{
|
||||
int nErrorCount = 0;
|
||||
CMsgProcessMgr* lpMsgProcessMgr = GetMsgProcessMgr();
|
||||
|
||||
if(0 != lpMsgProcessMgr)
|
||||
{
|
||||
if(GetConsoleWindow())
|
||||
{
|
||||
nErrorCount += lpMsgProcessMgr->Register(WM_COMMAND,
|
||||
new CProcessCOMMAND(*GetConsoleWindow())) ? 0 : 1;
|
||||
}
|
||||
|
||||
nErrorCount += lpMsgProcessMgr->Register(WM_DESTROY, new CWM_DESTROY) ? 0 : 1;
|
||||
}
|
||||
|
||||
return (0 == nErrorCount);
|
||||
}
|
||||
|
||||
0
Server/AdminTool/AdminToolServer/RYL_AdminWindow.h
Normal file
0
Server/AdminTool/AdminToolServer/RYL_AdminWindow.h
Normal file
760
Server/AdminTool/AdminToolServer/RYL_AgentServerDispatch.cpp
Normal file
760
Server/AdminTool/AdminToolServer/RYL_AgentServerDispatch.cpp
Normal file
@@ -0,0 +1,760 @@
|
||||
#include "stdafx.h"
|
||||
#include "RYL_AgentServerTable.h"
|
||||
#include "RYL_AgentServerDispatch.h"
|
||||
#include "RYL_AdminMgrDispatch.h"
|
||||
|
||||
#include <Parser/ServerInfo.h>
|
||||
#include <Item/ItemFactory.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/PacketCommand.h>
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Network/Packet/PacketStruct/ServerPacket.h>
|
||||
#include <Network/Packet/PacketStruct/GuildPacket.h>
|
||||
#include <Network/Winsock/SocketFactory.h>
|
||||
#include <Network/Protocol/RYL_AdminMgrProtocol.h>
|
||||
#include <Network/Buffer/RYL_CumulateBuffer.h>
|
||||
#include <Network/Session/Session.h>
|
||||
|
||||
#include "ClientDispatchTable.h"
|
||||
|
||||
|
||||
|
||||
CMultiDispatch& CRylAgentServerDispatch::GetDispatchTable()
|
||||
{
|
||||
static CMultiDispatch multiDispatch;
|
||||
return multiDispatch;
|
||||
}
|
||||
|
||||
void CRylAgentServerDispatch::SetDispatchInfo(long dwServerGroup, char* ServerName)
|
||||
{
|
||||
m_dwServerGroup = dwServerGroup;
|
||||
strncpy(m_szServerName, ServerName, 256);
|
||||
}
|
||||
|
||||
void CRylAgentServerDispatch::Destroy()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::DispatchPacket(PktBase* lpPktBase)
|
||||
{
|
||||
unsigned char cCmd = lpPktBase->GetCmd();
|
||||
|
||||
switch(cCmd)
|
||||
{
|
||||
case PktAgentServer::PktCMD::CmdSysServerLogin: return CmdSysServerLogin(lpPktBase);
|
||||
case PktAgentServer::PktCMD::CmdAdminToolGetData: return CmdAdminToolGetData(lpPktBase);
|
||||
case PktAgentServer::PktCMD::CmdAdminToolSetData: return CmdAdminToolSetData(lpPktBase);
|
||||
case CmdItemQtyCheck: return ItemQtyControlAck(lpPktBase);
|
||||
case CmdGuildPosition: return GuildPositionAck(lpPktBase);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::CmdAdminToolGetData(PktBase* lpPktBase)
|
||||
{
|
||||
PktAgentServer::PktAdminToolGetDataAck* lpGetDataAck =
|
||||
static_cast<PktAgentServer::PktAdminToolGetDataAck*>(lpPktBase);
|
||||
|
||||
char* lpData = reinterpret_cast<char*>(lpGetDataAck + 1);
|
||||
|
||||
CServerRequestKeeper::RequestInfo RequestInfo;
|
||||
|
||||
unsigned long dwUID = lpGetDataAck->m_dwUID;
|
||||
unsigned long dwCID = lpGetDataAck->m_dwCID;
|
||||
unsigned long dwRequestKey = lpGetDataAck->m_dwRequestKey;
|
||||
unsigned short cError = lpGetDataAck->GetError();
|
||||
bool bResult = false;
|
||||
|
||||
// 캐릭터 이름 변경 ----------------------------------------------------------------------------------
|
||||
if (PktAgentServer::PktAdminToolGetData::CHANGE_CHAR_NAME == lpGetDataAck->m_cType)
|
||||
{
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktChangeName));
|
||||
PktAdminMgr::PktChangeName* lpPktChangeName =
|
||||
reinterpret_cast<PktAdminMgr::PktChangeName*>(lpBuffer->begin());
|
||||
|
||||
lpPktChangeName->m_dwCID = dwCID;
|
||||
lpPktChangeName->m_dwServerGroup = m_dwServerGroup;
|
||||
lpPktChangeName->m_dwRequest = dwRequestKey;
|
||||
lpPktChangeName->m_dwUID = (unsigned long)cError;
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||||
sizeof(PktAdminMgr::PktChangeName), PktAdminMgr::PktCMD::PktChangeNameAck, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "패킷 랩핑 실패");
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "운영 클라이언트로 정보 전송 실패");
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
|
||||
unsigned short ExtraLength =
|
||||
(lpGetDataAck->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck));
|
||||
|
||||
if (!m_AgentRequestKeeper.GetRequest(dwRequestKey, RequestInfo))
|
||||
{
|
||||
ERRLOG1(g_Log, "검색 요청 실패: 요청키- %d", dwRequestKey);
|
||||
return true;
|
||||
}
|
||||
|
||||
CModifyCharacter* lpModifyChar = m_ModifyCharMgr.GetCharacter(dwCID);
|
||||
if ((cError != 0) || (NULL == lpModifyChar))
|
||||
{
|
||||
m_ModifyCharMgr.EraseChar(dwCID);
|
||||
m_AgentRequestKeeper.Pop(dwRequestKey);
|
||||
|
||||
ERRLOG1(g_Log, "캐릭터 정보 받기 실패: err- %d", cError);
|
||||
return true;
|
||||
}
|
||||
|
||||
switch(lpGetDataAck->m_cType)
|
||||
{
|
||||
case PktAgentServer::PktAdminToolGetData::CHAR_BASIC_DATA:
|
||||
bResult = m_ParseData.PARSE_CHAR_BASIC_DATA(lpModifyChar, lpData);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_BASIC_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::CHAR_EXTRA_DATA:
|
||||
bResult = m_ParseData.PARSE_CHAR_EXTRA_DATA(lpModifyChar, lpData);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_EXTRA_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::CHAR_FRIEND_DATA:
|
||||
bResult = m_ParseData.PARSE_CHAR_FRIEND_DATA(lpModifyChar, lpData, ExtraLength);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_FRIEND_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::CHAR_BAN_DATA:
|
||||
bResult = m_ParseData.PARSE_CHAR_BAN_DATA(lpModifyChar, lpData, ExtraLength);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_BAN_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::STORE_12_DATA:
|
||||
bResult = m_ParseData.PARSE_STORE_12_DATA(lpModifyChar, lpData);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::STORE_12_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::STORE_34_DATA:
|
||||
bResult = m_ParseData.PARSE_STORE_34_DATA(lpModifyChar, lpData);
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::STORE_34_DATA);
|
||||
}
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolGetData::FINISH_GET_DATA:
|
||||
lpModifyChar->SetUID(dwUID);
|
||||
lpModifyChar->SetCID(dwCID);
|
||||
lpModifyChar->SetOldServerGroup(lpGetDataAck->m_cOldServerGroupID);
|
||||
|
||||
bResult = PARSE_FINISH_GET_DATA(dwRequestKey);
|
||||
|
||||
if(bResult)
|
||||
{
|
||||
SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::FINISH_GET_DATA);
|
||||
SyncDeposit(dwUID, dwCID, RequestInfo);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!bResult)
|
||||
{
|
||||
m_AgentRequestKeeper.Pop(dwRequestKey);
|
||||
m_ModifyCharMgr.EraseChar(dwCID);
|
||||
ERRLOG4(g_Log, "캐릭터 데이터 초기화 실패: 요청키- %d, UID- %d, CID- %d, cType- %c",
|
||||
dwRequestKey, dwUID, dwCID, lpGetDataAck->m_cType );
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial,
|
||||
unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey)
|
||||
{
|
||||
return m_ParseData.UpdateCharacter(lpChar, dwSerial, dwUID, dwCID, dwRequestKey);
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::PARSE_FINISH_GET_DATA(unsigned long dwRequestKey)
|
||||
{
|
||||
m_AgentRequestKeeper.Pop(dwRequestKey);
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO : 현재 다른 운영자가 해당 창고를 편집중이면 다른 운영자의 운영 클라이언트에도 동기화 필요;
|
||||
bool CRylAgentServerDispatch::SyncDeposit(unsigned long dwUID, unsigned long dwCID,
|
||||
CServerRequestKeeper::RequestInfo& Info)
|
||||
{
|
||||
ItemData::CDepositLock::DepositInfo LockInfo;
|
||||
unsigned short DepositBufferSize = sizeof(PktAdminMgr::PktSyncDeposit) + sizeof(STORE);
|
||||
|
||||
if (m_DepositLock.GetLockInfo(dwUID, LockInfo))
|
||||
{
|
||||
CModifyCharacter* lpCharacter = m_ModifyCharMgr.GetCharacter(LockInfo.m_dwCID);
|
||||
|
||||
if ((NULL != lpCharacter) && (LockInfo.m_dwCID != dwCID))
|
||||
{
|
||||
CModifyCharacter* lpSyncChar = m_ModifyCharMgr.GetCharacter(dwCID);
|
||||
|
||||
if (NULL != lpSyncChar)
|
||||
{
|
||||
Item::CDepositContainer& SyncContainer = lpSyncChar->GetDeposit();
|
||||
|
||||
SyncContainer.GetTab(0)->ClearItems();
|
||||
SyncContainer.GetTab(1)->ClearItems();
|
||||
SyncContainer.GetTab(2)->ClearItems();
|
||||
SyncContainer.GetTab(3)->ClearItems();
|
||||
|
||||
for (int cnt = 0;cnt < 2; ++cnt)
|
||||
{
|
||||
CCumulateBuffer cBuffer(DepositBufferSize, &Info.m_lpPacketDispatch->GetSession());
|
||||
|
||||
unsigned short usBufferSize = DepositBufferSize;
|
||||
char* lpBuffer = cBuffer.GetBuffer(sizeof(PktAdminMgr::PktSyncDeposit));
|
||||
|
||||
PktAdminMgr::PktSyncDeposit* lpSyncDeposit =
|
||||
reinterpret_cast<PktAdminMgr::PktSyncDeposit*>(lpBuffer);
|
||||
|
||||
char* DepositBuffer = reinterpret_cast<char*>(lpSyncDeposit + 1);
|
||||
|
||||
LPSTORE lpStore = reinterpret_cast<LPSTORE>(DepositBuffer);
|
||||
Item::CDepositContainer& DepositContainer = lpCharacter->GetDeposit();
|
||||
|
||||
const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab((cnt * 2));
|
||||
const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab((cnt * 2) + 1);
|
||||
|
||||
lpSyncDeposit->m_dwUID = dwUID;
|
||||
lpSyncDeposit->m_dwRequestID = Info.m_dwClientRequest;
|
||||
|
||||
if (cnt == 0)
|
||||
{
|
||||
lpSyncDeposit->m_cType = PktAdminMgr::PktSyncDeposit::Tab12;
|
||||
}
|
||||
else if(cnt == 1)
|
||||
{
|
||||
lpSyncDeposit->m_cType = PktAdminMgr::PktSyncDeposit::Tab34;
|
||||
}
|
||||
|
||||
if ((NULL != lpContainer0) && (NULL != lpContainer1))
|
||||
{
|
||||
lpStore->dwSize = STORE::MAX_STORE_SIZE;
|
||||
|
||||
if (lpContainer0->SerializeOut(lpStore->Data, lpStore->dwSize))
|
||||
{
|
||||
unsigned long dwContainer0Size = lpStore->dwSize;
|
||||
lpStore->dwSize = STORE::MAX_STORE_SIZE - dwContainer0Size;
|
||||
|
||||
if (lpContainer1->SerializeOut(lpStore->Data + dwContainer0Size, lpStore->dwSize))
|
||||
{
|
||||
lpStore->dwSize += dwContainer0Size;
|
||||
cBuffer.ResizeLength(usBufferSize);
|
||||
m_ParseData.PARSE_STORE_12_DATA(lpSyncChar, DepositBuffer);
|
||||
PacketWrap::WrapHeader(lpBuffer,
|
||||
usBufferSize, PktAdminMgr::PktCMD::PktDepositSync, 0 , 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cBuffer.ResizeLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 클라이언트에게 AgentServer로부터 받은 GetData를 보낸다.
|
||||
bool CRylAgentServerDispatch::SEND_CLIENT_DATA(PktBase* lpPktBase, CServerRequestKeeper::RequestInfo& Info,
|
||||
unsigned char cType)
|
||||
{
|
||||
PktAgentServer::PktAdminToolGetDataAck* lpSGetData =
|
||||
static_cast<PktAgentServer::PktAdminToolGetDataAck*>(lpPktBase);
|
||||
|
||||
CSession* lpSession = &Info.m_lpPacketDispatch->GetSession();
|
||||
|
||||
unsigned short Src_CpySize = lpSGetData->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck);
|
||||
char* Src_DataBuffer = reinterpret_cast<char*>(lpSGetData + 1);
|
||||
unsigned short PktLength = Src_CpySize + sizeof(PktAdminMgr::PktGetCharacterAck);
|
||||
|
||||
bool bIsReleased = true;
|
||||
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), PktLength);
|
||||
if (NULL == lpBuffer)
|
||||
{
|
||||
ERRLOG0(g_Log, "버퍼 생성 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
PktAdminMgr::PktGetCharacterAck* lpPktGetChar =
|
||||
reinterpret_cast<PktAdminMgr::PktGetCharacterAck*>(lpBuffer->begin());
|
||||
|
||||
char* Des_DataBuffer = reinterpret_cast<char*>(lpPktGetChar + 1);
|
||||
|
||||
lpPktGetChar->m_dwCID = lpSGetData->m_dwCID;
|
||||
lpPktGetChar->m_dwUID = lpSGetData->m_dwUID;
|
||||
lpPktGetChar->m_dwServerGroup = m_dwServerGroup;
|
||||
lpPktGetChar->m_cOldServerGroupID = lpSGetData->m_cOldServerGroupID;
|
||||
lpPktGetChar->m_dwRequestKey = Info.m_dwClientRequest;
|
||||
lpPktGetChar->m_cType = cType;
|
||||
|
||||
CopyMemory(Des_DataBuffer, Src_DataBuffer, Src_CpySize);
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||||
PktLength, PktAdminMgr::PktCMD::PktGetCharacterAck, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (false == lpSession->SendPending(lpBuffer))
|
||||
{
|
||||
ERRLOG3(g_Log, "Packet sending to client failed : UID- %d, CID- %d, cType- %d",
|
||||
lpSGetData->m_dwUID, lpSGetData->m_dwCID, cType);
|
||||
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == bIsReleased)
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::CmdAdminToolSetData(PktBase* lpPktBase)
|
||||
{
|
||||
PktAgentServer::PktAdminToolSetDataAck* lpSetDataAck =
|
||||
static_cast<PktAgentServer::PktAdminToolSetDataAck*>(lpPktBase);
|
||||
|
||||
CServerRequestKeeper::RequestInfo RequestInfo;
|
||||
CModifyCharacter* lpModifyCharacter = NULL;
|
||||
|
||||
unsigned long dwUID = lpSetDataAck->m_dwUID;
|
||||
unsigned long dwCID = lpSetDataAck->m_dwCID;
|
||||
unsigned long dwRequestKey = lpSetDataAck->m_dwRequestKey;
|
||||
unsigned long cError = lpSetDataAck->GetError();
|
||||
|
||||
bool bResult = false;
|
||||
|
||||
CModifyCharacter* lpModifyChar = m_ModifyCharMgr.GetCharacter(dwCID);
|
||||
|
||||
if (NULL == lpModifyChar)
|
||||
{
|
||||
// 로그작성
|
||||
m_AgentRequestKeeper.Pop(dwRequestKey);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (true != m_AgentRequestKeeper.GetRequest(dwRequestKey, RequestInfo))
|
||||
{
|
||||
ERRLOG1(g_Log, "Requestkey searching failed : requestkey- %d", dwRequestKey);
|
||||
m_ModifyCharMgr.EraseChar(dwCID);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (0 != cError)
|
||||
{
|
||||
CRylAdminMgrDispatch* lpClientDispatch =
|
||||
static_cast<CRylAdminMgrDispatch*>(RequestInfo.m_lpPacketDispatch);
|
||||
|
||||
if (NULL != lpClientDispatch)
|
||||
{
|
||||
switch(cError)
|
||||
{
|
||||
case PktAgentServer::PktAdminToolSetData::UNKNOWN_ERROR:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::UNKNOWN_ERROR);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::INVALID_UID_CID_ERROR:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::INVALID_UID_CID_ERROR);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::LOGIN_ANOTHER_GAMESERVER:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::LOGIN_ANOTHER_GAMESERVER);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::SESSION_OPEN_FAILED:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::SESSION_OPEN_FAILED);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::ALREADY_LOGIN_USER_SESSION_OPEN:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::ALREADY_LOGIN_USER_SESSION_OPEN);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::ANOTHER_CHAR_LOAD_FAILED:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::ANOTHER_CHAR_LOAD_FAILED);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::SETTING_DATA_FAILED:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::SETTING_DATA_FAILED);
|
||||
break;
|
||||
case PktAgentServer::PktAdminToolSetData::SESSION_START_FAILED:
|
||||
lpClientDispatch->SendResult(PktAdminMgr::PktResult::SESSION_START_FAILED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG0(g_Log, "Client dispatch searching failed");
|
||||
}
|
||||
|
||||
ERRLOG1(g_Log, "Data sending failed : CMD- %d", cError);
|
||||
|
||||
m_ModifyCharMgr.EraseChar(dwCID);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
switch(lpSetDataAck->m_cType)
|
||||
{
|
||||
case PktAgentServer::PktAdminToolSetData::FINISH_UPDATE_DATA:
|
||||
m_AgentRequestKeeper.Pop(dwRequestKey); // 리퀘스트 삭제
|
||||
lpModifyCharacter = m_ModifyCharMgr.GetCharacter(dwCID); // 캐릭터 정보를 가져온다.
|
||||
|
||||
if (NULL != lpModifyCharacter)
|
||||
{
|
||||
ItemData::CDepositLock::DepositInfo Info;
|
||||
|
||||
if (m_DepositLock.GetLockInfo(dwUID, Info)) // 현재 다른 사용자가 창고를 독점하고 있다.
|
||||
{
|
||||
if( ( Info.m_lpPacketDispatch == RequestInfo.m_lpPacketDispatch ) && // 독점하고 있는 사람이 나라면..
|
||||
( Info.m_dwCID == dwCID ) )
|
||||
{
|
||||
if( true == lpModifyCharacter->isClose() ) // 작업완료후 캐릭터를 닫을까?
|
||||
{
|
||||
// 창고데이터 독점 권한 해제
|
||||
m_DepositLock.DepositUnLock( dwUID );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 저장후 삭제 대기라면... 편집리스트에서 삭제시켜주자
|
||||
if( true == lpModifyCharacter->isClose() )
|
||||
{
|
||||
m_ModifyCharMgr.EraseChar( lpModifyCharacter->GetCID() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// 저장 종료
|
||||
lpModifyCharacter->SetSaveState(false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRylAgentServerDispatch::SetPaseSession()
|
||||
{
|
||||
m_ParseData.SetSession(&GetSession());
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::Send(CBuffer* lpBuffer)
|
||||
{
|
||||
return GetSession().SendPending(lpBuffer);
|
||||
}
|
||||
|
||||
void CRylAgentServerDispatch::Connected()
|
||||
{
|
||||
unsigned long dwServerGroup =
|
||||
CAgentServerTable::GetInstance().GetGroupFromDBAgentIP(
|
||||
GetSession().GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr);
|
||||
|
||||
if (CAgentServerTable::MAX_AGENT_SERVER <= dwServerGroup)
|
||||
{
|
||||
ERRLOG2(g_Log, "최대 서버그룹(%d)을 넘는 서버그룹으로 접속 시도: 그룹인덱스 - %d",
|
||||
CAgentServerTable::MAX_AGENT_SERVER, dwServerGroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
ServerLogin(dwServerGroup);
|
||||
}
|
||||
}
|
||||
|
||||
void CRylAgentServerDispatch::Disconnected()
|
||||
{
|
||||
GetDispatchTable().RemoveDispatch(m_dwServerGroup);
|
||||
|
||||
CAgentServerTable::GetInstance().Disconnected(
|
||||
GetSession().GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr);
|
||||
|
||||
ConnectedAgentListAck(); // 클라이언트의 중계서버 연결 상태창 갱신
|
||||
}
|
||||
|
||||
// 중계서버에 로그인
|
||||
bool CRylAgentServerDispatch::ServerLogin(unsigned long dwServerGroup)
|
||||
{
|
||||
bool bIsReleased = true;
|
||||
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAgentServer::PktSL));
|
||||
|
||||
if (NULL == lpBuffer)
|
||||
{
|
||||
ERRLOG0(g_Log, "버퍼 생성 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
PktAgentServer::PktSL* lpPktSL = reinterpret_cast<PktAgentServer::PktSL*>(lpBuffer->begin());
|
||||
|
||||
const int MAX_ADDRESS = 128;
|
||||
char szAddress[MAX_ADDRESS];
|
||||
|
||||
CTCPFactory TcpFactory;
|
||||
|
||||
TcpFactory.GetNetworkInfo(szAddress, MAX_ADDRESS);
|
||||
lpPktSL->m_Address.S_un.S_addr = inet_addr(szAddress);
|
||||
|
||||
char cChannel = 0;
|
||||
CServerInfo& InfoScript = CServerInfo::GetInstance();
|
||||
if(InfoScript.Reload())
|
||||
{
|
||||
const int MAX_BUFFER = 256;
|
||||
const char* szCHBuffer = InfoScript.GetValue("SERVER_CH");
|
||||
char szCH[MAX_BUFFER];
|
||||
|
||||
if(NULL != szCHBuffer)
|
||||
{
|
||||
strncpy(szCH, szCHBuffer, MAX_BUFFER);
|
||||
szCH[MAX_BUFFER - 1] = 0;
|
||||
|
||||
cChannel = (char)atoi(szCH);
|
||||
}
|
||||
}
|
||||
|
||||
SERVER_ID serverID;
|
||||
|
||||
serverID.sID.Channel = cChannel;
|
||||
serverID.sID.Group = static_cast<unsigned char>(dwServerGroup);
|
||||
serverID.sID.ID = SERVER_ID::ADMIN_TOOL_ZONE;
|
||||
serverID.sID.Type = CServerSetup::AdminToolServer;
|
||||
|
||||
m_dwServerID = lpPktSL->m_dwServerID = serverID.dwID;
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||||
sizeof(PktAgentServer::PktSL), PktAgentServer::PktCMD::CmdSysServerLogin, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (false == GetSession().SendPending(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == bIsReleased)
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 중계서버 로그인에 성공했을 경우 Ack
|
||||
bool CRylAgentServerDispatch::CmdSysServerLogin(PktBase* lpPktBase)
|
||||
{
|
||||
SERVER_ID SID;
|
||||
PktSLAck* lpPktSLAck = static_cast<PktSLAck*>(lpPktBase);
|
||||
|
||||
const unsigned char MAX_BUFFER = 255;
|
||||
|
||||
SID.dwID = m_dwServerID;
|
||||
|
||||
Item::CItemFactory::GetInstance().SetItemUID(lpPktSLAck->m_dlItemUID);
|
||||
|
||||
// 로그인 성공시 DispatchTable에 추가
|
||||
GetDispatchTable().SetDispatch(SID.GetGroup(), this);
|
||||
|
||||
CServerInfo& InfoScript = CServerInfo::GetInstance();
|
||||
|
||||
char szTmp[MAX_BUFFER];
|
||||
_snprintf(szTmp, MAX_BUFFER, "SERVERGROUP_NAME_%02d", SID.GetGroup());
|
||||
|
||||
const char* szGroupName = InfoScript.GetValue(szTmp);
|
||||
if(NULL != szGroupName)
|
||||
{
|
||||
char szServerNameBuffer[MAX_BUFFER];
|
||||
strncpy(szServerNameBuffer, szGroupName, MAX_BUFFER); szServerNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
|
||||
SetDispatchInfo(SID.GetGroup(), szServerNameBuffer);
|
||||
|
||||
ConnectedAgentListAck(); // 클라이언트 갱신
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::ItemQtyControlAck(PktBase* lpPktBase)
|
||||
{
|
||||
bool bIsReleased = true;
|
||||
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktItemQtyControl));
|
||||
|
||||
if (NULL == lpBuffer)
|
||||
{
|
||||
ERRLOG0(g_Log, "버퍼 생성 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
PktAdminMgr::PktItemQtyControl* lpPktItemQtyControl =
|
||||
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>(lpBuffer->begin());
|
||||
|
||||
*lpPktItemQtyControl = *reinterpret_cast<PktAdminMgr::PktItemQtyControl*>(lpPktBase);
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||||
sizeof(PktAdminMgr::PktItemQtyControl), PktAdminMgr::PktCMD::PktItemQtyControl, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == bIsReleased)
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRylAgentServerDispatch::GuildPositionAck(PktBase* lpPktBase)
|
||||
{
|
||||
bool bIsReleased = true;
|
||||
|
||||
PktGuildPosition* lpPktGuildPosition =
|
||||
reinterpret_cast<PktGuildPosition*>(lpPktBase);
|
||||
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktGuildMemberEdit));
|
||||
|
||||
if (NULL == lpBuffer)
|
||||
{
|
||||
ERRLOG0(g_Log, "버퍼 생성 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
PktAdminMgr::PktGuildMemberEdit* lpPktGuildMemberEdit =
|
||||
reinterpret_cast<PktAdminMgr::PktGuildMemberEdit*>(lpBuffer->begin());
|
||||
|
||||
lpPktGuildMemberEdit->m_dwGID = lpPktGuildPosition->m_dwGID;
|
||||
lpPktGuildMemberEdit->m_dwCID = lpPktGuildPosition->m_dwCID;
|
||||
lpPktGuildMemberEdit->m_cPosition = lpPktGuildPosition->m_cPosition;
|
||||
lpPktGuildMemberEdit->m_cType = lpPktGuildPosition->m_cType;
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAdminMgr::PktGuildMemberEdit),
|
||||
PktAdminMgr::PktCMD::PktGuildMemberEdit, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == bIsReleased)
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 중계서버와 접속, 끊김이 일어날때 클라이언트로 정보 보내기
|
||||
bool CRylAgentServerDispatch::ConnectedAgentListAck()
|
||||
{
|
||||
bool bIsReleased = true;
|
||||
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktConnectAllServerz));
|
||||
|
||||
if (NULL == lpBuffer)
|
||||
{
|
||||
ERRLOG0(g_Log, "버퍼 생성 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
PktAdminMgr::PktConnectAllServerz* lpConnectAllServerz = new PktAdminMgr::PktConnectAllServerz;
|
||||
ZeroMemory(lpConnectAllServerz->m_nConnectedServerIndex, sizeof(lpConnectAllServerz->m_nConnectedServerIndex));
|
||||
|
||||
int nArrayIndex = 0;
|
||||
for(unsigned int nIndex = 0; nIndex < CAgentServerTable::MAX_AGENT_SERVER; ++nIndex)
|
||||
{
|
||||
if(NULL != CAgentServerTable::GetInstance().GetDispatch(nIndex)) // 중계서버 연결 체크
|
||||
{
|
||||
// 배열 앞부분부터 차례대로 '연결된 서버 인덱스 + 1' 을 대입
|
||||
lpConnectAllServerz->m_nConnectedServerIndex[nArrayIndex] = nIndex + 1;
|
||||
++nArrayIndex;
|
||||
}
|
||||
}
|
||||
|
||||
*reinterpret_cast<PktAdminMgr::PktConnectAllServerz*>(lpBuffer->wr_ptr()) = *lpConnectAllServerz;
|
||||
|
||||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||||
sizeof(PktAdminMgr::PktConnectAllServerz), PktAdminMgr::PktCMD::PktRefreshConnectedList, 0, 0))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (NULL != lpConnectAllServerz)
|
||||
{
|
||||
delete lpConnectAllServerz;
|
||||
lpConnectAllServerz = NULL;
|
||||
}
|
||||
|
||||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "수동으로 패킷을 릴리스합니다.");
|
||||
bIsReleased = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == bIsReleased)
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
80
Server/AdminTool/AdminToolServer/RYL_AgentServerDispatch.h
Normal file
80
Server/AdminTool/AdminToolServer/RYL_AgentServerDispatch.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#ifndef _RYL_AGENTSERVER_DISPATCH_H_
|
||||
#define _RYL_AGENTSERVER_DISPATCH_H_
|
||||
|
||||
#include "RYL_ServerRequestKeeper.h"
|
||||
|
||||
#include < Character/ModifyCharacter.h >
|
||||
#include < Network/Dispatch/RylServerDispatch.h >
|
||||
#include < Network/Dispatch/MultiDispatchStorage.h >
|
||||
#include < Stream/Buffer/BufferFactory.h >
|
||||
#include < Network/AgentServerParseData/RYL_AgentServerParseData.h >
|
||||
|
||||
namespace PktAgentServer
|
||||
{
|
||||
struct PktAdminToolSetData;
|
||||
};
|
||||
|
||||
struct PktBase;
|
||||
class CBuffer;
|
||||
|
||||
/*!
|
||||
\class CRylAgentServerDispatch
|
||||
중계 서버로부터 받은 패킷 처리
|
||||
*/
|
||||
class CRylAgentServerDispatch : public CRylServerDispatch
|
||||
{
|
||||
public:
|
||||
CRylAgentServerDispatch(CSession& Session)
|
||||
: CRylServerDispatch(Session, 10){ ;}
|
||||
|
||||
// 현재 연결이 유지되어있는 서버테이블
|
||||
static CMultiDispatch& GetDispatchTable();
|
||||
|
||||
virtual void Connected(void); // 접속 이벤트
|
||||
virtual void Disconnected(void); // 접속 끊김 이벤트
|
||||
virtual void Destroy(void); // 파괴 이벤트
|
||||
|
||||
void SetDispatchInfo(long dwServerGroup, char* ServerName); // 서버의 이름 및ID를 입력함
|
||||
|
||||
CServerRequestKeeper& GetRequestKeeper() { return m_AgentRequestKeeper; } // 해당 서버Dispatch의 RequestKeeper을 가져옴
|
||||
|
||||
const char* GetName() { return m_szServerName; } // 서버이름을 가져옴
|
||||
|
||||
bool Send(CBuffer* lpBuffer);
|
||||
|
||||
bool CmdSysServerLogin(PktBase* lpPktBase); // 서버로그인
|
||||
bool CmdAdminToolGetData(PktBase* lpPktBase); // 캐릭터 데이터 가져오기
|
||||
bool CmdAdminToolSetData(PktBase* lpPktBase); // 캐릭터 데이터 저장하기
|
||||
|
||||
bool ServerLogin(unsigned long dwServerGroup); // 서버 로그인 패킷을 전송
|
||||
|
||||
CModifyCharacterMgr& GetModifyCharacterMgr() { return m_ModifyCharMgr; } // 해당 서버에 에디팅중인 캐릭터 목록을 가져온다.
|
||||
|
||||
bool UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial, unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey);
|
||||
|
||||
void SetPaseSession(); // 서버의 Session을 캐릭터정보 Parser에 넘겨준다
|
||||
|
||||
ItemData::CDepositLock& GetDepositLock() { return m_DepositLock; } // 창고 장금 목록을 가져온다.
|
||||
|
||||
bool ItemQtyControlAck(PktBase* lpPktBase);
|
||||
bool GuildPositionAck(PktBase* lpPktBase);
|
||||
bool ConnectedAgentListAck(void);
|
||||
|
||||
private:
|
||||
long m_dwServerGroup; ///< 연결중인 서버그룹 인덱스
|
||||
unsigned long m_dwServerID; ///< 연결중인 서버 ID
|
||||
char m_szServerName[256]; ///< 연결중인 서버그룹명
|
||||
|
||||
CServerRequestKeeper m_AgentRequestKeeper;
|
||||
CModifyCharacterMgr m_ModifyCharMgr;
|
||||
CAgentServerParseData m_ParseData;
|
||||
ItemData::CDepositLock m_DepositLock;
|
||||
CDefaultBufferFactory m_DefultBufferFactory;
|
||||
|
||||
bool DispatchPacket(PktBase* lpPktBase);
|
||||
bool SEND_CLIENT_DATA(PktBase* lpPktBase, CServerRequestKeeper::RequestInfo& Info, unsigned char cType);
|
||||
bool PARSE_FINISH_GET_DATA(unsigned long dwRequestKey);
|
||||
bool SyncDeposit(unsigned long dwUID, unsigned long dwCId, CServerRequestKeeper::RequestInfo& Info);
|
||||
};
|
||||
|
||||
#endif
|
||||
548
Server/AdminTool/AdminToolServer/RYL_AgentServerTable.cpp
Normal file
548
Server/AdminTool/AdminToolServer/RYL_AgentServerTable.cpp
Normal file
@@ -0,0 +1,548 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "RYL_AgentServerTable.h"
|
||||
#include "RYL_AgentServerDispatch.h"
|
||||
|
||||
#include <DBComponent/RYL_GameDB.h>
|
||||
#include <DBComponent/BillingDB.h>
|
||||
#include <DBComponent/AuthDB.h>
|
||||
|
||||
#include <Network/IOCP/IOCPNet.h>
|
||||
#include <Network/Session/Session.h>
|
||||
#include <Network/Session/CreatePolicy.h>
|
||||
|
||||
#include <Parser/ServerInfo.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
|
||||
CAgentServerTable::CAgentServerTable()
|
||||
{
|
||||
Destroy(); // 초기화 대용
|
||||
|
||||
m_lpSessionPolicy = SessionPolicy::CreateTCPPolicy<CRylAgentServerDispatch>();
|
||||
|
||||
const char* szNation = CServerInfo::GetInstance().GetValue("NATION");
|
||||
if (NULL != szNation)
|
||||
{
|
||||
strncpy(m_szNation , szNation, MAX_BUFFER);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG0(g_Log, "운영 서버의 국가 타입 정보를 읽는데 실패했습니다.(셋업파일의 NATION값을 확인하십시요)");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
CAgentServerTable::~CAgentServerTable()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void CAgentServerTable::Destroy()
|
||||
{
|
||||
// AgentServer Dispatch 를 전부 NULL로 채워버린다
|
||||
|
||||
m_IPtoServerID.clear();
|
||||
|
||||
// GameDB 객체 전부 소멸
|
||||
CGameDB** DBfirst = m_lpGameDB;
|
||||
CGameDB** DBlast = m_lpGameDB + MAX_AGENT_SERVER;
|
||||
|
||||
for(; DBfirst != DBlast; ++DBfirst)
|
||||
{
|
||||
CGameDB* lpGameDB = *DBfirst;
|
||||
|
||||
if(lpGameDB != NULL)
|
||||
{
|
||||
delete lpGameDB;
|
||||
}
|
||||
}
|
||||
|
||||
std::fill_n(m_lpGameDB, int(MAX_AGENT_SERVER), reinterpret_cast<CGameDB*>(NULL));
|
||||
|
||||
if (NULL != m_lpBillingDB)
|
||||
{
|
||||
delete m_lpBillingDB;
|
||||
m_lpBillingDB = NULL;
|
||||
}
|
||||
|
||||
if (NULL != m_lpBillingLogDB)
|
||||
{
|
||||
delete m_lpBillingLogDB;
|
||||
m_lpBillingLogDB = NULL;
|
||||
}
|
||||
|
||||
if (NULL != m_lpAuthDB)
|
||||
{
|
||||
delete m_lpAuthDB;
|
||||
m_lpAuthDB = NULL;
|
||||
}
|
||||
|
||||
if(NULL != m_lpSessionPolicy)
|
||||
{
|
||||
delete m_lpSessionPolicy;
|
||||
m_lpSessionPolicy = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::InitAgentServerTable(CIOCPNet& IOCPNetwork)
|
||||
{
|
||||
ConnectToAllAgentServerz(IOCPNetwork);
|
||||
|
||||
ConnectToBillingDB();
|
||||
ConnectToAuthDB();
|
||||
|
||||
if (0 == strcmp(m_szNation, "KOREA"))
|
||||
{
|
||||
ConnectToBillingLogDB();
|
||||
}
|
||||
}
|
||||
|
||||
CGameDB* CAgentServerTable::GetGameDB(unsigned long dwServerID)
|
||||
{
|
||||
if (dwServerID < MAX_AGENT_SERVER)
|
||||
{
|
||||
if (m_lpGameDB[dwServerID] != NULL)
|
||||
{
|
||||
return m_lpGameDB[dwServerID];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CSession* CAgentServerTable::GetSession(unsigned long dwServerID)
|
||||
{
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch, dwServerID,
|
||||
CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
if(NULL != lpAgentDispatch)
|
||||
{
|
||||
return &lpAgentDispatch->GetSession();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CServerRequestKeeper& CAgentServerTable::GetRequestKeeper(unsigned long dwServerGroup)
|
||||
{
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch, dwServerGroup,
|
||||
CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
return lpAgentDispatch->GetRequestKeeper();
|
||||
}
|
||||
|
||||
CRylAgentServerDispatch* CAgentServerTable::GetDispatch(unsigned long dwServerID)
|
||||
{
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch, dwServerID,
|
||||
CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
return lpAgentDispatch;
|
||||
}
|
||||
|
||||
void CAgentServerTable::RemoveAllModifyCharacter(CPacketDispatch* lpPacketDispatch)
|
||||
{
|
||||
for(int cnt = 0; cnt < MAX_AGENT_SERVER; cnt++)
|
||||
{
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch,
|
||||
cnt, CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
if(NULL != lpAgentDispatch)
|
||||
{
|
||||
lpAgentDispatch->GetModifyCharacterMgr().AllRemoveChar(lpPacketDispatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::RemoveAllDepositLock(CPacketDispatch* lpPacketDispatch)
|
||||
{
|
||||
for(int cnt = 0; cnt < MAX_AGENT_SERVER; cnt++)
|
||||
{
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch,
|
||||
cnt, CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
if(NULL != lpAgentDispatch)
|
||||
{
|
||||
lpAgentDispatch->GetDepositLock().RemoveAllSelectDispatch(lpPacketDispatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::ConnectToAgentServer(CIOCPNet& IOCPNetwork, unsigned long dwServerGroup)
|
||||
{
|
||||
DBAgentServerInfo stServerInfo;
|
||||
|
||||
if (GetAgentServerInfo(dwServerGroup, stServerInfo))
|
||||
{
|
||||
m_IPtoServerID[inet_addr(stServerInfo.szServerAddress)] = dwServerGroup;
|
||||
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch, dwServerGroup,
|
||||
CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
if ((NULL == lpAgentDispatch) || (!lpAgentDispatch->GetSession().IsConnected()))
|
||||
{
|
||||
if(!IOCPNetwork.Connect(m_lpSessionPolicy,
|
||||
stServerInfo.szServerAddress, CServerSetup::DBAgentAdminToolServerListen))
|
||||
{
|
||||
ERRLOG2(g_Log, "서버 연결 실패. IP: %s/Port: %d",
|
||||
stServerInfo.szServerAddress, CServerSetup::DBAgentAdminToolServerListen);
|
||||
}
|
||||
}
|
||||
|
||||
CGameDB* lpDBComponent = new CGameDB;
|
||||
|
||||
if (lpDBComponent->Connect(stServerInfo.szDBServer, stServerInfo.szDBName,
|
||||
stServerInfo.szDBAccount, stServerInfo.szDBPass))
|
||||
{
|
||||
m_lpGameDB[dwServerGroup] = lpDBComponent;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete lpDBComponent;
|
||||
ERRLOG4(g_Log, "DB 연결 실패. IP: %s/DBName: %s/DBAccount: %s/DBPass: %s",
|
||||
stServerInfo.szDBServer, stServerInfo.szDBName,
|
||||
stServerInfo.szDBAccount, stServerInfo.szDBPass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::ConnectToBillingDB()
|
||||
{
|
||||
char szErrMessage[1024];
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
if(!ServerInfoTXT.Reload())
|
||||
{
|
||||
_snprintf(szErrMessage, sizeof(szErrMessage),
|
||||
"Failed To Load Server Script : Filename- %s", ServerInfoTXT.GetFileName());
|
||||
MessageBox(NULL, szErrMessage, "Err", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
char szBillingDBServerBuffer[MAX_BUFFER];
|
||||
char szBillingDBNameBuffer[MAX_BUFFER];
|
||||
char szBillingDBAccountBuffer[MAX_BUFFER];
|
||||
char szBillingDBPassBuffer[MAX_BUFFER];
|
||||
|
||||
const char* szBillingServer = ServerInfoTXT.GetValue("BILLING_DB_IP");
|
||||
const char* szBillingName = ServerInfoTXT.GetValue("BILLING_DB_NAME");
|
||||
const char* szBillingAccount = ServerInfoTXT.GetValue("BILLING_DB_ACCOUNT");
|
||||
const char* szBillingPass = ServerInfoTXT.GetValue("BILLING_DB_PASS");
|
||||
|
||||
strncpy(szBillingDBServerBuffer, szBillingServer, MAX_BUFFER);
|
||||
strncpy(szBillingDBNameBuffer, szBillingName, MAX_BUFFER);
|
||||
strncpy(szBillingDBAccountBuffer, szBillingAccount, MAX_BUFFER);
|
||||
strncpy(szBillingDBPassBuffer, szBillingPass, MAX_BUFFER);
|
||||
|
||||
szBillingDBServerBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBAccountBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBPassBuffer[MAX_BUFFER - 1] = 0;
|
||||
|
||||
CBillingDB* lpBillingDB = new CBillingDB;
|
||||
|
||||
if(lpBillingDB->ConnectSQLServer(szBillingDBServerBuffer, szBillingDBNameBuffer,
|
||||
szBillingDBAccountBuffer, szBillingDBPassBuffer, OleDB::ConnType_MSSQL))
|
||||
{
|
||||
m_lpBillingDB = lpBillingDB;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "과금 디비 연결 실패. IP: %s/DBName: %s/DBAccount: %s/DBPass: %s",
|
||||
szBillingDBServerBuffer, szBillingDBNameBuffer,
|
||||
szBillingDBAccountBuffer, szBillingDBPassBuffer);
|
||||
|
||||
m_lpBillingDB = NULL;
|
||||
|
||||
delete lpBillingDB;
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::ConnectToBillingLogDB()
|
||||
{
|
||||
char szErrMessage[1024];
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
if(!ServerInfoTXT.Reload())
|
||||
{
|
||||
_snprintf(szErrMessage, sizeof(szErrMessage),
|
||||
"Failed To Load Server Script : Filename- %s", ServerInfoTXT.GetFileName());
|
||||
MessageBox(NULL, szErrMessage, "Err", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
char szBillingDBServerBuffer[MAX_BUFFER];
|
||||
char szBillingDBNameBuffer[MAX_BUFFER];
|
||||
char szBillingDBAccountBuffer[MAX_BUFFER];
|
||||
char szBillingDBPassBuffer[MAX_BUFFER];
|
||||
|
||||
const char* szBillingServer = ServerInfoTXT.GetValue("BILLING_LOG_DB_IP");
|
||||
const char* szBillingName = ServerInfoTXT.GetValue("BILLING_LOG_DB_NAME");
|
||||
const char* szBillingAccount = ServerInfoTXT.GetValue("BILLING_LOG_DB_ACCOUNT");
|
||||
const char* szBillingPass = ServerInfoTXT.GetValue("BILLING_LOG_DB_PASS");
|
||||
|
||||
strncpy(szBillingDBServerBuffer, szBillingServer, MAX_BUFFER);
|
||||
strncpy(szBillingDBNameBuffer, szBillingName, MAX_BUFFER);
|
||||
strncpy(szBillingDBAccountBuffer, szBillingAccount, MAX_BUFFER);
|
||||
strncpy(szBillingDBPassBuffer, szBillingPass, MAX_BUFFER);
|
||||
|
||||
szBillingDBServerBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBAccountBuffer[MAX_BUFFER - 1] = 0;
|
||||
szBillingDBPassBuffer[MAX_BUFFER - 1] = 0;
|
||||
|
||||
CBillingDB* lpBillingDB = new CBillingDB;
|
||||
|
||||
if(lpBillingDB->ConnectSQLServer(szBillingDBServerBuffer, szBillingDBNameBuffer,
|
||||
szBillingDBAccountBuffer, szBillingDBPassBuffer, OleDB::ConnType_MSSQL))
|
||||
{
|
||||
m_lpBillingLogDB = lpBillingDB;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "과금 로그 디비 연결 실패. IP: %s/DBName: %s/DBAccount: %s/DBPass: %s",
|
||||
szBillingDBServerBuffer, szBillingDBNameBuffer,
|
||||
szBillingDBAccountBuffer, szBillingDBPassBuffer);
|
||||
|
||||
m_lpBillingLogDB = NULL;
|
||||
|
||||
delete lpBillingDB;
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::ConnectToAuthDB()
|
||||
{
|
||||
char szErrMessage[1024];
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
if(!ServerInfoTXT.Reload())
|
||||
{
|
||||
_snprintf(szErrMessage, sizeof(szErrMessage),
|
||||
"Failed To Load Server Script : Filename- %s", ServerInfoTXT.GetFileName());
|
||||
MessageBox(NULL, szErrMessage, "Err", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
char szAuthDBServerBuffer[MAX_BUFFER];
|
||||
char szAuthDBNameBuffer[MAX_BUFFER];
|
||||
char szAuthDBAccountBuffer[MAX_BUFFER];
|
||||
char szAuthDBPassBuffer[MAX_BUFFER];
|
||||
|
||||
const char* szAuthDBAddr = ServerInfoTXT.GetValue("AUTH_DB_IP");
|
||||
const char* szAuthDBName = ServerInfoTXT.GetValue("AUTH_DB_NAME");
|
||||
const char* szAuthDBAccount = ServerInfoTXT.GetValue("AUTH_DB_ACCOUNT");
|
||||
const char* szAuthDBPass = ServerInfoTXT.GetValue("AUTH_DB_PASS");
|
||||
|
||||
strncpy(szAuthDBServerBuffer, szAuthDBAddr, MAX_BUFFER);
|
||||
strncpy(szAuthDBNameBuffer, szAuthDBName, MAX_BUFFER);
|
||||
strncpy(szAuthDBAccountBuffer, szAuthDBAccount, MAX_BUFFER);
|
||||
strncpy(szAuthDBPassBuffer, szAuthDBPass, MAX_BUFFER);
|
||||
|
||||
szAuthDBServerBuffer[MAX_BUFFER - 1] = 0;
|
||||
szAuthDBNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
szAuthDBAccountBuffer[MAX_BUFFER - 1] = 0;
|
||||
szAuthDBPassBuffer[MAX_BUFFER - 1] = 0;
|
||||
|
||||
CAuthDB* lpAuthDB = new CAuthDB;
|
||||
|
||||
if (true == lpAuthDB->ConnectSQLServer(szAuthDBServerBuffer,
|
||||
szAuthDBNameBuffer, szAuthDBAccountBuffer, szAuthDBPassBuffer, OleDB::ConnType_MSSQL))
|
||||
{
|
||||
m_lpAuthDB = lpAuthDB;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "인증 디비 연결 실패. IP: %s/DBName: %s/DBAccount: %s/DBPass: %s",
|
||||
szAuthDBServerBuffer, szAuthDBNameBuffer,
|
||||
szAuthDBAccountBuffer, szAuthDBPassBuffer);
|
||||
|
||||
m_lpAuthDB = NULL;
|
||||
|
||||
delete lpAuthDB;
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::ConnectToAllAgentServerz(CIOCPNet& IOCPNetwork)
|
||||
{
|
||||
for(unsigned long dwServerGroup = 0; dwServerGroup < MAX_AGENT_SERVER; ++dwServerGroup)
|
||||
{
|
||||
ConnectToAgentServer(IOCPNetwork, dwServerGroup);
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::PrintServerState(char* szText, int length)
|
||||
{
|
||||
const int MAX_BUFFER = 256;
|
||||
int nLength = 0;
|
||||
|
||||
char szServerNameBuffer[MAX_BUFFER]; // 그룹 명
|
||||
char szServerAddressBuffer[MAX_BUFFER]; // 중계서버 IP
|
||||
char szDBNameBuffer[MAX_BUFFER]; // 디비 명
|
||||
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
nLength += _snprintf(szText + nLength, length - nLength, ">> NationType: %s\r\n", m_szNation);
|
||||
|
||||
nLength += _snprintf(szText + nLength, length - nLength, ">> DBAgentServer Connection State: \r\n");
|
||||
|
||||
for (unsigned long dwServerGroup = 0; dwServerGroup < MAX_AGENT_SERVER; ++dwServerGroup)
|
||||
{
|
||||
_snprintf(szServerNameBuffer, MAX_BUFFER, "SERVERGROUP_NAME_%02u", dwServerGroup);
|
||||
_snprintf(szServerAddressBuffer, MAX_BUFFER, "AGENTSERVER_IP_%02u", dwServerGroup);
|
||||
_snprintf(szDBNameBuffer, MAX_BUFFER, "GAME_DB_NAME_%02u", dwServerGroup);
|
||||
|
||||
const char* szServerName = ServerInfoTXT.GetValue(szServerNameBuffer);
|
||||
const char* szServerAddress = ServerInfoTXT.GetValue(szServerAddressBuffer);
|
||||
const char* szDBName = ServerInfoTXT.GetValue(szDBNameBuffer);
|
||||
|
||||
if((szServerName != NULL) && (szServerAddress != NULL) && (szDBName))
|
||||
{
|
||||
strncpy(szServerNameBuffer, szServerName, MAX_BUFFER);
|
||||
strncpy(szServerAddressBuffer, szServerAddress,MAX_BUFFER);
|
||||
strncpy(szDBNameBuffer, szDBName, MAX_BUFFER);
|
||||
|
||||
szServerNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
szServerAddressBuffer[MAX_BUFFER - 1] = 0;
|
||||
szDBNameBuffer[MAX_BUFFER - 1] = 0;
|
||||
|
||||
GET_MULTI_DISPATCH(lpAgentDispatch, dwServerGroup,
|
||||
CRylAgentServerDispatch, CRylAgentServerDispatch::GetDispatchTable());
|
||||
|
||||
CGameDB* lpGameDB = m_lpGameDB[dwServerGroup];
|
||||
|
||||
nLength += _snprintf(szText + nLength, length - nLength,
|
||||
"[%02u] %15s : ", dwServerGroup, szServerNameBuffer);
|
||||
|
||||
if(NULL != lpAgentDispatch)
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "DBAgent Connected");
|
||||
}
|
||||
else
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "DBAgent Disconnected");
|
||||
}
|
||||
if(NULL != lpGameDB)
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, " (DB Connected)\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, " (DB Disconnected)\r\n");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 한국, 해외일 경우 각각 연결해야 하는 기타 DB 종류가 다름.
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "\r\n>> ETC Connection State: \r\n");
|
||||
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "BillingDB Connection State:\t");
|
||||
|
||||
if(NULL != m_lpBillingDB)
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Connected\r\n");
|
||||
else
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Disconnected\r\n");
|
||||
|
||||
if (0 == strcmp(m_szNation, "KOREA"))
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "BillingLogDB Connection State:\t");
|
||||
|
||||
if(NULL != m_lpBillingLogDB)
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Connected");
|
||||
else
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Disconnected");
|
||||
}
|
||||
else
|
||||
{
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "AuthDB Connection State:\t");
|
||||
|
||||
if(NULL != m_lpAuthDB)
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Connected\r\n");
|
||||
else
|
||||
nLength += _snprintf(szText + nLength, length - nLength, "Disconnected\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void CAgentServerTable::Disconnected(unsigned long dwIP)
|
||||
{
|
||||
m_IPtoServerID.erase(dwIP);
|
||||
}
|
||||
|
||||
unsigned long CAgentServerTable::GetGroupFromDBAgentIP(unsigned long dwIP)
|
||||
{
|
||||
IPtoServerID::iterator pos = m_IPtoServerID.find(dwIP);
|
||||
|
||||
if(pos != m_IPtoServerID.end())
|
||||
{
|
||||
return pos->second;
|
||||
}
|
||||
|
||||
return MAX_AGENT_SERVER;
|
||||
}
|
||||
|
||||
bool CAgentServerTable::GetAgentServerInfo(unsigned long dwGroupIndex,
|
||||
DBAgentServerInfo& stAgentServerInfo)
|
||||
{
|
||||
char szErrMessage[1024];
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
if(!ServerInfoTXT.Reload())
|
||||
{
|
||||
_snprintf(szErrMessage, sizeof(szErrMessage),
|
||||
"Failed To Load Server Script : Filename- %s", ServerInfoTXT.GetFileName());
|
||||
|
||||
MessageBox(NULL, szErrMessage, "Err", MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
char szServerNameKey[MAX_BUFFER]; // 해당 그룹명
|
||||
char szServerAddressKey[MAX_BUFFER]; // 중계 서버 IP
|
||||
char szDBServerKey[MAX_BUFFER]; // 게임 디비 IP
|
||||
char szDBNameKey[MAX_BUFFER]; // 게임 디비 명
|
||||
char szDBAccountKey[MAX_BUFFER]; // 게임 디비 계정
|
||||
char szDBPassKey[MAX_BUFFER]; // 게임 디비 패스워드
|
||||
|
||||
_snprintf(szServerNameKey, MAX_BUFFER, "SERVERGROUP_NAME_%02u", dwGroupIndex);
|
||||
_snprintf(szServerAddressKey, MAX_BUFFER, "AGENTSERVER_IP_%02u", dwGroupIndex);
|
||||
_snprintf(szDBServerKey, MAX_BUFFER, "GAME_DB_IP_%02u", dwGroupIndex);
|
||||
_snprintf(szDBNameKey, MAX_BUFFER, "GAME_DB_NAME_%02u", dwGroupIndex);
|
||||
_snprintf(szDBAccountKey, MAX_BUFFER, "GAME_DB_ACCOUNT_%02u", dwGroupIndex);
|
||||
_snprintf(szDBPassKey, MAX_BUFFER, "GAME_DB_PASS_%02u", dwGroupIndex);
|
||||
|
||||
const char* szServerNameBuffer = ServerInfoTXT.GetValue(szServerNameKey);
|
||||
const char* szServerAddressBuffer = ServerInfoTXT.GetValue(szServerAddressKey);
|
||||
const char* szDBServerBuffer = ServerInfoTXT.GetValue(szDBServerKey);
|
||||
const char* szDBNameBuffer = ServerInfoTXT.GetValue(szDBNameKey);
|
||||
const char* szDBAccountBuffer = ServerInfoTXT.GetValue(szDBAccountKey);
|
||||
const char* szDBPassBuffer = ServerInfoTXT.GetValue(szDBPassKey);
|
||||
|
||||
if(szServerNameBuffer && szServerAddressBuffer
|
||||
&& szDBServerBuffer && szDBNameBuffer
|
||||
&& szDBAccountBuffer && szDBPassBuffer)
|
||||
{
|
||||
strncpy(stAgentServerInfo.szServerName, szServerNameBuffer, MAX_BUFFER);
|
||||
strncpy(stAgentServerInfo.szServerAddress, szServerAddressBuffer, MAX_BUFFER);
|
||||
strncpy(stAgentServerInfo.szDBServer, szDBServerBuffer, MAX_BUFFER);
|
||||
strncpy(stAgentServerInfo.szDBName, szDBNameBuffer, MAX_BUFFER);
|
||||
strncpy(stAgentServerInfo.szDBAccount, szDBAccountBuffer, MAX_BUFFER);
|
||||
strncpy(stAgentServerInfo.szDBPass, szDBPassBuffer, MAX_BUFFER);
|
||||
|
||||
stAgentServerInfo.szServerName[MAX_BUFFER - 1] = 0;
|
||||
stAgentServerInfo.szServerAddress[MAX_BUFFER - 1] = 0;
|
||||
stAgentServerInfo.szDBServer[MAX_BUFFER - 1] = 0;
|
||||
stAgentServerInfo.szDBName[MAX_BUFFER - 1] = 0;
|
||||
stAgentServerInfo.szDBAccount[MAX_BUFFER - 1] = 0;
|
||||
stAgentServerInfo.szDBPass[MAX_BUFFER - 1] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CAgentServerTable::SetNULL(unsigned long dwServerGroup)
|
||||
{
|
||||
//m_lpAgentServerDispatch[dwServerGroup] = NULL;
|
||||
}
|
||||
86
Server/AdminTool/AdminToolServer/RYL_AgentServerTable.h
Normal file
86
Server/AdminTool/AdminToolServer/RYL_AgentServerTable.h
Normal file
@@ -0,0 +1,86 @@
|
||||
#ifndef _RYL_AGENTSERVER_TABLE_H_
|
||||
#define _RYL_AGENTSERVER_TABLE_H_
|
||||
|
||||
#include <Pattern/Singleton.h>
|
||||
#include <Network/Session/SessionPolicy.h>
|
||||
|
||||
class CSession;
|
||||
class CRylAgentServerDispatch;
|
||||
class CBuffer;
|
||||
class CPacketDispatch;
|
||||
class CGameDB;
|
||||
class CServerRequestKeeper;
|
||||
class CIOCPNet;
|
||||
class CBillingDB;
|
||||
class CAuthDB;
|
||||
|
||||
/*!
|
||||
\class CAgentServerTable
|
||||
운영서버와 연결중인 중계서버 연결 세션 테이블(과금DB, 인증DB, 게임DB도 관리)
|
||||
*/
|
||||
class CAgentServerTable : public CStaticSingleton<CAgentServerTable>
|
||||
{
|
||||
public:
|
||||
enum SIZE
|
||||
{
|
||||
MAX_AGENT_SERVER = 10,
|
||||
MAX_BUFFER = 256
|
||||
};
|
||||
|
||||
struct DBAgentServerInfo
|
||||
{
|
||||
char szServerName[MAX_BUFFER];
|
||||
char szServerAddress[MAX_BUFFER];
|
||||
char szDBServer[MAX_BUFFER];
|
||||
char szDBName[MAX_BUFFER];
|
||||
char szDBAccount[MAX_BUFFER];
|
||||
char szDBPass[MAX_BUFFER];
|
||||
};
|
||||
|
||||
CAgentServerTable();
|
||||
~CAgentServerTable();
|
||||
|
||||
void Destroy();
|
||||
|
||||
void InitAgentServerTable(CIOCPNet& IOCPNetwork);
|
||||
void ConnectToAgentServer(CIOCPNet& IOCPNetwork, unsigned long dwGroupIndex);
|
||||
|
||||
void SetNULL(unsigned long dwServerGroup); // BaseLibrary 업데이트 이후 필요없음;
|
||||
void PrintServerState(char* szText, int length);
|
||||
void RemoveAllModifyCharacter(CPacketDispatch* lpPacketDispatch); // 해당 Dispatch의 캐릭터들을 목록에서 전부 삭제
|
||||
void RemoveAllDepositLock(CPacketDispatch* lpPacketDispatch); // 해당 Dispatch의 창고정보를 목록에서 전부 삭제
|
||||
void Disconnected(unsigned long dwIP); // 임의 접속 끊기
|
||||
|
||||
unsigned long GetGroupFromDBAgentIP(unsigned long dwIP);
|
||||
CServerRequestKeeper& GetRequestKeeper(unsigned long dwServerGroup);// RequestKeeper 얻기
|
||||
CRylAgentServerDispatch* GetDispatch(unsigned long dwServerID); // 중계서버 디스패치 얻기
|
||||
CSession* GetSession(unsigned long dwServerID); // 중계서버 세션 얻기
|
||||
|
||||
CGameDB* GetGameDB(unsigned long dwServerID); // 게임 DB 얻기
|
||||
CBillingDB* GetBillingDB() { return m_lpBillingDB; } // 과금 DB 얻기
|
||||
CBillingDB* GetBillingLogDB() { return m_lpBillingLogDB; } // 과금 Log DB 얻기
|
||||
CAuthDB* GetAuthDB() { return m_lpAuthDB; } // 인증 DB 얻기
|
||||
|
||||
private:
|
||||
CSessionPolicy* m_lpSessionPolicy;
|
||||
|
||||
typedef std::map<unsigned long, unsigned long> IPtoServerID;
|
||||
|
||||
IPtoServerID m_IPtoServerID;
|
||||
|
||||
CGameDB* m_lpGameDB[MAX_AGENT_SERVER];
|
||||
CBillingDB* m_lpBillingDB;
|
||||
CBillingDB* m_lpBillingLogDB;
|
||||
CAuthDB* m_lpAuthDB;
|
||||
|
||||
char m_szNation[MAX_BUFFER];
|
||||
|
||||
void ConnectToAllAgentServerz(CIOCPNet& IOCPNetwork); // 스크립트의 중계서버 리스트로 연결
|
||||
void ConnectToBillingDB(); // 과금 DB 연결
|
||||
void ConnectToBillingLogDB(); // 과금 Log DB 연결
|
||||
void ConnectToAuthDB(); // 인증 DB 연결
|
||||
|
||||
bool GetAgentServerInfo(unsigned long dwGroupIndex, DBAgentServerInfo& stAgentServerInfo);
|
||||
};
|
||||
|
||||
#endif
|
||||
78
Server/AdminTool/AdminToolServer/RYL_ServerRequestKeeper.cpp
Normal file
78
Server/AdminTool/AdminToolServer/RYL_ServerRequestKeeper.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "RYL_ServerRequestKeeper.h"
|
||||
|
||||
#include <Network/Session/Session.h>
|
||||
#include <Network/Dispatch/Dispatch.h>
|
||||
|
||||
CServerRequestKeeper::CServerRequestKeeper()
|
||||
: m_RequestKey(0)
|
||||
{
|
||||
}
|
||||
|
||||
CServerRequestKeeper::~CServerRequestKeeper()
|
||||
{
|
||||
CCSLock::Syncronize sync(m_RequestMapLock);
|
||||
|
||||
m_RequestMap.clear();
|
||||
}
|
||||
|
||||
unsigned long CServerRequestKeeper::Push(CPacketDispatch* lpPacketDispatch, unsigned long dwClientRequest)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_RequestMapLock);
|
||||
|
||||
m_RequestMap.insert(std::make_pair(++m_RequestKey, RequestInfo(dwClientRequest, lpPacketDispatch)));
|
||||
|
||||
return m_RequestKey;
|
||||
}
|
||||
|
||||
bool CServerRequestKeeper::Pop(unsigned long dwRequestKey)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_RequestMapLock);
|
||||
|
||||
std::pair<isMapReqMap::iterator, isMapReqMap::iterator> itrs = m_RequestMap.equal_range(dwRequestKey);
|
||||
|
||||
for(; itrs.first != itrs.second; ++itrs.first)
|
||||
{
|
||||
m_RequestMap.erase(itrs.first);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CServerRequestKeeper::GetRequest(unsigned long dwRequestKey, CServerRequestKeeper::RequestInfo& Out_Info)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_RequestMapLock);
|
||||
|
||||
std::pair<isMapReqMap::iterator, isMapReqMap::iterator> itrs = m_RequestMap.equal_range(dwRequestKey);
|
||||
|
||||
for(; itrs.first != itrs.second; ++itrs.first)
|
||||
{
|
||||
Out_Info = itrs.first->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// 해당 ClientDispatch가 소멸했을경우를 대비하여 소멸자에 이녀석을 추가시켜놓자...
|
||||
void CServerRequestKeeper::RemoveAllSelectDispatch(CPacketDispatch* lpPacketDispatch)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_RequestMapLock);
|
||||
isMapReqMap::iterator itr = m_RequestMap.begin();
|
||||
|
||||
for(; itr != m_RequestMap.end(); )
|
||||
{
|
||||
RequestInfo& Info = itr->second;
|
||||
|
||||
if(lpPacketDispatch == Info.m_lpPacketDispatch)
|
||||
{
|
||||
m_RequestMap.erase(itr++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
}
|
||||
45
Server/AdminTool/AdminToolServer/RYL_ServerRequestKeeper.h
Normal file
45
Server/AdminTool/AdminToolServer/RYL_ServerRequestKeeper.h
Normal file
@@ -0,0 +1,45 @@
|
||||
#ifndef _RYL_SERVER_REQUEST_KEEPER_H_
|
||||
#define _RYL_SERVER_REQUEST_KEEPER_H_
|
||||
|
||||
#include <Thread/Lock.h>
|
||||
|
||||
class CPacketDispatch;
|
||||
|
||||
// 서버간 통신시 보낸 패킷 정보를 보관 (현재 의미가 없으나 패킷Ack관리를 해야함)
|
||||
class CServerRequestKeeper
|
||||
{
|
||||
public:
|
||||
// Request패킷 기본 구조체
|
||||
struct RequestInfo
|
||||
{
|
||||
unsigned long m_dwClientRequest;
|
||||
CPacketDispatch* m_lpPacketDispatch;
|
||||
|
||||
RequestInfo(unsigned long dwClientRequest, CPacketDispatch* lpPakcetDispatch)
|
||||
: m_dwClientRequest(dwClientRequest)
|
||||
, m_lpPacketDispatch(lpPakcetDispatch) {}
|
||||
|
||||
RequestInfo()
|
||||
: m_dwClientRequest(0)
|
||||
, m_lpPacketDispatch(NULL) {}
|
||||
};
|
||||
|
||||
public:
|
||||
CServerRequestKeeper();
|
||||
~CServerRequestKeeper();
|
||||
|
||||
unsigned long Push(CPacketDispatch* lpPacketDispatch, unsigned long dwClientRequest);
|
||||
bool Pop(unsigned long dwRequestKey);
|
||||
|
||||
void RemoveAllSelectDispatch(CPacketDispatch* lpPacketDispatch); // Param으로 들어온 Dispatch인것들은 목록에서 전부 삭제
|
||||
bool GetRequest(unsigned long dwRequestKey, RequestInfo& Out_Info); // Request정보 가져오기
|
||||
|
||||
private:
|
||||
typedef std::map<unsigned long, RequestInfo> isMapReqMap;
|
||||
|
||||
isMapReqMap m_RequestMap;
|
||||
unsigned long m_RequestKey;
|
||||
CCSLock m_RequestMapLock;
|
||||
};
|
||||
|
||||
#endif
|
||||
113
Server/AdminTool/AdminToolServer/Ryl_AdminServerCommand.h
Normal file
113
Server/AdminTool/AdminToolServer/Ryl_AdminServerCommand.h
Normal file
@@ -0,0 +1,113 @@
|
||||
|
||||
#include <RYL_AdminManagerServer.h>
|
||||
#include <Parser/ServerInfo.h>
|
||||
#include <Utility/ServerAppFrameWork/ConsoleWindow/ConsoleCMDFactory.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include "RYL_AgentServerTable.h"
|
||||
|
||||
// 로그 출력 "flush"
|
||||
class CCMDFlush : public CConsoleCMDSingleton<CCMDFlush>
|
||||
{
|
||||
protected:
|
||||
virtual bool DoProcess()
|
||||
{
|
||||
SERLOG0(g_Log, "Execute console command: flush");
|
||||
|
||||
g_Log.Flush();
|
||||
|
||||
CRylAdminManagerServer::GetInstance().PrintOutput("Log flush complete", 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// 스크립트 파일 다시 로드하기 "reload_script"
|
||||
class CCMDReload : public CConsoleCMDSingleton<CCMDReload>
|
||||
{
|
||||
virtual bool DoProcess()
|
||||
{
|
||||
SERLOG0(g_Log, "Execute console command: reload_script");
|
||||
|
||||
if(!CServerInfo::GetInstance().Reload())
|
||||
{
|
||||
CRylAdminManagerServer::GetInstance().PrintOutput("Script load failed", 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
CRylAdminManagerServer::GetInstance().PrintOutput("Script load success", 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// 서버군 전부 다시 재접속시도 "connect_all"
|
||||
class CCMDConnectAll : public CConsoleCMDSingleton<CCMDConnectAll>
|
||||
{
|
||||
virtual bool DoProcess()
|
||||
{
|
||||
SERLOG0(g_Log, "Execute console command: connect all");
|
||||
|
||||
CAgentServerTable::GetInstance().InitAgentServerTable(
|
||||
*CRylAdminManagerServer::GetInstance().GetIOCPNet());
|
||||
|
||||
CRylAdminManagerServer::GetInstance().PrintOutput("Execute command: connect all", 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// 특정 서버군 접속 시도 커맨드 "connect_index %d"
|
||||
class CCMDConnect : public CConsoleCommand
|
||||
{
|
||||
protected:
|
||||
virtual CConsoleCommand* Clone(const TCHAR* szCommand, size_t nCommandLength)
|
||||
{
|
||||
CCMDConnect* lpCommand = new CCMDConnect;
|
||||
|
||||
if(0 != lpCommand)
|
||||
{
|
||||
lpCommand->m_dwServerGroupID = 0;
|
||||
|
||||
const int MAX_COMMAND = 1024;
|
||||
char szLocalCommand[MAX_COMMAND];
|
||||
|
||||
_snprintf(szLocalCommand, MAX_COMMAND - 1, "%s", szCommand);
|
||||
szLocalCommand[MAX_COMMAND - 1] = 0;
|
||||
|
||||
char* token = strtok(szLocalCommand, "\r\n\t ");
|
||||
if(0 != token)
|
||||
{
|
||||
token = strtok(0, "\r\n\t ");
|
||||
if(0 != token)
|
||||
{
|
||||
lpCommand->m_dwServerGroupID = atol(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
return lpCommand;
|
||||
}
|
||||
|
||||
virtual bool DoProcess()
|
||||
{
|
||||
SERLOG1(g_Log, "Execute command: connect_index %d", m_dwServerGroupID);
|
||||
|
||||
CAgentServerTable::GetInstance().ConnectToAgentServer(
|
||||
*CRylAdminManagerServer::GetInstance().GetIOCPNet(), m_dwServerGroupID);
|
||||
|
||||
const char* szText = "Execute command: connect_index";
|
||||
CRylAdminManagerServer::GetInstance().PrintOutput(
|
||||
szText, static_cast<int>(strlen(szText)));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool Destroy()
|
||||
{
|
||||
delete this;
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned long m_dwServerGroupID;
|
||||
};
|
||||
24
Server/AdminTool/AdminToolServer/resource.h
Normal file
24
Server/AdminTool/AdminToolServer/resource.h
Normal file
@@ -0,0 +1,24 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by AdminManagerServer.rc
|
||||
//
|
||||
#define IDR_MENU_POPUP 4
|
||||
#define IDI_ICON1 109
|
||||
#define IDI_TRAY_ICON 109
|
||||
#define ID_MENU_CONSOL 40001
|
||||
#define ID_CONSOL_OPENCONSOLE 40002
|
||||
#define ID_CONSOLE_CLOSECONSOLE 40003
|
||||
#define ID_QUIT 40005
|
||||
#define ID_FLUSH 40007
|
||||
#define ID_CONNECTALL 40009
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 110
|
||||
#define _APS_NEXT_COMMAND_VALUE 40010
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
96
Server/AdminTool/AdminToolServer/stdafx.h
Normal file
96
Server/AdminTool/AdminToolServer/stdafx.h
Normal file
@@ -0,0 +1,96 @@
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
|
||||
#pragma warning(disable:4800)
|
||||
|
||||
// 각종 점검용 정의들. 사용하지 않을 경우는 (void*)0 로 대신할 것.
|
||||
#ifdef _DEBUG
|
||||
#define PERFORMANCE_CHECK(x) x
|
||||
#else
|
||||
#define PERFORMANCE_CHECK(x) x
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define DEBUG_CRT_MEMORY(x) x
|
||||
#else
|
||||
#define DEBUG_CRT_MEMORY(x) (void*)0
|
||||
#endif
|
||||
|
||||
// Windows Header Files:
|
||||
//#include <windows.h>
|
||||
// C RunTime Header Files
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
||||
/*
|
||||
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
|
||||
#define _AFX_ALL_WARNINGS
|
||||
|
||||
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소
|
||||
#include <afxext.h> // MFC 익스텐션
|
||||
#include <afxdisp.h> // MFC 자동화 클래스
|
||||
|
||||
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원
|
||||
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||||
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원
|
||||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||
#include <afxdlgs.h>
|
||||
*/
|
||||
|
||||
// 소켓 관련 헤더들
|
||||
#include <winsock2.h>
|
||||
#include <mswsock.h>
|
||||
#include <iphlpapi.h> // for IP Help functions, that gets local IP address
|
||||
#include <ws2tcpip.h> // tcp/ip specific options
|
||||
#include <wsipx.h> // for IPX/SPX
|
||||
#include <wsnwlink.h>
|
||||
|
||||
// DB관련 헤더들
|
||||
#include <msdasc.h> // OLE DB Service Component header
|
||||
#include <msdaguid.h> // OLE DB Root Enumerator
|
||||
#include <msdasql.h> // MSDASQL - Default provider
|
||||
#include <sqloledb.h> // MS SQL
|
||||
|
||||
// 기본 헤더들
|
||||
#include <windows.h>
|
||||
#include <process.h>
|
||||
#include <shellapi.h>
|
||||
#include <tchar.h>
|
||||
|
||||
// C 함수 헤더들
|
||||
#include <cassert>
|
||||
#include <ctime>
|
||||
#include <cmath>
|
||||
#include <cstdio>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
#include <cstdarg>
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
|
||||
// STL 헤더들
|
||||
#include <new>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <hash_map>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <limits>
|
||||
#include <bitset>
|
||||
#include <complex>
|
||||
|
||||
#include <algorithm>
|
||||
#include <numeric>
|
||||
#include <utility>
|
||||
#include <functional>
|
||||
|
||||
Reference in New Issue
Block a user