コード例 #1
0
ファイル: DeveloperConsole.cpp プロジェクト: MrBowler/SD6-A2
//-----------------------------------------------------------------------------------------------
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();
		}
	}
}
コード例 #2
0
ファイル: Root.cpp プロジェクト: 36451/MCServer
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));
	}
}
コード例 #3
0
ファイル: Root.cpp プロジェクト: ravenscroftj/MCServer
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);
	}
}
コード例 #4
0
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();
			}
		}
	}
}