void MyApp::Draw() { if(!FvRobotMainApp::pInstance()) return; //! 修改窗口大小 if(m_iResetWindowSize) { int w,h; GetWindowSize(w, h); if(m_iResetWindowSize & 0x1) w = FvRobotCfg::Instance().GetWindowSizeWidth(); if(m_iResetWindowSize & 0x2) h = FvRobotCfg::Instance().GetWindowSizeHeight(); SetWindowSize(w, h); m_iResetWindowSize = 0; } if(m_iShowMode == 0) { if(FvRobotCfg::Instance().GetSingleMode()) DrawSingleMode(); else DrawGlobalMode(); } else if(m_iShowMode == 1) { DrawHelp(); } else { DrawConfig(); } }
LONG APIENTRY MainWndProc(HWND hWnd, UINT message, UINT wParam, LONG lParam) { switch(message) { case WM_TIMER: { if(wParam == TIMER_SEC) ProcessSecTimer(); else if(wParam == TIMER_MIN) ProcessMinTimer(); } break; case WSA_READADMINCLIENT: { if(WSAGETSELECTEVENT(lParam) != FD_READ) { Log("adminclient close fd read","-system",0); AdminClient.CloseSocket(); break; } if(AdminClient.Receive() != 1) { Log("adminclient %d close receive", "-system", 0); break; } char temp[256]; int Error; int ErrorCode; while(1) { char *Msg = AdminClient.ReadMessage(&Error, &ErrorCode); if(Msg == NULL) break; if(Error == 1 || Error == 2) { sprintf(temp, "err wsa_ReadadminClient (%d),%d", Error, ErrorCode); Log(temp, "-system", 0); break; } int ret = ProcessAdminClientMessage(Msg); }; } break; case WSA_READADMIN: { int User = GetAdminFromSocket(wParam); if(User == -1) { closesocket(wParam); Log("err, wsa_read unregistered sever socket", "-system", 0); break; } if(WSAGETSELECTEVENT(lParam) != FD_READ) { char temp[256]; sprintf(temp, "admin close fd %d", User); Log(temp, "-system", 0); pAdmin[User].cSock.CloseSocket(); pAdmin[User].Mode = USER_EMPTY; pAdmin[User].Name[0] = 0; break; } CurrentTime = timeGetTime(); if(pAdmin[User].cSock.Receive() != 1) { char temp[256]; sprintf(temp, "admin %d close receive", User); Log(temp, "-system", 0); break; } char temp[256]; int Error; int ErrorCode; while(1) { char *Msg = pAdmin[User].cSock.ReadMessage(&Error, &ErrorCode); if(Msg == NULL) break; #ifdef _PACKET_DEBUG MSG_STANDARD * debug = (MSG_STANDARD*) Msg; if(BASE_CheckPacket(debug)) { sprintf(temp, "err packet Type:%d Size:%d", debug->Type, debug->Size); Log(temp, "-system", 0); } #endif if(Error == 1 || Error == 2) { sprintf(temp, "err,wsa_Readadmin (%d),%d", Error, ErrorCode); Log(temp, "-system", 0); break; } int ret = ProcessAdminMessage(User, Msg); if(ret == FALSE) { pAdmin[User].cSock.CloseSocket(); pAdmin[User].Mode = USER_EMPTY; pAdmin[User].Name[0] = 0; break; } }; } break; case WSA_READ: { int User = GetUserFromSocket(wParam); if(User == -1) { closesocket(wParam); Log("err wsa_read unregistered game server socket", "-system", 0); break; } if(WSAGETSELECTEVENT(lParam) != FD_READ) { char temp[256]; sprintf(temp, "clo server fd %d", User); Log(temp, "-system", 0); pUser[User].cSock.CloseSocket(); pUser[User].Mode = USER_EMPTY; break; } CurrentTime = timeGetTime(); if(pUser[User].cSock.Receive() != 1) { char temp[256]; sprintf(temp, "clo, server receive %d", User); Log(temp, "-system", 0); Log(temp, "-system", 0); Log(temp, "-system", 0); pUser[User].cSock.nRecvPosition = 0; pUser[User].cSock.nProcPosition = 0; break; } char temp[256]; int Error; int ErrorCode; do { char *Msg = pUser[User].cSock.ReadMessage(&Error, &ErrorCode); if (Msg == NULL) break; #ifdef _PACKET_DEBUG MSG_STANDARD * debug = (MSG_STANDARD*) Msg; if(BASE_CheckPacket(debug)) { sprintf(temp, "**PACKET_DEBUG** Type:%d Size:%d", debug->Type, debug->Size); Log(temp, "-system", 0); } #endif if(Error == 1 || Error == 2) { sprintf(temp, "err wsa_read (%d),%d", Error, ErrorCode); Log(temp, "-system", 0); break; } ProcessClientMessage(User, Msg); } while(1); } break; case WSA_ACCEPTADMIN: { ReadAdmin(); if(WSAGETSELECTERROR(lParam)) { Log("err,accept_admin accepting fails", "-system", 0); break; } TempUser.AcceptUser(AdminSocket.Sock, WSA_READADMIN); unsigned char *cIP = (unsigned char *)&(TempUser.IP); int User = -1; int i = 0; for(i = 0; i <= MAX_ADMIN; i++) { if(pAdmin[i].IP == TempUser.IP) { User = i; break; } } if(User == -1) { int i = 0; for(i = 0; i < MAX_ADMIN; i++) { int a, b, c, d; a = b = c = d = 0; if(pAdminIP[i] == 0) continue; if(pAdminIP[i] == TempUser.IP) { User = i; break; } } if(i == MAX_ADMIN) { TempUser.cSock.CloseSocket(); char temp[256]; sprintf(temp, "err, wsa_acceptadmin request accept from %d.%d.%d.%d", cIP[0], cIP[1], cIP[2], cIP[3]); Log(temp, "-system", 0); } } if(User >= 0 && User < MAX_ADMIN) { if(pAdmin[User].Mode != USER_EMPTY) { char temp[256]; sprintf(temp, "err, wsa_acceptadmin not empty previous slot %d", i); Log(temp, "-system", 0); TempUser.cSock.CloseSocket(); pAdmin[User].cSock.CloseSocket(); pAdmin[User].Mode = USER_EMPTY; break; } } else { Log("err,accept_admin unknown attempt", "-system", 0); TempUser.cSock.CloseSocket(); break; } if(User == -1) { Log("err,accept_admin no empty", "-system", 0); break; } pAdmin[User].Level = -1; pAdmin[User].DisableID = 0; pAdmin[User].IP = TempUser.IP; pAdmin[User].Mode = TempUser.Mode; pAdmin[User].Name[0] = 0; pAdmin[User].cSock.Sock = TempUser.cSock.Sock; pAdmin[User].cSock.nRecvPosition = TempUser.cSock.nRecvPosition; pAdmin[User].cSock.nProcPosition = TempUser.cSock.nProcPosition; pAdmin[User].cSock.nSendPosition = TempUser.cSock.nSendPosition; cIP = (unsigned char *)&(pAdmin[User].IP); char tmp[100]; sprintf(tmp, "sys,wsa_acceptadmin %d.%d.%d.%d <%d>", cIP[0], cIP[1], cIP[2], cIP[3], User); Log(tmp, "-system", 0); pAdmin[User].Encode1 = rand() % 10000; pAdmin[User].Encode2 = rand() % 10000; MSG_NPIDPASS sm; memset(&sm, 0, sizeof(MSG_NPIDPASS)); sm.Type = _MSG_NPReqIDPASS; sm.Size = sizeof(MSG_NPIDPASS); sm.ID = 0; sm.Encode1 = pAdmin[User].Encode1; sm.Encode2 = pAdmin[User].Encode2; pAdmin[User].cSock.SendOneMessage((char*)&sm, sizeof(MSG_NPIDPASS)); } break; case WSA_ACCEPT: { if(WSAGETSELECTERROR(lParam)) { Log("err WSAGETSELECTERROR - accepting new client.", "-system", 0); break; } TempUser.AcceptUser(ListenSocket.Sock, WSA_READ); unsigned char *cIP = (unsigned char *)&(TempUser.IP); char sIP[256]; sprintf(sIP, "%d.%d.%d.%d", cIP[0], cIP[1], cIP[2], cIP[3]); int User = -1; for(int i = 0; i < MAX_SERVER; i++) { if(pUser[i].IP == TempUser.IP) { User = i; break; } } if(User == -1) { int i = 1; for(; i < MAX_SERVERNUMBER; i++) { if(!strcmp(g_pServerList[ServerIndex][i], sIP)) break; } if(i == MAX_SERVERNUMBER) { TempUser.cSock.CloseSocket(); char temp[256]; sprintf(temp, "err wsa_accept request from %s", sIP ); Log(temp, "-system", 0); break; } User = i - 1; } else if(User >= 0 && User < MAX_SERVERNUMBER) { if(pUser[User].Mode != USER_EMPTY) { char temp[256]; sprintf(temp, "err wsa_accept no previous slot %d", User ); Log(temp, "-system", 0); TempUser.cSock.CloseSocket(); TempUser.Mode = 0; pUser[User].cSock.CloseSocket(); pUser[User].Mode = 0; break; } } else { Log("err wsa_accept unknown attempt", "-system", 0); TempUser.cSock.CloseSocket(); } if(User == -1) { Log("err wsa_accept no empty", "-system", 0); break; } if(cIP[0] == LocalIP[0] && cIP[1] == LocalIP[1] && cIP[2] == LocalIP[2]) { pUser[User].IP = TempUser.IP; pUser[User].Mode = TempUser.Mode; pUser[User].cSock.Sock = TempUser.cSock.Sock; pUser[User].cSock.nRecvPosition = TempUser.cSock.nRecvPosition; pUser[User].cSock.nProcPosition = TempUser.cSock.nProcPosition; pUser[User].cSock.nSendPosition = TempUser.cSock.nSendPosition; cFileDB.SendDBSignalParm3(User, 0, _MSG_DBSetIndex, ServerIndex, Sapphire, User); for(int i = 0; i < 65536; i++) { if(GuildInfo[i].Citizen) cFileDB.SendGuildInfo(User, i); if(g_pGuildWar[i]) cFileDB.SendDBSignalParm2(User, 0, _MSG_War, i, g_pGuildWar[i]); if(g_pGuildAlly[i]) cFileDB.SendDBSignalParm2(User, 0, _MSG_GuildAlly, i, g_pGuildAlly[i]); } if(TransperCharacter) cFileDB.SendDBSignalParm2(User, 0, _MSG_TransperCharacter, 0, 0); break; } else { TempUser.cSock.CloseSocket(); char temp[256]; sprintf(temp, "err,wsa_accept outer ethernet IP: %d.%d.%d.%d", cIP[0], cIP[1], cIP[2], cIP[3]); Log(temp, "-system", 0); break; } } break; case WM_CREATE: { HMENU hMenu, hSubMenu; HICON hIcon, hIconSm; hMenu = CreateMenu(); hSubMenu = CreatePopupMenu(); AppendMenu(hSubMenu, MF_STRING, IDC_EXIT, "&Exit"); AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&File"); hSubMenu = CreatePopupMenu(); AppendMenu(hSubMenu, MF_STRING, IDC_SHUTDOWNNP, "&Reload MobBase"); AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Sistema"); SetMenu(hWnd, hMenu); } break; case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_EXIT: PostMessage(hWnd, WM_CLOSE, 0, 0); break; case IDC_SHUTDOWNNP: { #pragma region Load Base Characters int handle = -1; handle = _open("./BaseMob/TK", _O_RDONLY | _O_BINARY); if (handle == -1) { MessageBoxA(hWndMain, "no TransKnight file", "BOOTING ERROR", MB_OK); return FALSE; } _read(handle, &g_pBaseSet[0], sizeof(STRUCT_MOB)); _close(handle); handle = -1; handle = _open("./BaseMob/FM", _O_RDONLY | _O_BINARY); if (handle == -1) { MessageBoxA(hWndMain, "no Foema file", "BOOTING ERROR", MB_OK); return FALSE; } _read(handle, &g_pBaseSet[1], sizeof(STRUCT_MOB)); _close(handle); handle = -1; handle = _open("./BaseMob/BM", _O_RDONLY | _O_BINARY); if (handle == -1) { MessageBoxA(hWndMain, "no BeastMaster file", "BOOTING ERROR", MB_OK); return FALSE; } _read(handle, &g_pBaseSet[2], sizeof(STRUCT_MOB)); _close(handle); handle = -1; handle = _open("./BaseMob/HT", _O_RDONLY | _O_BINARY); if (handle == -1) { MessageBoxA(hWndMain, "no Huntress file", "BOOTING ERROR", MB_OK); return FALSE; } _read(handle, &g_pBaseSet[3], sizeof(STRUCT_MOB)); _close(handle); g_pBaseSet[0].BaseScore = g_pBaseSet[0].CurrentScore; g_pBaseSet[1].BaseScore = g_pBaseSet[1].CurrentScore; g_pBaseSet[2].BaseScore = g_pBaseSet[2].CurrentScore; g_pBaseSet[3].BaseScore = g_pBaseSet[3].CurrentScore; #pragma endregion } break; } } break; case WM_PAINT: PAINTSTRUCT ps; memset(&ps, 0, sizeof(PAINTSTRUCT)); BeginPaint(hWnd, &ps); hFont = CreateFont(12, 0, 0, 0, FW_LIGHT, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEVICE_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Fixedsys"); // |FF_DECORATIVE hDC = ps.hdc; DrawConfig(); EndPaint(hWnd, &ps); break; case WM_CLOSE: { int rret = MessageBox(hWndMain, "Desligando servidor, não se esqueça de salvar as contas !", "Aviso !! Desligando Servidor !!", MB_OKCANCEL | MB_ICONWARNING); if(rret == 1) { WriteConfig(); if (fLogFile) fclose(fLogFile); DayLog_ExpLog(); DayLog_ItemLog(); DefWindowProc(hWnd,message,wParam,lParam); } return true; } break; case WM_DESTROY: WSACleanup(); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void ProcessSecTimer() { CReadFiles::ImportUser(); CReadFiles::UpdateUser(); SecCounter++; if(SecCounter % 30 == 0) { CReadFiles::ImportItem(); // Once every two minutes CReadFiles::ImportDonate(); } DrawConfig(); if(SecCounter % 30 == 0) { CReadFiles::UpdateConnection(); MinCounter++; if(MinCounter % 30 == 0) { CReadFiles::UpdateConnectionData(); HourCounter++; } } if (SecCounter % 600 == 0) { #pragma region Gerador de Ranking CReadFiles::WriteRanking(); #pragma endregion } struct tm when; time_t now; time(&now); when = *localtime(&now); if (when.tm_mday != LastLogDay) StartLog("A"); if (when.tm_mday != LastDayLogDay) { DayLog_ItemLog(); DayLog_ExpLog(); LastDayLogDay = when.tm_mday; } if(when.tm_hour == 0 && when.tm_wday == 0 && when.tm_min == 0 && when.tm_sec == 0) { for(int i = 0; i < 65536;i++) { if(GuildInfo[i].Fame) { GuildInfo[i].Fame = 0; for(int j = 0; j < MAX_SERVER; j++) { if(pUser[j].cSock.Sock == 0) continue; if(pUser[j].Mode == 0) continue; cFileDB.SendGuildInfo(j, i); } } } CReadFiles::WriteGuildInfo(); } }