Files

298 lines
7.4 KiB
C++
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#include "StdAfx.h"
#include "Resource.h"
#include "TableFrameSink.h"
#include "GameServiceManager.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifndef _DEBUG
#define ANDROID_SERVICE_DLL_NAME TEXT("LandAndroid.dll") //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#else
#define ANDROID_SERVICE_DLL_NAME TEXT("LandAndroidD.dll") //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameServiceManager::CGameServiceManager()
{
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
m_hDllInstance=NULL;
m_pDlgCustomRule=NULL;
//<2F>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
m_GameServiceAttrib.wKindID=KIND_ID;
m_GameServiceAttrib.wChairCount=GAME_PLAYER;
m_GameServiceAttrib.wSupporType = (GAME_GENRE_GOLD | GAME_GENRE_SCORE | GAME_GENRE_MATCH | GAME_GENRE_EDUCATE | SCORE_GENRE_NORMAL);
//<2F><><EFBFBD>ܱ<EFBFBD>־
m_GameServiceAttrib.cbDynamicJoin=FALSE;
m_GameServiceAttrib.cbAndroidUser=TRUE;
m_GameServiceAttrib.cbOffLineTrustee=TRUE;
//<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,TEXT("QPLandDB"),CountArray(m_GameServiceAttrib.szDataBaseName));
lstrcpyn(m_GameServiceAttrib.szClientEXEName,TEXT("Land.EXE"),CountArray(m_GameServiceAttrib.szClientEXEName));
lstrcpyn(m_GameServiceAttrib.szServerDLLName,TEXT("LandServer.DLL"),CountArray(m_GameServiceAttrib.szServerDLLName));
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameServiceManager::~CGameServiceManager()
{
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SafeDelete(m_pDlgCustomRule);
//<2F>ͷ<EFBFBD> DLL
if (m_hDllInstance!=NULL)
{
AfxFreeLibrary(m_hDllInstance);
m_hDllInstance=NULL;
}
return;
}
//<2F>ӿڲ<D3BF>ѯ
VOID * CGameServiceManager::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(IGameServiceManager,Guid,dwQueryVer);
QUERYINTERFACE(IGameServiceCustomRule,Guid,dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IGameServiceManager,Guid,dwQueryVer);
return NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID * CGameServiceManager::CreateTableFrameSink(REFGUID Guid, DWORD dwQueryVer)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTableFrameSink * pTableFrameSink=NULL;
try
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pTableFrameSink=new CTableFrameSink();
if (pTableFrameSink==NULL) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>
VOID * pObject=pTableFrameSink->QueryInterface(Guid,dwQueryVer);
if (pObject==NULL) throw TEXT("<EFBFBD>ӿڲ<EFBFBD>ѯʧ<EFBFBD><EFBFBD>");
return pObject;
}
catch (...) {}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SafeDelete(pTableFrameSink);
return NULL;
}
//<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("<22><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ģ<EFBFBD><EFBFBD><E9B2BB><EFBFBD><EFBFBD>");
// }
// //Ѱ<>Һ<EFBFBD><D2BA><EFBFBD>
// ModuleCreateProc * CreateProc=(ModuleCreateProc *)GetProcAddress(m_hDllInstance,"CreateAndroidUserItemSink");
// if (CreateProc==NULL) throw TEXT("<22><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>");
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// return CreateProc(Guid,dwQueryVer);
//}
//catch(...) {}
try
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( m_AndroidServiceHelper.GetInterface() == NULL )
{
m_AndroidServiceHelper.SetModuleCreateInfo(ANDROID_SERVICE_DLL_NAME,"CreateGameServiceManager");
if( !m_AndroidServiceHelper.CreateInstance() ) throw 0;
m_AndroidServiceHelper->RectifyParameter(m_GameServiceOption);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID *pAndroidObject = m_AndroidServiceHelper->CreateAndroidUserItemSink(Guid,dwQueryVer);
if( pAndroidObject == NULL ) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
return pAndroidObject;
}
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>
bool CGameServiceManager::GetServiceAttrib(tagGameServiceAttrib & GameServiceAttrib)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
GameServiceAttrib=m_GameServiceAttrib;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CGameServiceManager::RectifyParameter(tagGameServiceOption & GameServiceOption)
{
//<2F><><EFBFBD>淿<EFBFBD><E6B7BF>ѡ<EFBFBD><D1A1>
m_GameServiceOption=GameServiceOption;
//<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
GameServiceOption.lCellScore=__max(1L,GameServiceOption.lCellScore);
tagCustomRule * pCustomRule=(tagCustomRule *)GameServiceOption.cbCustomRule;
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ //GAME_GENRE_EDUCATE|
//if (GameServiceOption.wServerType&(GAME_GENRE_GOLD|SCORE_GENRE_POSITIVE))
//{
// GameServiceOption.lMinTableScore=__max(GameServiceOption.lCellScore*pCustomRule->wMaxScoreTimes,GameServiceOption.lMinTableScore);
//}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pCustomRule->wMaxScoreTimes < 32 || pCustomRule->wMaxScoreTimes > 512)
{
pCustomRule->wMaxScoreTimes = 32;
}
//<2F><><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
if(pCustomRule->wFleeScoreTimes < 2 || pCustomRule->wFleeScoreTimes > 512)
{
pCustomRule->wFleeScoreTimes = 12;
}
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if(pCustomRule->cbTimeOutCard < 5 || pCustomRule->cbTimeOutCard > 60)
{
pCustomRule->cbTimeOutCard = 20;
}
//<2F>з<EFBFBD>ʱ<EFBFBD><CAB1>
if(pCustomRule->cbTimeCallScore < 5 || pCustomRule->cbTimeCallScore > 60)
{
pCustomRule->cbTimeCallScore = 20;
}
//<2F><>ʼʱ<CABC><CAB1>
if(pCustomRule->cbTimeStartGame < 5 || pCustomRule->cbTimeStartGame > 60)
{
pCustomRule->cbTimeStartGame = 30;
}
//<2F>׳<EFBFBD>ʱ<EFBFBD><CAB1>
if(pCustomRule->cbTimeHeadOutCard < 5 || pCustomRule->cbTimeHeadOutCard > 60)
{
pCustomRule->cbTimeHeadOutCard = 30;
}
//<2F><>ʱ<EFBFBD>й<EFBFBD>;
if (pCustomRule->cbOverTimeTrustee < 1)
{
pCustomRule->cbOverTimeTrustee = 1;
}
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->cbTimeOutCard=20;
pCustomRule->cbTimeStartGame=30;
pCustomRule->cbTimeCallScore=20;
pCustomRule->cbTimeHeadOutCard=30;
pCustomRule->cbOverTimeTrustee = 2;
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
pCustomRule->wMaxScoreTimes=32;
pCustomRule->wFleeScoreTimes=6;
pCustomRule->cbFleeScorePatch=FALSE;
pCustomRule->cbAllNotCallResend = FALSE;
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern "C" __declspec(dllexport) VOID * CreateGameServiceManager(const GUID & Guid, DWORD dwInterfaceVer)
{
static CGameServiceManager GameServiceManager;
return GameServiceManager.QueryInterface(Guid,dwInterfaceVer);
}
//////////////////////////////////////////////////////////////////////////////////