X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Finspircd_namedpipe.cpp;h=93d7c423a1cbeb7690bebbf8674b7e9d23e72fd4;hb=3f647b9c1649d62c3a91da1723afec121f396ee5;hp=3f0f47fdf5ebfe7c08f6dd78c70528d526b96bba;hpb=07c7b5b61b8601d4651eab1c1984684d3a2fa6ae;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/inspircd_namedpipe.cpp b/win/inspircd_namedpipe.cpp index 3f0f47fdf..93d7c423a 100644 --- a/win/inspircd_namedpipe.cpp +++ b/win/inspircd_namedpipe.cpp @@ -8,33 +8,35 @@ IPCThread::IPCThread(InspIRCd* Instance) : Thread(), ServerInstance(Instance) { + if (!initwmi()) + ServerInstance->Logs->Log("IPC", DEBUG, "Could not initialise WMI. CPU percantage reports will not be available."); } IPCThread::~IPCThread() { - + donewmi(); } void IPCThread::Run() { LPTSTR Pipename = "\\\\.\\pipe\\InspIRCdStatus"; - while (GetExitFlag() == false) + while (GetExitFlag() == false) { Pipe = CreateNamedPipe (Pipename, - PIPE_ACCESS_DUPLEX, // read/write access - PIPE_TYPE_MESSAGE | // message type pipe - PIPE_READMODE_MESSAGE | // message-read mode - PIPE_WAIT, // blocking mode - PIPE_UNLIMITED_INSTANCES, // max. instances - MAXBUF, // output buffer size - MAXBUF, // input buffer size - 1000, // client time-out - NULL); // no security attribute + PIPE_ACCESS_DUPLEX, // read/write access + PIPE_TYPE_MESSAGE | // message type pipe + PIPE_READMODE_MESSAGE | // message-read mode + PIPE_WAIT, // blocking mode + PIPE_UNLIMITED_INSTANCES, // max. instances + MAXBUF, // output buffer size + MAXBUF, // input buffer size + 1000, // client time-out + NULL); // no security attribute if (Pipe == INVALID_HANDLE_VALUE) { - SleepEx(500, true); + SleepEx(10, true); continue; } @@ -83,6 +85,8 @@ void IPCThread::Run() stat << "kbitspersectotal " << kbitpersec_total << std::endl; stat << "kbitspersecout " << kbitpersec_out << std::endl; stat << "kbitspersecin " << kbitpersec_in << std::endl; + stat << "uptime " << ServerInstance->Time() - ServerInstance->startup_time << std::endl; + stat << "cpu " << getcpu() << std::endl; if (HaveMemoryStats) { stat << "workingset " << MemCounters.WorkingSetSize << std::endl; @@ -123,45 +127,51 @@ void IPCThread::SetResult(int newresult) } -IPC::IPC(InspIRCd* Srv) : ServerInstance(Srv) -{ - /* The IPC pipe is threaded */ - thread = new IPCThread(Srv); - Srv->Threads->Create(thread); -} - -void IPC::Check() -{ - switch (thread->GetStatus()) - { - case 'N': - /* No-Operation */ - thread->SetResult(0); - thread->ClearStatus(); - break; - case '1': - /* Rehash */ - ServerInstance->Rehash("due to rehash command from GUI"); - thread->SetResult(0); - thread->ClearStatus(); - break; - case '2': - /* Shutdown */ - thread->SetResult(0); - thread->ClearStatus(); - ServerInstance->Exit(EXIT_STATUS_NOERROR); - break; - case '3': - /* Restart */ - thread->SetResult(0); - thread->ClearStatus(); - ServerInstance->Restart("Restarting due to command from GUI"); - break; - } -} - -IPC::~IPC() -{ - thread->SetExitFlag(); - delete thread; -} \ No newline at end of file +IPC::IPC(InspIRCd* Srv) : ServerInstance(Srv) +{ + /* The IPC pipe is threaded */ + thread = new IPCThread(Srv); + Srv->Threads->Start(thread); +} + +void IPC::Check() +{ + switch (thread->GetStatus()) + { + case 'N': + /* No-Operation */ + thread->SetResult(0); + thread->ClearStatus(); + break; + case '1': + /* Rehash */ + ServerInstance->Rehash("due to rehash command from GUI"); + thread->SetResult(0); + thread->ClearStatus(); + break; + case '2': + /* Shutdown */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Exit(EXIT_STATUS_NOERROR); + break; + case '3': + /* Restart */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Restart("Restarting due to command from GUI"); + break; + case '4': + /* Toggle debug */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Config->forcedebug = !ServerInstance->Config->forcedebug; + break; + } +} + +IPC::~IPC() +{ + thread->SetExitFlag(); + delete thread; +}