诸暨麻将添加redis
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

662 rindas
17 KiB

  1. // LogonServerDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "LogonServer.h"
  5. #include "LogonServerDlg.h"
  6. #include "afxdialogex.h"
  7. #include "StatisticalUser.h"
  8. #include <strsafe.h>
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #endif
  12. #define WM_MYMSG (WM_USER+110) //禁止加入房间与禁止分配
  13. #define WM_MYMSGACK (WM_USER+111) //禁止加入房间与禁止分配的结果回复
  14. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  15. class CAboutDlg : public CDialogEx
  16. {
  17. public:
  18. CAboutDlg();
  19. // 对话框数据
  20. enum { IDD = IDD_ABOUTBOX };
  21. protected:
  22. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  23. // 实现
  24. protected:
  25. DECLARE_MESSAGE_MAP()
  26. };
  27. CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
  28. {
  29. }
  30. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CDialogEx::DoDataExchange(pDX);
  33. }
  34. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  35. END_MESSAGE_MAP()
  36. STARTP CLogonServerDlg::g_StartP;
  37. // CLogonServerDlg 对话框
  38. bool CLogonServerDlg::SetShangBao(int Num)
  39. {
  40. CLogonServerApp* pCLogonServerApp = (CLogonServerApp*)AfxGetApp();
  41. CLogonServerDlg* pCLogonServerDlg = NULL;
  42. if (pCLogonServerApp)
  43. {
  44. pCLogonServerDlg = (CLogonServerDlg* )pCLogonServerApp->m_pMainWnd;
  45. CString csTest;
  46. csTest.Format(L"%d", Num);
  47. pCLogonServerDlg->mShangBao.SetWindowTextW(csTest);
  48. }
  49. return true;
  50. }
  51. bool CLogonServerDlg::SetJiQi(CString a)
  52. {
  53. CLogonServerApp* pCLogonServerApp = (CLogonServerApp*)AfxGetApp();
  54. CLogonServerDlg* pCLogonServerDlg = NULL;
  55. if (pCLogonServerApp)
  56. {
  57. pCLogonServerDlg = (CLogonServerDlg*)pCLogonServerApp->m_pMainWnd;
  58. pCLogonServerDlg->mJiQi.SetWindowTextW(a);
  59. }
  60. return true;
  61. }
  62. bool CLogonServerDlg::SetUpdata(CString a)
  63. {
  64. CLogonServerApp* pCLogonServerApp = (CLogonServerApp*)AfxGetApp();
  65. CLogonServerDlg* pCLogonServerDlg = NULL;
  66. if (pCLogonServerApp)
  67. {
  68. pCLogonServerDlg = (CLogonServerDlg*)pCLogonServerApp->m_pMainWnd;
  69. pCLogonServerDlg->csUpdata.SetWindowTextW(a);
  70. }
  71. return true;
  72. }
  73. CLogonServerDlg::CLogonServerDlg(CWnd* pParent /*=NULL*/)
  74. : CDialogEx(CLogonServerDlg::IDD, pParent)
  75. {
  76. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  77. iRenWuID = 0;
  78. }
  79. void CLogonServerDlg::DoDataExchange(CDataExchange* pDX)
  80. {
  81. CDialogEx::DoDataExchange(pDX);
  82. DDX_Control(pDX, IDC_TRACE_MESSAGE, m_TraceServiceControl);
  83. DDX_Control(pDX, IDC_TREE1, ServiceTree);
  84. DDX_Control(pDX, IDC_EDIT1, mShangBao);
  85. DDX_Control(pDX, IDC_EDIT2, mJiQi);
  86. DDX_Control(pDX, IDC_EDIT3, csUpdata);
  87. }
  88. BEGIN_MESSAGE_MAP(CLogonServerDlg, CDialogEx)
  89. ON_WM_SYSCOMMAND()
  90. ON_WM_PAINT()
  91. ON_WM_QUERYDRAGICON()
  92. ON_BN_CLICKED(IDC_START_SERVICE, &CLogonServerDlg::OnBnClickedStartService)
  93. ON_BN_CLICKED(IDC_STOP_SERVICE, &CLogonServerDlg::OnBnClickedStopService)
  94. ON_MESSAGE(WM_MYMSG, &CLogonServerDlg::OnMessageStop)
  95. ON_WM_QUERYENDSESSION()
  96. ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CLogonServerDlg::OnTvnSelchangedTree1)
  97. ON_NOTIFY(TVN_GETINFOTIP, IDC_TREE1, &CLogonServerDlg::OnTvnGetInfoTipTree1)
  98. ON_BN_CLICKED(IDC_BUTTON3, &CLogonServerDlg::OnBnClickedButton3)
  99. ON_BN_CLICKED(IDC_BUTTON1, &CLogonServerDlg::OnBnClickedButton1)
  100. ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &CLogonServerDlg::OnNMDblclkTree1)
  101. ON_WM_TIMER()
  102. END_MESSAGE_MAP()
  103. // CLogonServerDlg 消息处理程序
  104. //停止业务
  105. LRESULT CLogonServerDlg::OnMessageStop(WPARAM wParam, LPARAM lParam)
  106. {
  107. WORD wTest = lParam;
  108. if (wTest != g_StartP.wServerID)
  109. {
  110. return 0;
  111. }
  112. iRenWuID = wParam;//任务ID
  113. //延迟关闭时间
  114. SetTimer(101, 31 * 60 * 1000, NULL);
  115. return 0L;
  116. }
  117. BOOL CLogonServerDlg::OnInitDialog()
  118. {
  119. CDialogEx::OnInitDialog();
  120. memset(m_AppPath, 0, sizeof(m_AppPath));
  121. GetModuleFileName(AfxGetInstanceHandle(), m_AppPath, sizeof(m_AppPath));
  122. CString strCaption;
  123. strCaption.Format(TEXT("登录服务器 -- [ 停止 ](路径:%s)"), m_AppPath);
  124. SetWindowText(strCaption/*TEXT("登录服务器 -- [ 停止 ]")*/);
  125. // 将“关于...”菜单项添加到系统菜单中。
  126. // IDM_ABOUTBOX 必须在系统命令范围内。
  127. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  128. ASSERT(IDM_ABOUTBOX < 0xF000);
  129. CMenu* pSysMenu = GetSystemMenu(FALSE);
  130. if (pSysMenu != NULL)
  131. {
  132. BOOL bNameValid;
  133. CString strAboutMenu;
  134. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  135. ASSERT(bNameValid);
  136. if (!strAboutMenu.IsEmpty())
  137. {
  138. pSysMenu->AppendMenu(MF_SEPARATOR);
  139. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  140. }
  141. }
  142. // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
  143. // 执行此操作
  144. HICON hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
  145. SetIcon(hIcon, TRUE); // 设置大图标
  146. SetIcon(hIcon, FALSE); // 设置小图标
  147. // TODO: 在此添加额外的初始化代码
  148. m_ServiceUnits.SetServiceUnitsSink(this);
  149. HICON hIconNow[4]; // 图标句柄数组
  150. HTREEITEM hCataItem; // 可表示任一分类节点的句柄
  151. // 加载三个图标,并将它们的句柄保存到数组
  152. hIconNow[0] = theApp.LoadIcon(IDI_ICON3);
  153. hIconNow[1] = theApp.LoadIcon(IDI_ICON1);
  154. hIconNow[2] = theApp.LoadIcon(IDI_ICON4);
  155. hIconNow[3] = theApp.LoadIcon(IDI_ICON6);
  156. // 创建图像序列CImageList对象
  157. m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
  158. // 将三个图标添加到图像序列
  159. for (int i = 0; i<3; i++)
  160. {
  161. m_imageList.Add(hIconNow[i]);
  162. }
  163. // 为树形控件设置图像序列
  164. ServiceTree.SetImageList(&m_imageList, TVSIL_NORMAL);
  165. // 插入根节点
  166. hRoot = ServiceTree.InsertItem(_T("提供服务的游戏服务器"), 0, 0);
  167. TCHAR szWorkDir[MAX_PATH] = TEXT("");
  168. CWHService::GetWorkDirectory(szWorkDir, CountArray(szWorkDir));
  169. //构造路径
  170. TCHAR szIniFile[MAX_PATH] = TEXT("");
  171. _sntprintf(szIniFile, CountArray(szIniFile), TEXT("%s\\Parameter.ini"), szWorkDir);
  172. g_StartP.iAuto = GetPrivateProfileInt(TEXT("Server"), TEXT("Auto"), 0, szIniFile);
  173. g_StartP.wServerID = GetPrivateProfileInt(TEXT("Server"), TEXT("ServerID"), 1, szIniFile);
  174. //读取字符
  175. GetPrivateProfileString(TEXT("SYS"), TEXT("守护进程"), TEXT(""), g_StartP.szShouHu, CountArray(g_StartP.szShouHu), szIniFile);
  176. GetPrivateProfileString(TEXT("SYS"), TEXT("策略获取地址"), TEXT(""), g_StartP.szCeLv, CountArray(g_StartP.szCeLv), szIniFile);
  177. if (g_StartP.iAuto == 1)
  178. {
  179. OnBnClickedStartService();
  180. SetTimer(1, 2000, NULL);
  181. }
  182. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  183. }
  184. void CLogonServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
  185. {
  186. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  187. {
  188. CAboutDlg dlgAbout;
  189. dlgAbout.DoModal();
  190. }
  191. else
  192. {
  193. CDialogEx::OnSysCommand(nID, lParam);
  194. }
  195. }
  196. // 如果向对话框添加最小化按钮,则需要下面的代码
  197. // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
  198. // 这将由框架自动完成。
  199. void CLogonServerDlg::OnPaint()
  200. {
  201. if (IsIconic())
  202. {
  203. CPaintDC dc(this); // 用于绘制的设备上下文
  204. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  205. // 使图标在工作区矩形中居中
  206. int cxIcon = GetSystemMetrics(SM_CXICON);
  207. int cyIcon = GetSystemMetrics(SM_CYICON);
  208. CRect rect;
  209. GetClientRect(&rect);
  210. int x = (rect.Width() - cxIcon + 1) / 2;
  211. int y = (rect.Height() - cyIcon + 1) / 2;
  212. // 绘制图标
  213. dc.DrawIcon(x, y, m_hIcon);
  214. }
  215. else
  216. {
  217. CDialogEx::OnPaint();
  218. }
  219. }
  220. //当用户拖动最小化窗口时系统调用此函数取得光标
  221. //显示。
  222. HCURSOR CLogonServerDlg::OnQueryDragIcon()
  223. {
  224. return static_cast<HCURSOR>(m_hIcon);
  225. }
  226. VOID CLogonServerDlg::OnServiceUnitsStatus(enServiceStatus ServiceStatus)
  227. {
  228. //状态设置
  229. switch (ServiceStatus)
  230. {
  231. case ServiceStatus_Stop: //停止状态
  232. {
  233. CString strCaption;
  234. strCaption.Format(TEXT("登录服务器V1.2 --[停止](路径:%s)"), m_AppPath);
  235. SetWindowText(strCaption);
  236. //设置按钮
  237. GetDlgItem(IDC_STOP_SERVICE)->EnableWindow(FALSE);
  238. GetDlgItem(IDC_START_SERVICE)->EnableWindow(TRUE);
  239. //提示信息
  240. LPCTSTR pszDescribe = TEXT("服务停止成功");
  241. CTraceService::TraceString(pszDescribe, TraceLevel_Normal);
  242. break;
  243. }
  244. case ServiceStatus_Config: //配置状态
  245. {
  246. CString strCaption;
  247. strCaption.Format(TEXT("登录服务器V1.2 -- [ 初始化 ](路径:%s)"), m_AppPath);
  248. //设置标题
  249. SetWindowText(strCaption);
  250. //设置按钮
  251. GetDlgItem(IDC_STOP_SERVICE)->EnableWindow(TRUE);
  252. GetDlgItem(IDC_START_SERVICE)->EnableWindow(FALSE);
  253. //提示信息
  254. LPCTSTR pszDescribe = TEXT("正在初始化组件...");
  255. CTraceService::TraceString(pszDescribe, TraceLevel_Normal);
  256. break;
  257. }
  258. case ServiceStatus_Service: //服务状态
  259. {
  260. CString strCaption;
  261. strCaption.Format(TEXT("登录服务器V1.2 -- [ 运行 ](路径:%s)"), m_AppPath);
  262. //设置标题
  263. SetWindowText(strCaption);
  264. //设置按钮
  265. GetDlgItem(IDC_STOP_SERVICE)->EnableWindow(TRUE);
  266. GetDlgItem(IDC_START_SERVICE)->EnableWindow(FALSE);
  267. //提示信息
  268. LPCTSTR pszDescribe = TEXT("服务启动成功");
  269. CTraceService::TraceString(pszDescribe, TraceLevel_Normal);
  270. break;
  271. }
  272. }
  273. return;
  274. }
  275. void CLogonServerDlg::OnBnClickedStartService()
  276. {
  277. //启动服务
  278. try
  279. {
  280. //启用共享内存
  281. HANDLE m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, _T("GAMESERVERINFOG__"));
  282. if (m_hMapFile)
  283. {
  284. //显示共享的文件数据。
  285. LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  286. HINSTANCE hInst = NULL;
  287. hInst = AfxGetApp()->m_hInstance;
  288. TCHAR path_buffer[_MAX_PATH] = { 0 };
  289. GetModuleFileName(hInst, path_buffer, sizeof(path_buffer));//得到exe文件的全路径
  290. GAMESERVERINFOALL *pBuffer = (GAMESERVERINFOALL *)lpMapAddr;
  291. //检测当前节点是否存在
  292. if (pBuffer->iNum > 20)
  293. {
  294. CTraceService::TraceString(TEXT("共享内存数据数据混乱"), TraceLevel_Warning);
  295. goto look;
  296. }
  297. //查找节点是否已经存在
  298. for (int i = 0; i < pBuffer->iNum; i++)
  299. {
  300. if (pBuffer->Data[i].dServerID == g_StartP.wServerID)
  301. {
  302. StringCchCopy(pBuffer->Data[i].szPath, 256, path_buffer);
  303. pBuffer->Data[i].iStat = 1;
  304. pBuffer->Data[i].Pid = GetCurrentProcessId();
  305. FlushViewOfFile(lpMapAddr, sizeof(GAMESERVERINFOALL) + 1);
  306. goto look;
  307. }
  308. }
  309. (pBuffer->iNum)++;
  310. pBuffer->Data[pBuffer->iNum - 1].dServerID = g_StartP.wServerID;
  311. StringCchCopy(pBuffer->Data[pBuffer->iNum - 1].szPath, 256, path_buffer);
  312. pBuffer->Data[pBuffer->iNum - 1].iStat = 1;
  313. pBuffer->Data[pBuffer->iNum - 1].Pid = GetCurrentProcessId();
  314. FlushViewOfFile(lpMapAddr, sizeof(GAMESERVERINFOALL) + 1);
  315. }
  316. else
  317. {
  318. //创建共享文件。
  319. m_hMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
  320. PAGE_READWRITE, 0, 0x10000, _T("GAMESERVERINFOG__"));
  321. //拷贝数据到共享文件里。
  322. LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  323. HINSTANCE hInst = NULL;
  324. hInst = AfxGetApp()->m_hInstance;
  325. TCHAR path_buffer[_MAX_PATH] = { 0 };
  326. GetModuleFileName(hInst, path_buffer, sizeof(path_buffer));//得到exe文件的全路径
  327. GAMESERVERINFOALL Buffer;
  328. ZeroMemory(&Buffer, sizeof(GAMESERVERINFOALL));
  329. Buffer.iNum++;
  330. Buffer.Data[Buffer.iNum - 1].dServerID = g_StartP.wServerID;
  331. StringCchCopy(Buffer.Data[Buffer.iNum - 1].szPath, 256, path_buffer);
  332. Buffer.Data[Buffer.iNum - 1].iStat = 1;
  333. Buffer.Data[Buffer.iNum - 1].Pid = GetCurrentProcessId();
  334. StringCchCopy(Buffer.szCtrl, 256, g_StartP.szCeLv);
  335. memcpy(lpMapAddr, &Buffer, sizeof(GAMESERVERINFOALL));
  336. FlushViewOfFile(lpMapAddr, sizeof(GAMESERVERINFOALL) + 1);
  337. }
  338. look:
  339. m_ServiceUnits.StartService();
  340. }
  341. catch (...)
  342. {
  343. ASSERT(FALSE);
  344. }
  345. return;
  346. }
  347. void CLogonServerDlg::OnBnClickedStopService()
  348. {
  349. int iRet = MessageBox(L"确定关闭吗?", L"真的确定关闭我吗", MB_YESNO);
  350. if (IDYES != iRet)
  351. {
  352. return;
  353. }
  354. //停止服务
  355. try
  356. {
  357. m_ServiceUnits.ConcludeService();
  358. }
  359. catch (...)
  360. {
  361. ASSERT(FALSE);
  362. }
  363. return;
  364. }
  365. BOOL CLogonServerDlg::OnQueryEndSession()
  366. {
  367. //提示消息
  368. if (m_ServiceUnits.GetServiceStatus() != ServiceStatus_Stop)
  369. {
  370. CTraceService::TraceString(TEXT("服务正在运行中,系统要求注销回话请求失败"), TraceLevel_Warning);
  371. return FALSE;
  372. }
  373. // TODO: 在此添加专用的查询结束会话代码
  374. return TRUE;
  375. }
  376. BOOL CLogonServerDlg::PreTranslateMessage(MSG * pMsg)
  377. {
  378. //按键过滤
  379. if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE))
  380. {
  381. return TRUE;
  382. }
  383. return __super::PreTranslateMessage(pMsg);
  384. }
  385. void CLogonServerDlg::OnOK()
  386. {
  387. return;
  388. }
  389. void CLogonServerDlg::OnCancel()
  390. {
  391. //关闭询问
  392. if (m_ServiceUnits.GetServiceStatus() != ServiceStatus_Stop)
  393. {
  394. LPCTSTR pszQuestion = TEXT("登录服务器正在运行中,您确实要关闭服务器吗?");
  395. if (AfxMessageBox(pszQuestion, MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION) != IDYES) return;
  396. }
  397. //停止服务
  398. m_ServiceUnits.ConcludeService();
  399. __super::OnCancel();
  400. }
  401. void CLogonServerDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
  402. {
  403. LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
  404. // TODO: 在此添加控件通知处理程序代码
  405. *pResult = 0;
  406. }
  407. //消息提示
  408. void CLogonServerDlg::OnTvnGetInfoTipTree1(NMHDR *pNMHDR, LRESULT *pResult)
  409. {
  410. LPNMTVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMTVGETINFOTIP>(pNMHDR);
  411. // TODO: Add your control notification handler code here
  412. *pResult = 0;
  413. NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR; // 将传入的pNMHDR转换为NMTVGETINFOTIP指针类型
  414. HTREEITEM hRoot = ServiceTree.GetRootItem(); // 获取树的根节点
  415. CString strText; // 每个树节点的提示信息
  416. if (pTVTipInfo->hItem == hRoot)
  417. {
  418. // 如果鼠标划过的节点是根节点,则提示信息为空
  419. strText = _T("");
  420. }
  421. else
  422. {
  423. // 如果鼠标划过的节点不是根节点,则将该节点的附加32位数据格式化为字符串
  424. DWORD dServerID = pTVTipInfo->lParam;
  425. CGameServerItem * pCGameServerItem = m_ServiceUnits.m_AttemperEngineSink.m_ServerListManager.SearchGameServer(dServerID);
  426. if (pCGameServerItem)
  427. {
  428. strText.Format(_T("节点编号%d,在线人数%d/%d,在线牌桌%d/%d"), pTVTipInfo->lParam
  429. , pCGameServerItem->m_GameServer.dwOnLineCount, pCGameServerItem->m_GameServer.dwFullCount
  430. , pCGameServerItem->m_GameServer.wTableOnlineCount, pCGameServerItem->m_GameServer.wTableFullCount);
  431. }
  432. else
  433. {
  434. strText.Format(_T("节点编号%d,未找到此节点信息."), pTVTipInfo->lParam);
  435. }
  436. }
  437. // 将strText字符串拷贝到pTVTipInfo结构体变量的pszText成员中,这样就能显示内容为strText的提示信息
  438. wcscpy(pTVTipInfo->pszText, strText);
  439. }
  440. void CLogonServerDlg::OnBnClickedButton2()
  441. {
  442. // TODO: 在此添加控件通知处理程序代码
  443. }
  444. void CLogonServerDlg::OnBnClickedButton3()
  445. {
  446. }
  447. void CLogonServerDlg::OnBnClickedButton1()
  448. {
  449. // 更新通道
  450. m_ServiceUnits.m_AttemperEngineSink.m_pITCPNetworkEngine->OnTBDataEvent(217, 0, NULL, 0);
  451. }
  452. void CLogonServerDlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
  453. {
  454. // TODO: 在此添加控件通知处理程序代码
  455. HTREEITEM hTreeItem = ServiceTree.GetSelectedItem();
  456. DWORD dServerID = ServiceTree.GetItemData(hTreeItem);//获得当前选中节点的附件信息 HTREEITEM(可以是你存的一个32位的地址,强转成你存放的类型(CString*、float*.....)即可)
  457. //CString csTest;
  458. //csTest.Format(L"%d", dServerID);
  459. //MessageBox(csTest);
  460. CGameServerItem * pCGameServerItem = m_ServiceUnits.m_AttemperEngineSink.m_ServerListManager.SearchGameServer(dServerID);
  461. if (pCGameServerItem)
  462. {
  463. pCGameServerItem->m_GameServer.bService = !pCGameServerItem->m_GameServer.bService;
  464. HTREEITEM startitem = ServiceTree.GetChildItem(hRoot);
  465. while (startitem)
  466. {
  467. CString strTemp = ServiceTree.GetItemText(startitem);
  468. DWORD dData = ServiceTree.GetItemData(startitem);
  469. if (dData == dServerID)
  470. {
  471. if (pCGameServerItem->m_GameServer.bService > 0)
  472. {
  473. //正常服务状态
  474. ServiceTree.SetItemImage(startitem, 1, 1);
  475. break;
  476. }
  477. else if (pCGameServerItem->m_GameServer.bService == 0)
  478. {
  479. //主动不提供服务状态
  480. ServiceTree.SetItemImage(startitem, 2, 2);
  481. break;
  482. }
  483. else
  484. {
  485. //被攻击无法服务状态
  486. ServiceTree.SetItemImage(startitem, 3, 3);
  487. break;
  488. }
  489. }
  490. startitem = ServiceTree.GetNextSiblingItem(startitem);
  491. }
  492. }
  493. *pResult = 0;
  494. }
  495. //
  496. //void CLogonServerDlg::OnTimer(UINT_PTR nIDEvent)
  497. //{
  498. // // TODO: 在此添加消息处理程序代码和/或调用默认值
  499. // if (nIDEvent == 1)
  500. // {
  501. // KillTimer(1);
  502. // OnBnClickedButton1();
  503. // }
  504. // else if (nIDEvent == 101)
  505. // {
  506. // KillTimer(101);
  507. // try
  508. // {
  509. // m_ServiceUnits.ConcludeService();
  510. // }
  511. // catch (...)
  512. // {
  513. // ASSERT(FALSE);
  514. // }
  515. //
  516. // //通知任务
  517. // //检测人数是否已经退出,若都退出则关闭。
  518. // DWORD dwProcessID = NULL;
  519. // if (!StatisticalUser::GetTokenByName(dwProcessID, g_StartP.szShouHu))
  520. // {
  521. // CTraceService::TraceString(TEXT("未找守护进程,无法回报信息。"), TraceLevel_Warning);
  522. // return;
  523. // }
  524. //
  525. // CList<HWND> mList;
  526. //
  527. // if (!StatisticalUser::GetWindowHwndByPid(dwProcessID, mList))
  528. // {
  529. // CTraceService::TraceString(TEXT("未找守护进程对应的窗口,无法回报信息。"), TraceLevel_Warning);
  530. // return;
  531. // }
  532. //
  533. // //发送信息
  534. // POSITION pos = mList.GetTailPosition();
  535. // CString data;
  536. // while (pos != NULL)
  537. // {
  538. // HWND hHandle = mList.GetNext(pos);
  539. // ::SendMessage(hHandle, WM_MYMSGACK, iRenWuID, g_StartP.wServerID);
  540. // }
  541. // }
  542. // __super::OnTimer(nIDEvent);
  543. //}