私はゲームサーバーをホストするアプリケーションを構築しており、外部コントロール用のWeb APIを追加したいと考えています。アプリケーションは現在、コンソールアプリケーションですが、最終的にはWindowsサービスになります。私はWeb APIを追加し、リクエストに応答することができます。また、TcpServerをコンソールアプリケーションに、TcpClientをWeb APIに追加して、Web APIがコンソールアプリケーションにコマンドを送信できるようにしました。ウェブAPIを通じてサービスのやりとりを許可する方法
しかし、Web APIはゲームサーバーをホストする同じコンソールアプリケーションでホストされているため、Web APIコントローラクラスからゲームサーバーのホストクラスに直接コマンドを送信できる方法はありますか?それは現在この(スペースを節約するために省略し、共通のTCPコード)のようになります。
public class GameServiceManager
{
private IDisposable _restApi;
GameServer _gameServer;
public void StartService(NameValueCollection appSettings)
{
_restApi = WebApp.Start<MyHttpHostController>(url: restApiUrl);
_gameServer = new GameServer();
// also starts TCP Server stuff to receive command
}
}
public class MyHttpHostController
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{action}/{id}",
defaults: new { controller = "RestApi", id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
public class RestApiController : ApiController
{
[HttpGet]
public IHttpActionResult resetGameServer()
{
// creates TCP Client to send command
return Ok();
}
}
GameServiceManagerはコンソールアプリでインスタンス化し、その後をStartService()を呼び出しています。他のアプリケーションでは、イベントを使用して親クラスと子クラスの間でコマンドをやりとりしましたが、Web APIの部分をあまり支配していないようです。
からcode samplesは、あなたのWeb APIからの静的およびアクセスそれとしてあなたのゲームサーバは、あなたが持つことができていますか? – StfBln
私はそう信じませんが、わかりません。いくつかの子プロセスを追跡し、他の2つの外部API間の同期を維持する必要があります。 – Cam
名前付きパイプを使って通信を調べましたか? – NPhillips