void MainWindowPageScripts::OnItemChanged(const LPNMLISTVIEW &pListView) { UpdateUpDown(); if(bIgnoreItemChanged == true || pListView->iItem == -1 || (pListView->uNewState & LVIS_STATEIMAGEMASK) == (pListView->uOldState & LVIS_STATEIMAGEMASK)) { return; } if((((pListView->uNewState & LVIS_STATEIMAGEMASK) >> 12) - 1) == 0) { if(ScriptManager->ScriptTable[pListView->iItem]->bEnabled == false) { return; } ScriptManager->ScriptTable[pListView->iItem]->bEnabled = false; if(SettingManager->bBools[SETBOOL_ENABLE_SCRIPTING] == false || bServerRunning == false) { return; } ScriptManager->StopScript(ScriptManager->ScriptTable[pListView->iItem], false); ClearMemUsage((uint8_t)pListView->iItem); RichEditAppendText(hWndPageItems[REDT_SCRIPTS_ERRORS], (string(LanguageManager->sTexts[LAN_SCRIPT_STOPPED], (size_t)LanguageManager->ui16TextsLens[LAN_SCRIPT_STOPPED])+".").c_str()); } else { if(ScriptManager->ScriptTable[pListView->iItem]->bEnabled == true) {
void ScriptEditorDialog::OnCheckSyntax() { int iAllocLen = ::GetWindowTextLength(m_hWndWindowItems[REDT_SCRIPT]); char * sBuf = (char *)malloc(iAllocLen+1); if(sBuf == nullptr) { ::MessageBox(m_hWndWindowItems[WINDOW_HANDLE], LanguageManager::m_Ptr->m_sTexts[LAN_FAILED_TO_CHECK_SYNTAX], LanguageManager::m_Ptr->m_sTexts[LAN_ERROR], MB_OK); return; } ::GetWindowText(m_hWndWindowItems[REDT_SCRIPT], sBuf, iAllocLen+1); lua_State * L = lua_newstate(LuaAlocator, nullptr); if(L == nullptr) { free(sBuf); ::MessageBox(m_hWndWindowItems[WINDOW_HANDLE], LanguageManager::m_Ptr->m_sTexts[LAN_FAILED_TO_CHECK_SYNTAX], LanguageManager::m_Ptr->m_sTexts[LAN_ERROR], MB_OK); return; } luaL_openlibs(L); if(ServerManager::m_bServerRunning == true) { #if LUA_VERSION_NUM > 501 luaL_requiref(L, "Core", RegCore, 1); lua_pop(L, 1); luaL_requiref(L, "SetMan", RegSetMan, 1); lua_pop(L, 1); luaL_requiref(L, "RegMan", RegRegMan, 1); lua_pop(L, 1); luaL_requiref(L, "BanMan", RegBanMan, 1); lua_pop(L, 1); luaL_requiref(L, "ProfMan", RegProfMan, 1); lua_pop(L, 1); luaL_requiref(L, "TmrMan", RegTmrMan, 1); lua_pop(L, 1); luaL_requiref(L, "UDPDbg", RegUDPDbg, 1); lua_pop(L, 1); luaL_requiref(L, "ScriptMan", RegScriptMan, 1); lua_pop(L, 1); luaL_requiref(L, "IP2Country", RegIP2Country, 1); lua_pop(L, 1); #else RegCore(L); RegSetMan(L); RegRegMan(L); RegBanMan(L); RegProfMan(L); RegTmrMan(L); RegUDPDbg(L); RegScriptMan(L); RegIP2Country(L); #endif } if(luaL_dostring(L, sBuf) == 0) { ::MessageBox(m_hWndWindowItems[WINDOW_HANDLE], LanguageManager::m_Ptr->m_sTexts[LAN_NO_SYNERR_IN_SCRIPT], g_sPtokaXTitle, MB_OK); lua_close(L); } else { size_t szLen = 0; char * stmp = (char*)lua_tolstring(L, -1, &szLen); string sTmp(LanguageManager::m_Ptr->m_sTexts[LAN_SYNTAX], (size_t)LanguageManager::m_Ptr->m_ui16TextsLens[LAN_SYNTAX]); sTmp += " "; sTmp += stmp; RichEditAppendText(MainWindowPageScripts::m_Ptr->m_hWndPageItems[MainWindowPageScripts::REDT_SCRIPTS_ERRORS], sTmp.c_str()); ::MessageBox(m_hWndWindowItems[WINDOW_HANDLE], sTmp.c_str(), LanguageManager::m_Ptr->m_sTexts[LAN_ERROR], MB_OK); lua_close(L); } free(sBuf); }
void clsEventQueue::ProcessEvents() { event * next = NormalS; NormalS = NULL; NormalE = NULL; while(next != NULL) { event * cur = next; next = cur->next; switch(cur->ui8Id) { case EVENT_RESTART: clsServerManager::bIsRestart = true; clsServerManager::Stop(); break; case EVENT_RSTSCRIPTS: clsScriptManager::mPtr->Restart(); break; case EVENT_RSTSCRIPT: { Script * curScript = clsScriptManager::mPtr->FindScript(cur->sMsg); if(curScript == NULL || curScript->bEnabled == false || curScript->LUA == NULL) { return; } clsScriptManager::mPtr->StopScript(curScript, false); clsScriptManager::mPtr->StartScript(curScript, false); break; } case EVENT_STOPSCRIPT: { Script * curScript = clsScriptManager::mPtr->FindScript(cur->sMsg); if(curScript == NULL || curScript->bEnabled == false || curScript->LUA == NULL) { return; } clsScriptManager::mPtr->StopScript(curScript, true); break; } case EVENT_STOP_SCRIPTING: if(clsSettingManager::mPtr->bBools[SETBOOL_ENABLE_SCRIPTING] == true) { clsSettingManager::mPtr->bBools[SETBOOL_ENABLE_SCRIPTING] = false; clsScriptManager::mPtr->OnExit(true); clsScriptManager::mPtr->Stop(); } break; case EVENT_SHUTDOWN: if(clsServerManager::bIsClose == true) { break; } clsServerManager::bIsClose = true; clsServerManager::Stop(); break; default: break; } #ifdef _WIN32 if(cur->sMsg != NULL) { if(HeapFree(clsServerManager::hLibHeap, HEAP_NO_SERIALIZE, (void *)cur->sMsg) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate cur->sMsg in clsEventQueue::ProcessEvents\n", 0); } } #else free(cur->sMsg); #endif delete cur; } #ifdef _WIN32 EnterCriticalSection(&csEventQueue); #else pthread_mutex_lock(&mtxEventQueue); #endif next = ThreadS; ThreadS = NULL; ThreadE = NULL; #ifdef _WIN32 LeaveCriticalSection(&csEventQueue); #else pthread_mutex_unlock(&mtxEventQueue); #endif while(next != NULL) { event * cur = next; next = cur->next; switch(cur->ui8Id) { case EVENT_REGSOCK_MSG: clsUdpDebug::mPtr->Broadcast(cur->sMsg); break; case EVENT_SRVTHREAD_MSG: clsUdpDebug::mPtr->Broadcast(cur->sMsg); break; case EVENT_UDP_SR: { size_t szMsgLen = strlen(cur->sMsg); clsServerManager::ui64BytesRead += (uint64_t)szMsgLen; char *temp = strchr(cur->sMsg+4, ' '); if(temp == NULL) { break;; } size_t szLen = (temp-cur->sMsg)-4; if(szLen > 64 || szLen == 0) { break; } // terminate nick, needed for strcasecmp in clsHashManager temp[0] = '\0'; User *u = clsHashManager::mPtr->FindUser(cur->sMsg+4, szLen); if(u == NULL) { break; } // add back space after nick... temp[0] = ' '; if(memcmp(cur->ui128IpHash, u->ui128IpHash, 16) != 0) { break; } #ifdef _BUILD_GUI if(::SendMessage(clsMainWindowPageUsersChat::mPtr->hWndPageItems[clsMainWindowPageUsersChat::BTN_SHOW_COMMANDS], BM_GETCHECK, 0, 0) == BST_CHECKED) { char msg[128]; int imsglen = sprintf(msg, "UDP > %s (%s) > ", u->sNick, u->sIP); if(CheckSprintf(imsglen, 128, "clsEventQueue::ProcessEvents") == true) { RichEditAppendText(clsMainWindowPageUsersChat::mPtr->hWndPageItems[clsMainWindowPageUsersChat::REDT_CHAT], (string(msg, imsglen)+cur->sMsg).c_str()); } } #endif clsDcCommands::mPtr->SRFromUDP(u, cur->sMsg, szMsgLen); break; } default: break; } free(cur->sMsg); delete cur; } }