📄 loginconsole.cpp.svn-base
字号:
#include "StdAfx.h"
#include "Console.h"
#include "Log.h"
initialiseSingleton(Console);
bool Rehash();
void Console::TranslateRehash(char* str)
{
sLog.outString("rehashing config file...");
Rehash();
}
void Console::Kill()
{
#ifdef WIN32
/* write the return keydown/keyup event */
DWORD dwTmp;
INPUT_RECORD ir[2];
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.dwControlKeyState = 288;
ir[0].Event.KeyEvent.uChar.AsciiChar = 13;
ir[0].Event.KeyEvent.wRepeatCount = 1;
ir[0].Event.KeyEvent.wVirtualKeyCode = 13;
ir[0].Event.KeyEvent.wVirtualScanCode = 28;
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.dwControlKeyState = 288;
ir[1].Event.KeyEvent.uChar.AsciiChar = 13;
ir[1].Event.KeyEvent.wRepeatCount = 1;
ir[1].Event.KeyEvent.wVirtualKeyCode = 13;
ir[1].Event.KeyEvent.wVirtualScanCode = 28;
_thread->kill=true;
WriteConsoleInput (GetStdHandle(STD_INPUT_HANDLE), ir, 2, & dwTmp);
printf("Waiting for console thread to terminate....\n");
while(_thread != NULL)
{
Sleep(100);
}
printf("Console shut down.\n");
#endif
}
bool ConsoleThread::run()
{
new Console;
SetThreadName("Console Interpreter");
sConsole._thread = this;
int i = 0;
char cmd[96];
while (!kill)
{
// Make sure our buffer is clean to avoid Array bounds overflow
memset(cmd,0,sizeof(cmd));
// Read in single line from "stdin"
fgets(cmd, 80, stdin);
if(kill)
break;
for( i = 0 ; i < 80 || cmd[i] != '\0' ; i++ )
{
if( cmd[i] =='\n' )
{
cmd[i]='\0';
sConsole.ProcessCmd(cmd);
fflush(stdin);
break;
}
}
}
sConsole._thread=NULL;
return true;
}
//------------------------------------------------------------------------------
// Protected methods:
//------------------------------------------------------------------------------
// Process one command
void Console::ProcessCmd(char *cmd)
{
typedef void (Console::*PTranslater)(char *str);
struct SCmd
{
const char *name;
PTranslater tr;
};
SCmd cmds[] =
{
{"?", &Console::TranslateHelp}, {"help", &Console::TranslateHelp},
{ "reload", &Console::ReloadAccts},
{ "rehash", &Console::TranslateRehash},
{"shutdown", &Console::TranslateQuit}, {"exit", &Console::TranslateQuit},
};
char cmd2[80];
strcpy(cmd2, cmd);
for(size_t i = 0; i < strlen(cmd); ++i)
cmd2[i] = tolower(cmd[i]);
for (size_t i = 0; i < sizeof(cmds)/sizeof(SCmd); i++)
if (strncmp(cmd2, cmds[i].name, strlen(cmds[i].name)) == 0)
{
(this->*(cmds[i].tr)) (cmd + strlen(cmds[i].name));
return;
}
printf("Console:Unknown console command (use \"help\" for help).\n");
}
void Console::ReloadAccts(char *str)
{
AccountMgr::getSingleton().ReloadAccounts(false);
IPBanner::getSingleton().Reload();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -