|
- // DlgServerItem.cpp : 实现文件
- //
-
- #include "stdafx.h"
- #include "resource.h"
- #include "DlgServerItem.h"
- #include "afxdialogex.h"
-
- //列表属性
- #define LIST_STYTE LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_FLATSB
-
- // CDlgServerItem 对话框
-
- IMPLEMENT_DYNAMIC(CDlgServerItem, CDialogEx)
-
- CDlgServerItem::CDlgServerItem(CWnd* pParent /*=NULL*/)
- : CDialogEx(IDD_SERVER_ITEM, pParent)
- {
- //模块参数
- ZeroMemory(&m_ModuleInitParameter, sizeof(m_ModuleInitParameter));
- }
-
- CDlgServerItem::~CDlgServerItem()
- {
- }
-
- void CDlgServerItem::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_SERVER_LIST, m_ServerListControl);
- }
-
-
- bool CDlgServerItem::OpenGameServer()
- {
- //设置资源
- AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME));
-
- //配置房间
- if (DoModal() == IDC_LOAD_SERVER)
- {
- return true;
- }
-
- return false;
- }
-
- bool CDlgServerItem::OpenGameServer(WORD wServerID)
- {
- //变量定义
- tagGameServerInfo GameServerResult;
- ZeroMemory(&GameServerResult, sizeof(GameServerResult));
-
- //机器标识
- TCHAR szMachineID[LEN_MACHINE_ID];
- CWHService::GetMachineID(szMachineID);
-
- //加载房间
- CServerInfoManager ServerInfoManager;
- if (ServerInfoManager.LoadGameServerInfo(szMachineID, wServerID, GameServerResult) == false)
- {
- return false;
- }
-
- //获取参数
- if (GetModuleInitParameter(&GameServerResult, true) == false)
- {
- return false;
- }
-
- return true;
- }
-
- bool CDlgServerItem::LoadDBServerItem()
- {
- //重置列表
- m_ServerListControl.DeleteAllItems();
-
- //设置按钮
- GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
- GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
- GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
-
- //机器标识
- TCHAR szMachineID[LEN_MACHINE_ID];
- CWHService::GetMachineID(szMachineID);
-
- //加载信息
- CServerInfoManager ServerInfoManager;
- if (ServerInfoManager.LoadGameServerInfo(szMachineID, m_ServerInfoBuffer) == true)
- {
- //变量定义
- POSITION Position = m_ServerInfoBuffer.m_GameServerInfoMap.GetStartPosition();
- bool bFind = false;
- //枚举模块
- while (Position != NULL)
- {
- //获取对象
- WORD wServerID = 0L;
- tagGameServerInfo * pGameServerInfo = NULL;
- m_ServerInfoBuffer.m_GameServerInfoMap.GetNextAssoc(Position, wServerID, pGameServerInfo);
-
- //插入列表
- ASSERT(pGameServerInfo != NULL);
- if (pGameServerInfo != NULL)
- {
- m_ServerListControl.InsertServerInfo(pGameServerInfo);
-
- if (g_StartP.wServerID == pGameServerInfo->wServerID)
- {
- bool bRet = GetModuleInitParameter(pGameServerInfo, true);
-
- if (bRet == false)
- {
- g_StartP.iErr = -1;
- }
- else
- {
- bFind = true;
- }
- }
- }
- }
-
- if (bFind == false && g_StartP.iErr != -1) g_StartP.iErr = -2;
-
- return true;
- }
-
- return false;
- }
-
- bool CDlgServerItem::UpdateControlStatus()
- {
- //获取选择
- POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
-
- //设置列表
- if (Position != NULL)
- {
- //获取房间
- INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
- tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
-
- //设置按钮
- if (pGameServerInfo->dwNativeVersion != 0L)
- {
- GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(TRUE);
- GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
- GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(TRUE);
- }
- else
- {
- GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
- GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
- GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
- }
- }
- else
- {
- //设置按钮
- GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
- GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
- GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
- }
-
- return true;
- }
-
- bool CDlgServerItem::GetModuleInitParameter(tagGameServerInfo * pGameServerInfo, bool bAutoMode)
- {
- //效验参数
- ASSERT(pGameServerInfo != NULL);
- if (pGameServerInfo == NULL) return false;
-
- //游戏模块
- CGameServiceManagerHelper GameServiceManager;
- GameServiceManager.SetModuleCreateInfo(pGameServerInfo->szServerDLLName, GAME_SERVICE_CREATE_NAME); ///---由DLL玩法类实现的
-
- //创建判断
- if (pGameServerInfo->dwNativeVersion == 0)
- {
- //构造提示
- TCHAR szString[128] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 游戏服务器组件还没有安装,请先安装对应的游戏服务器"), pGameServerInfo->szGameName);
-
- //提示消息
- if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
- else AfxMessageBox(szString, MB_ICONERROR);
-
- return false;
- }
-
- //更新判断
- if (pGameServerInfo->dwNativeVersion != pGameServerInfo->dwServerVersion)
- {
- //构造提示
- TCHAR szString[128] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 游戏服务器组件已经更新了,不能继续用于启动房间"), pGameServerInfo->szGameName);
-
- //提示消息
- if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
- else AfxMessageBox(szString, MB_ICONERROR);
-
- return false;
- }
-
- //加载模块
- if (GameServiceManager.CreateInstance() == false)
- {
- //构造提示
- TCHAR szString[128] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 服务组件不存在或者加载失败,请重新安装服务组件"), pGameServerInfo->szGameName);
-
- //提示消息
- if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
- else AfxMessageBox(szString, MB_ICONERROR);
-
- return false;
- }
-
- //模块属性
- GameServiceManager->GetServiceAttrib(m_ModuleInitParameter.GameServiceAttrib); ///---DLL提供配置
-
- ///+++赋值前,清空下
- memset(&m_ModuleInitParameter.GameServiceOption, 0, sizeof(m_ModuleInitParameter.GameServiceOption));
-
- //挂接属性
- m_ModuleInitParameter.GameServiceOption.wGameID = pGameServerInfo->wGameID;
- m_ModuleInitParameter.GameServiceOption.wKindID = pGameServerInfo->wKindID;
- m_ModuleInitParameter.GameServiceOption.wNodeID = pGameServerInfo->wNodeID;
- m_ModuleInitParameter.GameServiceOption.wSortID = pGameServerInfo->wSortID;
- m_ModuleInitParameter.GameServiceOption.wServerID = pGameServerInfo->wServerID;
-
- //税收配置
- m_ModuleInitParameter.GameServiceOption.lCellScore = pGameServerInfo->lCellScore;
- m_ModuleInitParameter.GameServiceOption.wRevenueRatio = pGameServerInfo->wRevenueRatio;
- m_ModuleInitParameter.GameServiceOption.lServiceScore = pGameServerInfo->lServiceScore;
-
- //房间配置
- m_ModuleInitParameter.GameServiceOption.lRestrictScore = pGameServerInfo->lRestrictScore;
- m_ModuleInitParameter.GameServiceOption.lMinTableScore = pGameServerInfo->lMinTableScore;
- m_ModuleInitParameter.GameServiceOption.lMinEnterScore = pGameServerInfo->lMinEnterScore;
- m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = pGameServerInfo->lMaxEnterScore;
-
- //会员限制
- m_ModuleInitParameter.GameServiceOption.cbMinEnterMember = pGameServerInfo->cbMinEnterMember;
- m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember = pGameServerInfo->cbMaxEnterMember;
-
- //房间配置
- m_ModuleInitParameter.GameServiceOption.dwServerRule = pGameServerInfo->dwServerRule;
- m_ModuleInitParameter.GameServiceOption.dwAttachUserRight = pGameServerInfo->dwAttachUserRight;
-
- //房间属性
- m_ModuleInitParameter.GameServiceOption.wMaxPlayer = pGameServerInfo->wMaxPlayer;
- m_ModuleInitParameter.GameServiceOption.wTableCount = pGameServerInfo->wTableCount;
- m_ModuleInitParameter.GameServiceOption.wServerPort = pGameServerInfo->wServerPort;
- m_ModuleInitParameter.GameServiceOption.wServerKind = pGameServerInfo->wServerKind;
- m_ModuleInitParameter.GameServiceOption.wServerType = pGameServerInfo->wServerType;
- lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerName, pGameServerInfo->szServerName, LEN_SERVER);
- lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerPasswd, pGameServerInfo->szServerPasswd, LEN_PASSWORD);
-
- //分组属性
- m_ModuleInitParameter.GameServiceOption.cbDistributeRule = pGameServerInfo->cbDistributeRule;
- m_ModuleInitParameter.GameServiceOption.wMinDistributeUser = pGameServerInfo->wMinDistributeUser;
- m_ModuleInitParameter.GameServiceOption.wDistributeTimeSpace = pGameServerInfo->wDistributeTimeSpace;
- m_ModuleInitParameter.GameServiceOption.wDistributeDrawCount = pGameServerInfo->wDistributeDrawCount;
- m_ModuleInitParameter.GameServiceOption.wMinPartakeGameUser = pGameServerInfo->wMinPartakeGameUser;
- m_ModuleInitParameter.GameServiceOption.wMaxPartakeGameUser = pGameServerInfo->wMaxPartakeGameUser;
-
- //连接信息
- lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseName, pGameServerInfo->szDataBaseName, CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseName));
- lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr, pGameServerInfo->szDataBaseAddr, CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr));
-
- //数据设置
- UINT uCustomRuleSize = sizeof(m_ModuleInitParameter.GameServiceOption.cbCustomRule);
- CopyMemory(m_ModuleInitParameter.GameServiceOption.cbCustomRule, pGameServerInfo->cbCustomRule, uCustomRuleSize);
-
- ///+++此玩法的场馆信息
- CServerInfoManager serverInfoManager;
- std::vector<tagVenueInfo> vecVenueInfo; //场馆列表
- serverInfoManager.LoadVenueInfos(m_ModuleInitParameter.GameServiceAttrib.wKindID, vecVenueInfo);
- m_ModuleInitParameter.vecVenueInfo = vecVenueInfo;
-
- ///+++如果是金币场,使用场馆的最新配置
- if (m_ModuleInitParameter.GameServiceOption.wNodeID > 0)
- {
- for (std::vector<tagVenueInfo>::iterator it = vecVenueInfo.begin(); it != vecVenueInfo.end(); it++)
- {
- if (it->wVenueID == m_ModuleInitParameter.GameServiceOption.wNodeID)
- {
- m_ModuleInitParameter.GameServiceOption.lCellScore = it->sBaseScore;
- m_ModuleInitParameter.GameServiceOption.lMinEnterScore = it->sMinScore;
- m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = it->sMaxScore;
- m_ModuleInitParameter.GameServiceOption.lRestrictScore = it->lRestrictScore;
- m_ModuleInitParameter.GameServiceOption.lServiceScore = it->sServiceScore;
- m_ModuleInitParameter.GameServiceOption.wRevenueRatio = it->wRevenueRatio;
- lstrcpyn(m_ModuleInitParameter.GameServiceOption.szExtConfig, it->szExtConfig, CountArray(it->szExtConfig));
- break;
- }
- }
- }
- return true;
- }
-
- BEGIN_MESSAGE_MAP(CDlgServerItem, CDialogEx)
- ON_BN_CLICKED(IDOK, &CDlgServerItem::OnBnClickedOk)
- ON_BN_CLICKED(IDC_LOAD_SERVER, &CDlgServerItem::OnBnClickedLoadServer)
- ON_BN_CLICKED(IDC_RELOAD_LIST, &CDlgServerItem::OnBnClickedReloadList)
- ON_BN_CLICKED(IDC_DELETE_SERVER, &CDlgServerItem::OnBnClickedDeleteServer)
- ON_BN_CLICKED(IDC_SERVICE_ATTRIB, &CDlgServerItem::OnBnClickedServiceAttrib)
- ON_NOTIFY(LVN_ITEMCHANGED, IDC_SERVER_LIST, &CDlgServerItem::OnLvnItemchangedServerList)
- ON_NOTIFY(NM_DBLCLK, IDC_SERVER_LIST, &CDlgServerItem::OnNMDblclkServerList)
- ON_WM_TIMER()
- END_MESSAGE_MAP()
-
-
- // CDlgServerItem 消息处理程序
-
-
- void CDlgServerItem::OnBnClickedOk()
- {
- return;
- }
-
-
- void CDlgServerItem::OnBnClickedLoadServer()
- {
- //获取选择
- ASSERT(m_ServerListControl.GetFirstSelectedItemPosition() != NULL);
- POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
-
- //获取房间
- INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
- tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
-
- //设置变量
- if ((pGameServerInfo != NULL) && (GetModuleInitParameter(pGameServerInfo, false) == true))
- {
- //修改所选择节点
- TCHAR szWorkDir[MAX_PATH] = TEXT("");
- CWHService::GetWorkDirectory(szWorkDir, CountArray(szWorkDir));
-
- //构造路径
- TCHAR szIniFile[MAX_PATH] = TEXT("");
- _sntprintf(szIniFile, CountArray(szIniFile), TEXT("%s\\Parameter.ini"), szWorkDir);
-
- CString csText;
- csText.Format(L"%d", pGameServerInfo->wServerID);
-
- //保存
- BOOL bRet = WritePrivateProfileString(TEXT("Server"), TEXT("ServerID"), csText, szIniFile);
-
- EndDialog(IDC_LOAD_SERVER);
- }
-
- return;
- }
-
-
- void CDlgServerItem::OnBnClickedReloadList()
- {
- //加载列表
- LoadDBServerItem();
-
- return;
- }
-
-
- void CDlgServerItem::OnBnClickedDeleteServer()
- {
- //获取选择
- ASSERT(m_ServerListControl.GetFirstSelectedItemPosition() != NULL);
- POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
-
- //获取房间
- INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
- tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
-
- //设置变量
- if (pGameServerInfo != NULL)
- {
- //构造提示
- TCHAR szString[128] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("确实要删除 [ %s ] 游戏房间吗?"), pGameServerInfo->szServerName);
-
- //提示消息
- if (AfxMessageBox(szString, MB_ICONQUESTION | MB_YESNO) != IDYES) return;
-
- //删除房间
- CServerInfoManager ServerInfoManager;
- if (ServerInfoManager.DeleteGameServer(pGameServerInfo->wServerID) == false) return;
-
- //删除列表
- m_ServerListControl.DeleteItem(nListItem);
- m_ServerInfoBuffer.DeleteServerInfo(pGameServerInfo->wServerID);
-
- //设置列表
- if (m_ServerListControl.GetItemCount() > 0)
- {
- //设置变量
- INT nItemCount = m_ServerListControl.GetItemCount();
- INT nNextItem = (nListItem >= nItemCount) ? (nItemCount - 1) : nListItem;
-
- //设置选择
- m_ServerListControl.SetItemState(nNextItem, LVIS_SELECTED, LVIS_SELECTED);
- }
-
- //更新控制
- UpdateControlStatus();
- }
-
- return;
- }
-
-
- void CDlgServerItem::OnBnClickedServiceAttrib()
- {
- return;
- }
-
-
- void CDlgServerItem::OnLvnItemchangedServerList(NMHDR *pNMHDR, LRESULT *pResult)
- {
- //更新控制
- UpdateControlStatus();
-
- return;
- }
-
-
- void CDlgServerItem::OnNMDblclkServerList(NMHDR *pNMHDR, LRESULT *pResult)
- {
- //加载配置
- if (((NMITEMACTIVATE *)pNMHDR)->iItem != LB_ERR)
- {
- OnBnClickedLoadServer();
- }
-
- return;
- }
-
-
- BOOL CDlgServerItem::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
-
- //设置资源
- AfxSetResourceHandle(GetModuleHandle(NULL));
-
- //加载房间
- LoadDBServerItem();
-
- if (g_StartP.iAuto == 1)
- {
- SetTimer(3, 1000, NULL); //自动选择
- }
- return TRUE; // return TRUE unless you set the focus to a control
- // 异常: OCX 属性页应返回 FALSE
- }
-
-
- void CDlgServerItem::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- if (nIDEvent == 3)
- {
- KillTimer(nIDEvent);
-
- if (g_StartP.wServerID > 0) EndDialog(IDC_LOAD_SERVER);
- }
-
- CDialogEx::OnTimer(nIDEvent);
- }
|