サーバーをリモートで再起動する再起動機能を最新の Crysis Wars サーバーの変更にコーディングしています。これは、サーバーに問題があり、単純なシステムのリロードでは解決しない場合に役立ちます。また、メモリを解放するために指定された時間にサーバーを再起動するように指示する場合にも役立ちます。
これを実現するために必要な機能をコーディングしましたが、アプリケーション自体は再起動に問題はありません。問題は、ポートがすぐに閉じられず、アプリケーションの新しいインスタンスが正しく機能しないことです。
これに対する理想的な解決策を探しています。プログラムがシャットダウンされ、すぐにではなく2秒後に起動されます。これを行うと、サーバーが使用していたポートを解放し、既存のメモリをクリーンアップするのに十分な時間が Windows に与えられます。
注意してください:他の(関連する)質問を削除しました。明らかに、プログラムポートを閉じることは、ポートが割り当てられたときにそうするように指示せずに不可能であるためです。ポートにバインドするコード。
コード (必要な場合)
int CScriptBind_GameRules::Restart(IFunctionHandler *pH)
{
bool arg1 = false;
const char *arg2 = "";
gEnv->pScriptSystem->BeginCall("Dynamic","GetValue");
gEnv->pScriptSystem->PushFuncParam("r.enable");
gEnv->pScriptSystem->EndCall(arg1);
gEnv->pScriptSystem->BeginCall("Dynamic","GetValue");
gEnv->pScriptSystem->PushFuncParam("r.line");
gEnv->pScriptSystem->EndCall(arg2);
if (arg1)
{
LogMsg(2, "System restart initiated.");
if (arg2)
{
LogMsg(2, "System Reboot.");
gEnv->pScriptSystem->BeginCall("os","execute");
gEnv->pScriptSystem->PushFuncParam(arg2);
gEnv->pScriptSystem->EndCall(), close((int)gEnv->pConsole->GetCVar("sv_port")->GetString());
return pH->EndFunction();
}
else
{
LogMsg(2, "Internal Faliure.");
return pH->EndFunction();
}
return pH->EndFunction();
}
LogMsg(2, "System restart cancelled: Feature is Disabled.");
return pH->EndFunction();
}