//protected override Task ExecuteAsync(CancellationToken stoppingToken) public void DoWork() { //stoppingToken.ThrowIfCancellationRequested(); //Server Spin Up var serverSpinUpConsumer = new AsyncEventingBasicConsumer(serverSpinUpChannel); serverSpinUpConsumer.Received += (model, ea) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Server Spin Up Message Received"); var body = ea.Body; MQSpinUpServerMessage serverSpinUpMessage = MQSpinUpServerMessage.Deserialize(body.ToArray()); HandleServerSpinUpMessage( serverSpinUpMessage.CustomerGUID, serverSpinUpMessage.WorldServerID, serverSpinUpMessage.ZoneInstanceID, serverSpinUpMessage.MapName, serverSpinUpMessage.Port); return(Task.CompletedTask); }; serverSpinUpConsumer.Shutdown += OnServerSpinUpConsumerShutdown; serverSpinUpConsumer.Registered += OnServerSpinUpConsumerRegistered; serverSpinUpConsumer.Unregistered += OnServerSpinUpConsumerUnregistered; serverSpinUpConsumer.ConsumerCancelled += OnServerSpinUpConsumerConsumerCancelled; serverSpinUpChannel.BasicConsume(queue: serverSpinUpQueueNameGUID.ToString(), autoAck: true, consumer: serverSpinUpConsumer); //Server Shut Down var serverShutDownConsumer = new AsyncEventingBasicConsumer(serverShutDownChannel); serverShutDownConsumer.Received += (model, ea) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Message Received"); var body = ea.Body; MQShutDownServerMessage serverShutDownMessage = MQShutDownServerMessage.Deserialize(body.ToArray()); HandleServerShutDownMessage( serverShutDownMessage.CustomerGUID, serverShutDownMessage.ZoneInstanceID ); return(Task.CompletedTask); }; serverShutDownConsumer.Shutdown += OnServerShutDownConsumerShutdown; serverShutDownConsumer.Registered += OnServerShutDownConsumerRegistered; serverShutDownConsumer.Unregistered += OnServerShutDownConsumerUnregistered; serverShutDownConsumer.ConsumerCancelled += OnServerShutDownConsumerConsumerCancelled; serverShutDownChannel.BasicConsume(queue: serverShutDownQueueNameGUID.ToString(), autoAck: true, consumer: serverShutDownConsumer); //return Task.CompletedTask; }
public async Task <IActionResult> Handle() { var factory = new ConnectionFactory() { HostName = owsApiPathConfig.Value.InternalRabbitMQServerHostName }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "ows.serverspinup", type: "direct", durable: false, autoDelete: false); MQSpinUpServerMessage serverSpinUpMessage = new MQSpinUpServerMessage(); serverSpinUpMessage.CustomerGUID = CustomerGUID; serverSpinUpMessage.WorldServerID = WorldServerID; serverSpinUpMessage.ZoneInstanceID = ZoneInstanceID; serverSpinUpMessage.MapName = ZoneName; serverSpinUpMessage.Port = Port; var body = serverSpinUpMessage.SerialiseIntoBinary(); channel.BasicPublish(exchange: "ows.serverspinup", routingKey: String.Format("ows.serverspinup.{0}", WorldServerID), basicProperties: null, body: body); } } Output = new SuccessAndErrorMessage() { Success = true, ErrorMessage = "" }; return(new OkObjectResult(Output)); }
//protected override Task ExecuteAsync(CancellationToken stoppingToken) public void DoWork() { //This will be null if there was a problem with initialization in the constructor if (_OWSInstanceLauncherOptions == null) { return; } //Server Spin Up var serverSpinUpConsumer = new AsyncEventingBasicConsumer(serverSpinUpChannel); serverSpinUpConsumer.Received += (model, ea) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Server Spin Up Message Received"); var body = ea.Body; MQSpinUpServerMessage serverSpinUpMessage = MQSpinUpServerMessage.Deserialize(body.ToArray()); HandleServerSpinUpMessage( serverSpinUpMessage.CustomerGUID, serverSpinUpMessage.WorldServerID, serverSpinUpMessage.ZoneInstanceID, serverSpinUpMessage.MapName, serverSpinUpMessage.Port); return(Task.CompletedTask); }; serverSpinUpConsumer.Shutdown += OnServerSpinUpConsumerShutdown; serverSpinUpConsumer.Registered += OnServerSpinUpConsumerRegistered; serverSpinUpConsumer.Unregistered += OnServerSpinUpConsumerUnregistered; serverSpinUpConsumer.ConsumerCancelled += OnServerSpinUpConsumerConsumerCancelled; serverSpinUpChannel.BasicConsume(queue: serverSpinUpQueueNameGUID.ToString(), autoAck: true, consumer: serverSpinUpConsumer); //Server Shut Down var serverShutDownConsumer = new AsyncEventingBasicConsumer(serverShutDownChannel); serverShutDownConsumer.Received += (model, ea) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Message Received"); var body = ea.Body; MQShutDownServerMessage serverShutDownMessage = MQShutDownServerMessage.Deserialize(body.ToArray()); HandleServerShutDownMessage( serverShutDownMessage.CustomerGUID, serverShutDownMessage.ZoneInstanceID ); return(Task.CompletedTask); }; serverShutDownConsumer.Shutdown += OnServerShutDownConsumerShutdown; serverShutDownConsumer.Registered += OnServerShutDownConsumerRegistered; serverShutDownConsumer.Unregistered += OnServerShutDownConsumerUnregistered; serverShutDownConsumer.ConsumerCancelled += OnServerShutDownConsumerConsumerCancelled; serverShutDownChannel.BasicConsume(queue: serverShutDownQueueNameGUID.ToString(), autoAck: true, consumer: serverShutDownConsumer); //return Task.CompletedTask; }
public async Task <IActionResult> Handle() { if (String.IsNullOrEmpty(ZoneName) || ZoneName == "GETLASTZONENAME") { GetCharByCharName character = await charactersRepository.GetCharByCharName(CustomerGUID, CharacterName); if (character == null || String.IsNullOrEmpty(character.MapName)) { return(new BadRequestResult()); } ZoneName = character.MapName; } JoinMapByCharName joinMapByCharacterName = await charactersRepository.JoinMapByCharName(CustomerGUID, CharacterName, ZoneName, PlayerGroupType); bool readyForPlayersToConenct = false; if (joinMapByCharacterName.NeedToStartupMap) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "ServerSpinUp", type: "direct", durable: false, autoDelete: false); /*channel.QueueDeclare(queue: "ServerSpinUp", * durable: false, * exclusive: false, * autoDelete: false, * arguments: null);*/ MQSpinUpServerMessage testMessage = new MQSpinUpServerMessage(); testMessage.WorldServerID = joinMapByCharacterName.WorldServerID; testMessage.MapName = ZoneName; testMessage.Port = joinMapByCharacterName.WorldServerPort; var body = testMessage.SerialiseIntoBinary(); channel.BasicPublish(exchange: "ServerSpinUp", routingKey: String.Format("ServerSpinUp.{0}" + joinMapByCharacterName.WorldServerID), basicProperties: null, body: body); } } //Wait 5 seconds before the first CheckMapInstanceStatus to give it time to spin up System.Threading.Thread.Sleep(5); readyForPlayersToConenct = await WaitForServerReadyToConnect(joinMapByCharacterName.MapInstanceID); } else if (joinMapByCharacterName.MapInstanceID > 0 && joinMapByCharacterName.MapInstanceStatus == 1) { //CheckMapInstanceStatus every 2 seconds for up to 90 seconds readyForPlayersToConenct = await WaitForServerReadyToConnect(joinMapByCharacterName.MapInstanceID); } else if (joinMapByCharacterName.MapInstanceID > 0 && joinMapByCharacterName.MapInstanceStatus == 2) { //The zone server is ready to connect to readyForPlayersToConenct = true; } Output = joinMapByCharacterName; return(new OkObjectResult(Output)); }