//----------------------------------------------------------------------------------------------- void DeveloperConsole::CheckForCommandExecute( const Keyboard& keyboard ) { if( keyboard.IsKeyPressedDownAndWasNotBefore( KEY_ENTER ) ) { if( m_commandPromptLine.m_text.size() > 0 ) { if( m_consoleLogHistoryLines.size() == 0 ) m_consoleLogHistoryLines.push_back( m_commandPromptLine ); else if( m_consoleLogHistoryLines.size() > 0 && m_commandPromptLine.m_text != m_consoleLogHistoryLines.back().m_text ) m_consoleLogHistoryLines.push_back( m_commandPromptLine ); while( m_commandPromptLine.m_text.size() > 0 && m_commandPromptLine.m_text[ 0 ] == ' ' ) m_commandPromptLine.m_text.erase( 0, 1 ); int firstSpacePos = m_commandPromptLine.m_text.find( ' ' ); if( firstSpacePos == -1 ) ExecuteConsoleCommand( m_commandPromptLine.m_text, "" ); else ExecuteConsoleCommand( m_commandPromptLine.m_text.substr( 0, firstSpacePos ), m_commandPromptLine.m_text.substr( firstSpacePos + 1 ) ); m_commandPromptLine.m_text = ""; m_cursorPosition = 0; m_consoleTextEntryPosition = m_consoleLogHistoryLines.size(); } } }
void cRoot::TickCommands(void) { // Execute any pending commands: cCommandQueue PendingCommands; { cCSLock Lock(m_CSPendingCommands); std::swap(PendingCommands, m_PendingCommands); } for (cCommandQueue::iterator itr = PendingCommands.begin(), end = PendingCommands.end(); itr != end; ++itr) { ExecuteConsoleCommand(itr->m_Command, *(itr->m_Output)); } }
void cRoot::TickWorlds(float a_Dt) { // Execute any pending commands: cCommandQueue PendingCommands; { cCSLock Lock(m_CSPendingCommands); std::swap(PendingCommands, m_PendingCommands); } for (cCommandQueue::iterator itr = PendingCommands.begin(), end = PendingCommands.end(); itr != end; ++itr) { ExecuteConsoleCommand(itr->m_Command, *(itr->m_Output)); } // Tick the worlds: for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr) { itr->second->Tick(a_Dt); } }
void GServerBaseConsole::ProcessConsoleTasks() { SConsoleTask task; for (;;) { task.type = ECTT_None; { boost::mutex::scoped_lock lock(mtx_console_task_queue); if (console_task_queue.empty()) { break; } task = console_task_queue.front(); console_task_queue.pop(); } if (task.type == ECTT_Response) { GServerBase::TSocketIdMap::iterator its; its = socket_console_map.find(task.socketid); if (its != socket_console_map.end()) { GSocketConsole * socket = static_cast<GSocketConsole *>(its->second); socket->MemoryOut().AddString(task.result); if (--socket->awaiting_console_tasks_responses_count == 0) { socket->MemoryOut().AddString("---END---\r\n"); } *socket->MemoryOut().End() = 0; while (socket->awaiting_console_tasks_responses_count == 0 && !socket->pending_console_commands.empty()) { string cmd = socket->pending_console_commands.front(); socket->pending_console_commands.pop(); ExecuteConsoleCommand(socket, cmd); } socket->TestWrite(); } } } }