Beispiel #1
0
        //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;
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        //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;
        }
Beispiel #4
0
        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));
        }