Ich habe eine Anwendung zum Hosten eines Gameservers erstellt und möchte eine Web-API für die externe Kontrolle hinzufügen. Die Anwendung ist derzeit nur eine Konsolen-App, wird aber letztendlich ein Windows-Dienst sein. Ich habe die Web-API hinzugefügt und kann auf Anfragen antworten. Ich habe auch einen TcpServer zur Konsolen-App und einen TcpClient zur Web-API hinzugefügt, damit die Web-API Befehle an die Konsolen-App senden kann.Wie Service-Interaktion über eine Web-API zu ermöglichen
Da die Web-API jedoch von der gleichen Konsolen-App gehostet wird, die den Spieleserver hostet, gibt es eine Möglichkeit, Befehle direkt von der Web-API-Controller-Klasse an die Host-Klasse des Host-Servers zu senden. Es sieht derzeit so etwas wie dieses (gemeinsame TCP-Code abgekürzt Platz zu sparen):
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();
}
}
Die GameServiceManager in der Konsolenanwendung instanziiert wird, und ruft dann Startservice(). In anderen Anwendungen habe ich Events verwendet, um Befehle zwischen Eltern- und Kind-Klassen hin- und herzuübertragen, aber ich habe anscheinend nicht viel Kontrolle über die Web-API-Teile der Dinge.
Können Sie Ihre Gameserver als statische und greifen Sie von Ihrem Web-api haben? – StfBln
Ich glaube nicht, aber ich bin mir nicht sicher. Es muss einige untergeordnete Prozesse nachverfolgen und die Synchronisation zwischen zwei anderen externen APIs aufrechterhalten. – Cam
Sie haben mit Named Pipes für die Kommunikation gesucht? – NPhillips