239 lines
6.2 KiB
C++
239 lines
6.2 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "Resource.h"
|
|||
|
|
#include "Tableframesink.h"
|
|||
|
|
#include "GameServerManager.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#ifndef _DEBUG
|
|||
|
|
#define ANDROID_SERVICE_DLL_NAME TEXT("ZhaJinHuaAndroid.dll") //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#else
|
|||
|
|
#define ANDROID_SERVICE_DLL_NAME TEXT("ZhaJinHuaAndroid.dll") //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CGameServiceManager::CGameServiceManager()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_GameServiceAttrib.wKindID=KIND_ID;
|
|||
|
|
m_GameServiceAttrib.wChairCount=GAME_PLAYER;
|
|||
|
|
m_GameServiceAttrib.wSupporType=(GAME_GENRE_GOLD|GAME_GENRE_EDUCATE|GAME_GENRE_MATCH);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܱ<EFBFBD>־
|
|||
|
|
m_GameServiceAttrib.cbDynamicJoin=TRUE;
|
|||
|
|
m_GameServiceAttrib.cbAndroidUser=TRUE;
|
|||
|
|
m_GameServiceAttrib.cbOffLineTrustee=FALSE;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_GameServiceAttrib.dwServerVersion=VERSION_SERVER;
|
|||
|
|
m_GameServiceAttrib.dwClientVersion=VERSION_CLIENT;
|
|||
|
|
lstrcpyn(m_GameServiceAttrib.szGameName,GAME_NAME,CountArray(m_GameServiceAttrib.szGameName));
|
|||
|
|
lstrcpyn(m_GameServiceAttrib.szDataBaseName,szTreasureDB,CountArray(m_GameServiceAttrib.szDataBaseName));
|
|||
|
|
lstrcpyn(m_GameServiceAttrib.szClientEXEName,TEXT("ZhaJinHua.EXE"),CountArray(m_GameServiceAttrib.szClientEXEName));
|
|||
|
|
lstrcpyn(m_GameServiceAttrib.szServerDLLName,TEXT("ZhaJinHuaServer.DLL"),CountArray(m_GameServiceAttrib.szServerDLLName));
|
|||
|
|
|
|||
|
|
m_pDlgCustomRule = NULL;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CGameServiceManager::~CGameServiceManager()
|
|||
|
|
{
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
SafeDelete(m_pDlgCustomRule);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
void * CGameServiceManager::QueryInterface(const IID & Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
QUERYINTERFACE(IGameServiceManager,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE(IGameServiceCustomRule,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE_IUNKNOWNEX(IGameServiceManager,Guid,dwQueryVer);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>
|
|||
|
|
void * CGameServiceManager::CreateTableFrameSink(const IID & Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CTableFrameSink * pTableFrameSink=NULL;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
pTableFrameSink=new CTableFrameSink();
|
|||
|
|
if (pTableFrameSink==NULL) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
|
void * pObject=pTableFrameSink->QueryInterface(Guid,dwQueryVer);
|
|||
|
|
if (pObject==NULL) throw TEXT("<EFBFBD>ӿڲ<EFBFBD>ѯʧ<EFBFBD><EFBFBD>");
|
|||
|
|
return pObject;
|
|||
|
|
}
|
|||
|
|
catch (...) {}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SafeDelete(pTableFrameSink);
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
bool CGameServiceManager::GetServiceAttrib(tagGameServiceAttrib & GameServiceAttrib)
|
|||
|
|
{
|
|||
|
|
GameServiceAttrib=m_GameServiceAttrib;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CGameServiceManager::RectifyParameter(tagGameServiceOption & GameServiceOption)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(&GameServiceOption!=NULL);
|
|||
|
|
if (&GameServiceOption==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|||
|
|
GameServiceOption.lCellScore=__max(1L,GameServiceOption.lCellScore);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
if (GameServiceOption.wServerType&(GAME_GENRE_GOLD|SCORE_GENRE_POSITIVE))
|
|||
|
|
{
|
|||
|
|
GameServiceOption.lMinTableScore=__max(1000,GameServiceOption.lMinTableScore);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ԭ<><D4AD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
if (GameServiceOption.lRestrictScore!=0L)
|
|||
|
|
{
|
|||
|
|
GameServiceOption.lRestrictScore=__max(GameServiceOption.lRestrictScore,GameServiceOption.lMinTableScore);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (GameServiceOption.wServerType==GAME_GENRE_SCORE&&GameServiceOption.wServerType!=0)
|
|||
|
|
{
|
|||
|
|
if(GameServiceOption.lMaxEnterScore<=GameServiceOption.lMinTableScore)
|
|||
|
|
GameServiceOption.lMaxEnterScore=0L;
|
|||
|
|
else if(GameServiceOption.lRestrictScore>0)
|
|||
|
|
GameServiceOption.lMaxEnterScore=__min(GameServiceOption.lMaxEnterScore,GameServiceOption.lRestrictScore);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
bool CGameServiceManager::SaveCustomRule(LPBYTE pcbCustomRule, WORD wCustonSize)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_pDlgCustomRule!=NULL);
|
|||
|
|
if (m_pDlgCustomRule==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(wCustonSize>=sizeof(tagCustomRule));
|
|||
|
|
tagCustomRule * pCustomRule=(tagCustomRule *)pcbCustomRule;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
if (m_pDlgCustomRule->GetCustomRule(*pCustomRule)==false)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CGameServiceManager::DefaultCustomRule(LPBYTE pcbCustomRule, WORD wCustonSize)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
ASSERT(wCustonSize >= sizeof(tagCustomRule));
|
|||
|
|
tagCustomRule * pCustomRule = (tagCustomRule *)pcbCustomRule;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
|
|||
|
|
pCustomRule->wTimeOut = 40;
|
|||
|
|
|
|||
|
|
pCustomRule->wSendCardTime = 10;
|
|||
|
|
pCustomRule->wCompareCardTime = 20;
|
|||
|
|
|
|||
|
|
pCustomRule->lMinChipScore = 1;
|
|||
|
|
pCustomRule->lMaxChipScore = 5;
|
|||
|
|
pCustomRule->cbMaxPlayRound = 10;
|
|||
|
|
pCustomRule->cbMinLookRound = 1;
|
|||
|
|
pCustomRule->cbMinCompareRound = 2;
|
|||
|
|
pCustomRule->cbMinCompareUser = 2;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HWND CGameServiceManager::CreateCustomRule(CWnd * pParentWnd, CRect rcCreate, LPBYTE pcbCustomRule, WORD wCustonSize)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (m_pDlgCustomRule == NULL)
|
|||
|
|
{
|
|||
|
|
m_pDlgCustomRule = new CDlgCustomRule;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (m_pDlgCustomRule->m_hWnd == NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ;
|
|||
|
|
AfxSetResourceHandle(GetModuleHandle(m_GameServiceAttrib.szServerDLLName));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
m_pDlgCustomRule->Create(IDD_CUSTOM_RULE, pParentWnd);
|
|||
|
|
|
|||
|
|
//<2F><>ԭ<EFBFBD><D4AD>Դ;
|
|||
|
|
AfxSetResourceHandle(GetModuleHandle(NULL));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
|
|||
|
|
ASSERT(wCustonSize >= sizeof(tagCustomRule));
|
|||
|
|
m_pDlgCustomRule->SetCustomRule(*((tagCustomRule *)pcbCustomRule));
|
|||
|
|
|
|||
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|||
|
|
m_pDlgCustomRule->SetWindowPos(NULL, rcCreate.left, rcCreate.top, rcCreate.Width(), rcCreate.Height(), SWP_NOZORDER | SWP_SHOWWINDOW);
|
|||
|
|
|
|||
|
|
return m_pDlgCustomRule->GetSafeHwnd();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID * CGameServiceManager::CreateAndroidUserItemSink(REFGUID Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
if (m_hDllInstance==NULL)
|
|||
|
|
{
|
|||
|
|
m_hDllInstance=AfxLoadLibrary(ANDROID_SERVICE_DLL_NAME);
|
|||
|
|
if (m_hDllInstance==NULL) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>鲻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ѱ<>Һ<EFBFBD><D2BA><EFBFBD>
|
|||
|
|
ModuleCreateProc * CreateProc=(ModuleCreateProc *)GetProcAddress(m_hDllInstance,"CreateAndroidUserItemSink");
|
|||
|
|
if (CreateProc==NULL) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>");
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return CreateProc(Guid, dwQueryVer);
|
|||
|
|
}
|
|||
|
|
catch(...) {}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID * CGameServiceManager::CreateGameDataBaseEngineSink(REFGUID Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
extern "C" __declspec(dllexport) VOID * CreateGameServiceManager(REFGUID Guid, DWORD dwInterfaceVer)
|
|||
|
|
{
|
|||
|
|
static CGameServiceManager GameServiceManager;
|
|||
|
|
return GameServiceManager.QueryInterface(Guid,dwInterfaceVer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|