public bool SendDataToQueue(QueueType queueType, object data)
        {
            var result = true;

            try
            {
                if (_connection == null)
                {
                    _connection = _connectionFactory.CreateConnection();
                }

                var channel = _connection.CreateModel();
                channel.QueueDeclare(queueType.ToString(), false, false, false, null);
                var messageJson = Newtonsoft.Json.JsonConvert.SerializeObject(data);
                var message     = Encoding.UTF8.GetBytes(messageJson);

                channel.BasicPublish(exchange: String.Empty, routingKey: queueType.ToString(), basicProperties: null, body: message);
            }
            catch (Exception ex)
            {
                result = false;
            }

            return(result);
        }
예제 #2
0
        /// <summary>
        /// 佣兵招募冷却时间
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="recruitRule"></param>
        /// <returns></returns>
        public static void UpdateRecruitColdTime(string userID, RecruitRule recruitRule)
        {
            QueueType queueType = QueueType.ShiLiTiaoYi;

            if (recruitRule.RecruitType == RecruitType.ShiLiTiaoYi.ToInt())
            {
                queueType = QueueType.ShiLiTiaoYi;
            }
            else if (recruitRule.RecruitType == RecruitType.BaiLiTiaoYi.ToInt())
            {
                queueType = QueueType.BaiLiTiaoYi;
            }
            else if (recruitRule.RecruitType == RecruitType.Golden.ToInt())
            {
                queueType = QueueType.Golden;
            }
            var       cacheSet  = new GameDataCacheSet <UserQueue>();
            UserQueue userQueue = cacheSet.Find(userID, s => s.QueueType == queueType);

            if (userQueue == null)
            {
                userQueue           = new UserQueue();
                userQueue.QueueID   = Guid.NewGuid().ToString();
                userQueue.UserID    = userID;
                userQueue.QueueType = queueType;
                cacheSet.Add(userQueue, userID.ToInt());
            }
            userQueue.QueueName     = queueType.ToString();
            userQueue.Timing        = DateTime.Now;
            userQueue.TotalColdTime = recruitRule.CodeTime;
            userQueue.ColdTime      = recruitRule.CodeTime;
            userQueue.StrengNum     = 1;
            userQueue.IsSuspend     = false;
        }
예제 #3
0
        protected Guid ScheduleExportTableJob(string schemaName, string tableName, string path, QueueType queueType)
        {
            var queue = String.Format("Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                var user = SignInTestUser(context);

                var ef = new EntityFactory(context);
                var f = ef.LoadEntity<Federation>(Federation.AppSettings.FederationName);

                var format = new FileFormatFactory().GetFileFormatDescription("Jhu.Graywulf.Format.CsvFile");

                var source = new Jhu.Graywulf.Schema.Table()
                {
                    Dataset = user.GetUserDatabaseInstance(f.MyDBDatabaseVersion).GetDataset(),  // TODO: fix this
                    SchemaName = schemaName,
                    TableName = tableName
                };

                var etf = new ExportTableFactory(context);
                var ji = etf.ScheduleAsJob(
                    source,
                    path,
                    format,
                    queue,
                    "");

                ji.Save();

                return ji.Guid;
            }
        }
예제 #4
0
        public static CloudQueue GetCloudQueue(QueueType type, SourceType source)
        {
            //Queue eference Format
            string queueReference = source.ToString().ToLower() + "-" + type.ToString().ToLower();

            CloudQueueClient queueClient = GetStorageAccount().CreateCloudQueueClient();
            CloudQueue       queue       = queueClient.GetQueueReference(queueReference);

            queue.CreateIfNotExist();
            return(queue);
        }
예제 #5
0
        /// <summary>
        /// Start the Sender
        /// This runs on a separate thread that keeps open the RabbitMQ connection
        /// so it can be reused for every byte[] received from IClientConnection
        /// </summary>
        private void StartSending()
        {
            new Thread(() => {
                Thread.CurrentThread.Name = $"{QueueName} Publisher";
                var objFactory            = new ConnectionFactory()
                {
                    HostName = "test.crazyzone.be"
                };
                using (var objConn = objFactory.CreateConnection()) {
                    using (var objChannel = objConn.CreateModel()) {
                        objChannel.ExchangeDeclare(exchange: QueueType.ToString(), type: "fanout");
                        objChannel.QueueDeclare(QueueName, false, false, !Shared);

                        objConn.ConnectionShutdown += Shutdown;
                        objChannel.ModelShutdown   += Shutdown;

                        while (!_objCancelationSource.IsCancellationRequested)
                        {
                            try {
                                var objFrame = _lstTransmitQueue.Take(_objCancelationToken);
                                objChannel.BasicPublish(
                                    exchange: QueueType.ToString(),
                                    routingKey: QueueName,
                                    basicProperties: null,
                                    body: objFrame.GetBytes()
                                    );
                            } catch (Exception ex) {
                                Log.Error($"Failed sending data on {QueueName}: {ex.Message}, closing connection");
                            }
                        }

                        //Connection interrupted
                        objConn.ConnectionShutdown -= Shutdown;
                        objChannel.ModelShutdown   -= Shutdown;
                    }
                }
            })
            {
                IsBackground = true
            }.Start();
        }
예제 #6
0
        /// <summary>
        /// Listens on the Receiver Queue for any messages
        ///
        /// When data is received the Rx event is raised
        /// </summary>
        private void StartListening(string pName)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "test.crazyzone.be"
            };
            var connection = factory.CreateConnection();
            var channel    = connection.CreateModel();

            channel.ExchangeDeclare(exchange: QueueType.ToString(), type: "fanout");
            channel.QueueDeclare(pName, false, false, !Shared);
            channel.QueueBind(pName, QueueType.ToString(), pName);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Shutdown += Consumer_Shutdown;
            consumer.Received += (model, ea) => {
                Task.Run(() => {
                    Rx?.Invoke(this, new RoutingFrame(ea.Body));
                });
            };
            channel.BasicConsume(queue: pName, autoAck: true, consumer: consumer);
        }
예제 #7
0
        protected Guid ScheduleQueryJob(string query, QueueType queueType)
        {
            var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var f = new SqlQueryFactory(context);

                var q = f.CreateQuery(query);
                var ji = f.ScheduleAsJob(q, queue, "testjob");

                ji.Save();

                return ji.Guid;
            }
        }
예제 #8
0
        protected Guid ScheduleMirroDatabaseJob(QueueType queueType)
        {
            var queue = String.Format("Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var ef = new EntityFactory(context);
                var jd = ef.LoadEntity<JobDefinition>(Cluster.AppSettings.ClusterName, typeof(MirrorDatabaseJob).Name);

                var ji = jd.CreateJobInstance(queue, ScheduleType.Queued);

                ji.Parameters["DatabaseVersionName"].SetValue("Graywulf.VOServices.SkyQuery.Galex.STAT");

                ji.Save();

                return ji.Guid;
            }
        }
예제 #9
0
        protected Guid ScheduleExportTableJob(string schemaName, string tableName, string path, QueueType queueType)
        {
            var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                var user = SignInTestUser(context);

                var ef = new EntityFactory(context);
                var federation = ef.LoadEntity<Federation>(Registry.AppSettings.FederationName);
                var format = FileFormatFactory.Create(federation.FileFormatFactory).GetFileFormatDescription(typeof(Jhu.Graywulf.Format.DelimitedTextDataFile).FullName);

                var mydbds = federation.MyDBDatabaseVersion.GetUserDatabaseInstance(user).GetDataset();

                var source = new Jhu.Graywulf.Schema.Table()
                {
                    Dataset = mydbds,  // TODO: fix this
                    DatabaseName = mydbds.DatabaseName,
                    SchemaName = schemaName,
                    TableName = tableName
                };

                var etf = new ExportTablesFactory(context);
                var ji = etf.ScheduleAsJob(
                    federation,
                    new TableOrView[] {source },
                    path,
                    format,
                    queue,
                    "");

                ji.Save();

                return ji.Guid;
            }
        }
예제 #10
0
        protected Guid ScheduleTestJob(TimeSpan delayPeriod, JobType jobType, QueueType queueType)
        {
            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var ef = new EntityFactory(context);
                var jd = ef.LoadEntity <JobDefinition>(Registry.AppSettings.ClusterName, Registry.Constants.SharedDomainName, Registry.Constants.SharedFederationName, typeof(Jhu.Graywulf.Jobs.Test.TestJob).Name);

                var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

                JobInstance job = jd.CreateJobInstance(queue, Jhu.Graywulf.Registry.ScheduleType.Queued);

                job.Parameters["DelayPeriod"].Value = (int)delayPeriod.TotalMilliseconds;
                job.Parameters["TestMethod"].Value  = jobType.ToString();

                job.Name = String.Format("{0}_{1}", "test", DateTime.Now.ToString("yyMMddHHmmssff"));

                job.Save();

                return(job.Guid);
            }
        }
예제 #11
0
        protected Guid ScheduleExportTableJob(string schemaName, string tableName, string path, QueueType queueType)
        {
            var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                var user = SignInTestUser(context);

                var ef         = new EntityFactory(context);
                var federation = ef.LoadEntity <Federation>(Registry.AppSettings.FederationName);
                var format     = FileFormatFactory.Create(federation.FileFormatFactory).GetFileFormatDescription(typeof(Jhu.Graywulf.Format.DelimitedTextDataFile).FullName);

                var mydbds = federation.MyDBDatabaseVersion.GetUserDatabaseInstance(user).GetDataset();

                var source = new Jhu.Graywulf.Schema.Table()
                {
                    Dataset      = mydbds, // TODO: fix this
                    DatabaseName = mydbds.DatabaseName,
                    SchemaName   = schemaName,
                    TableName    = tableName
                };

                var etf = new ExportTablesFactory(context);
                var ji  = etf.ScheduleAsJob(
                    federation,
                    new TableOrView[] { source },
                    path,
                    format,
                    queue,
                    "");

                ji.Save();

                return(ji.Guid);
            }
        }
예제 #12
0
        protected Guid ScheduleMirroDatabaseJob(QueueType queueType)
        {
            var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var ef = new EntityFactory(context);
                var jd = ef.LoadEntity <JobDefinition>(Registry.AppSettings.ClusterName, Registry.Constants.SharedDomainName, Registry.Constants.SharedFederationName, typeof(MirrorDatabaseJob).Name);

                var ji = jd.CreateJobInstance(queue, ScheduleType.Queued);

                ji.Parameters["DatabaseVersionName"].Value = "DatabaseVersion:Graywulf.VOServices.SkyQuery.Galex.STAT";

                ji.Save();

                return(ji.Guid);
            }
        }
예제 #13
0
        private async void connection_OnMessageReceived(object sender, object message)
        {
            if (message is GameDTO)
            {
                GameDTO game = message as GameDTO;
                Console.WriteLine("Message Type:" + game.GameState);
                switch (game.GameState)
                {
                case "START_REQUESTED":
                    break;

                case "FAILED_TO_START":
                    Console.WriteLine("Failed to Start!");
                    break;

                case "CHAMP_SELECT":
                    firstTimeInCustom   = true;
                    firstTimeInQueuePop = true;
                    if (firstTimeInLobby)
                    {
                        firstTimeInLobby = false;
                        object obj = await connection.SetClientReceivedGameMessage(game.Id, "CHAMP_SELECT_CLIENT");

                        if (QueueType != QueueTypes.ARAM)
                        {
                            int Spell1;
                            int Spell2;
                            var random    = new Random();
                            var spellList = new List <int> {
                                13, 6, 7, 1, 11, 21, 12, 3, 14, 2, 4
                            };

                            int index  = random.Next(spellList.Count);
                            int index2 = random.Next(spellList.Count);

                            int randomSpell1 = spellList[index];
                            int randomSpell2 = spellList[index2];

                            if (randomSpell1 == randomSpell2)
                            {
                                int index3 = random.Next(spellList.Count);
                                randomSpell2 = spellList[index3];
                            }

                            Spell1 = Convert.ToInt32(randomSpell1);
                            Spell2 = Convert.ToInt32(randomSpell2);

                            await connection.SelectSpells(Spell1, Spell2);

                            var randAvailableChampsArray = myChampions.Shuffle();
                            await connection.SelectChampion(randAvailableChampsArray.First(champ => champ.Owned || champ.FreeToPlay).ChampionId);

                            await connection.ChampionSelectCompleted();
                        }
                        break;
                    }
                    else
                    {
                        break;
                    }

                case "PRE_CHAMP_SELECT":
                    updateStatus(msgStatus.INFO, "Champion selection in progress");
                    break;

                case "POST_CHAMP_SELECT":
                    firstTimeInLobby = false;
                    if (firstTimeInPostChampSelect)
                    {
                        firstTimeInPostChampSelect = false;
                        updateStatus(msgStatus.INFO, "Champion selection is done, waiting for game to start");
                        break;
                    }
                    else
                    {
                        break;
                    }

                case "IN_QUEUE":
                    updateStatus(msgStatus.INFO, "In Queue");
                    break;

                case "TERMINATED":
                    updateStatus(msgStatus.INFO, "Re-entering queue");
                    firstTimeInPostChampSelect = true;
                    firstTimeInQueuePop        = true;
                    break;

                case "JOINING_CHAMP_SELECT":
                    if (firstTimeInQueuePop && game.StatusOfParticipants.Contains("1"))
                    {
                        updateStatus(msgStatus.INFO, "Accepted Queue");
                        firstTimeInQueuePop = false;
                        firstTimeInLobby    = true;
                        object obj = await connection.AcceptPoppedGame(true);

                        break;
                    }
                    else
                    {
                        break;
                    }

                default:
                    updateStatus(msgStatus.INFO, "[DEFAULT]" + game.GameStateString);
                    break;
                }
            }
            else if (message.GetType() == typeof(TradeContractDTO))
            {
                TradeContractDTO tradeDto = message as TradeContractDTO;
                if (tradeDto != null)
                {
                    switch (tradeDto.State)
                    {
                    case "PENDING":
                        if (tradeDto != null)
                        {
                            object obj = await connection.AcceptTrade(tradeDto.RequesterInternalSummonerName, (int)tradeDto.RequesterChampionId);

                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            else if (message is PlayerCredentialsDto)
            {
                firstTimeInPostChampSelect = true;
                PlayerCredentialsDto dto       = message as PlayerCredentialsDto;
                ProcessStartInfo     startInfo = new ProcessStartInfo();
                startInfo.WorkingDirectory = FindLoLExe();
                startInfo.FileName         = "League of Legends.exe";
                startInfo.Arguments        = "\"8394\" \"LoLLauncher.exe\" \"\" \"" + dto.ServerIp + " " +
                                             dto.ServerPort + " " + dto.EncryptionKey + " " + dto.SummonerId + "\"";
                updateStatus(msgStatus.INFO, "Launching League of Legends");

                new Thread(() =>
                {
                    exeProcess = Process.Start(startInfo);
                    exeProcess.EnableRaisingEvents = true;
                    exeProcess.Exited += new EventHandler(exeProcess_Exited);
                    while (exeProcess.MainWindowHandle == IntPtr.Zero)
                    {
                    }
                    Console.WriteLine(exeProcess.MainWindowTitle);
                    Thread.Sleep(1000);
                    App.gameMask.addGame(info.username, info.region.ToString(), exeProcess);
                }).Start();
            }
            else if (!(message is GameNotification) && !(message is SearchingForMatchNotification))
            {
                if (message is EndOfGameStats)
                {
                    object obj4 = await connection.ackLeaverBusterWarning();

                    object obj5 = await connection.callPersistenceMessaging(new SimpleDialogMessageResponse()
                    {
                        AccountID = loginDataPacket.AllSummonerData.Summoner.SumId,
                        MsgID     = loginDataPacket.AllSummonerData.Summoner.SumId,
                        Command   = "ack"
                    });

                    MatchMakerParams matchParams = new MatchMakerParams();
                    checkAndUpdateQueueType();
                    if (QueueType == QueueTypes.INTRO_BOT)
                    {
                        matchParams.BotDifficulty = "INTRO";
                    }
                    else if (QueueType == QueueTypes.BEGINNER_BOT)
                    {
                        matchParams.BotDifficulty = "EASY";
                    }
                    else if (QueueType == QueueTypes.MEDIUM_BOT)
                    {
                        matchParams.BotDifficulty = "MEDIUM";
                    }
                    if (QueueType != 0)
                    {
                        matchParams.QueueIds = new Int32[1] {
                            (int)QueueType
                        };
                        SearchingForMatchNotification m = await connection.AttachToQueue(matchParams);

                        if (m.PlayerJoinFailures == null)
                        {
                            updateStatus(msgStatus.INFO, "In Queue: " + QueueType.ToString());
                        }
                        else
                        {
                            foreach (var failure in m.PlayerJoinFailures)
                            {
                                if (failure.ReasonFailed == "LEAVER_BUSTED")
                                {
                                    m_accessToken = failure.AccessToken;
                                    if (failure.LeaverPenaltyMillisRemaining > m_leaverBustedPenalty)
                                    {
                                        m_leaverBustedPenalty = failure.LeaverPenaltyMillisRemaining;
                                    }
                                }
                                Console.WriteLine("Start Failed:" + failure.ReasonFailed);
                            }

                            if (string.IsNullOrEmpty(m_accessToken))
                            {
                                foreach (var failure in m.PlayerJoinFailures)
                                {
                                    updateStatus(msgStatus.INFO, "Dodge Remaining Time: " + Convert.ToString((failure.DodgePenaltyRemainingTime / 1000 / (float)60)).Replace(",", ":") + "...");
                                }
                            }
                            else
                            {
                                double minutes = m_leaverBustedPenalty / 1000 / (float)60;
                                updateStatus(msgStatus.INFO, "Waiting out leaver buster: " + minutes + " minutes!");
                                t = TimeSpan.FromMinutes((int)minutes);
                                //Tick(); -> Enable to get visual time remaining
                                Thread.Sleep(TimeSpan.FromMilliseconds(m_leaverBustedPenalty));
                                m = await connection.AttachToLowPriorityQueue(matchParams, m_accessToken);

                                if (m.PlayerJoinFailures == null)
                                {
                                    updateStatus(msgStatus.INFO, "Succesfully joined lower priority queue!");
                                }
                                else
                                {
                                    updateStatus(msgStatus.ERROR, "There was an error in joining lower priority queue.\nDisconnecting.");
                                    connection.Disconnect();
                                }
                            }
                        }
                    }
                }
                else if (message.ToString().Contains("EndOfGameStats"))
                {
                    EndOfGameStats eog = new EndOfGameStats();
                    exeProcess.Exited -= new EventHandler(exeProcess_Exited);
                    exeProcess.Kill();
                    Thread.Sleep(500);
                    if (exeProcess.Responding)
                    {
                        Process.Start("taskkill /F /IM \"League of Legends.exe\"");
                    }
                    loginDataPacket = await connection.GetLoginDataPacketForUser();

                    if (type == RotationType.SmurfDone)
                    {
                        if (info.desiredLevel > loginDataPacket.AllSummonerData.SummonerLevel.Level)
                        {
                            connection_OnMessageReceived(sender, eog);
                        }
                        else
                        {
                            connection.Disconnect();
                        }
                    }
                    else
                    {
                        connection_OnMessageReceived(sender, eog);
                    }
                }
            }
        }
예제 #14
0
        private void connection_OnLogin(object sender, string username, string ipAddress)
        {
            new Thread(async() =>
            {
                App.gameMask.findAndKillHflWindow(info.username, info.region.ToString());

                loginDataPacket = await connection.GetLoginDataPacketForUser();

                #region createSummoner
                if (loginDataPacket.AllSummonerData == null)
                {
                    Random random       = new Random();
                    string summonerName = info.username;
                    if (summonerName.Length > 16)
                    {
                        summonerName = summonerName.Substring(0, 12) + new Random().Next(1000, 9999).ToString();
                    }
                    await connection.CreateDefaultSummoner(summonerName);
                    updateStatus(msgStatus.INFO, "Created Summoner: " + summonerName);
                }
                #endregion

                loginDataPacket = await connection.GetLoginDataPacketForUser();

                #region registerMessages
                await connection.Subscribe("bc", loginDataPacket.AllSummonerData.Summoner.AcctId);
                await connection.Subscribe("cn", loginDataPacket.AllSummonerData.Summoner.AcctId);
                await connection.Subscribe("gn", loginDataPacket.AllSummonerData.Summoner.AcctId);
                #endregion

                #region ackDialogBusterWarning
                await connection.ackLeaverBusterWarning();
                await connection.callPersistenceMessaging(new SimpleDialogMessageResponse()
                {
                    AccountID = loginDataPacket.AllSummonerData.Summoner.SumId,
                    MsgID     = loginDataPacket.AllSummonerData.Summoner.SumId,
                    Command   = "ack"
                });
                #endregion

                #region fetchSummonerData
                info.summonerId     = loginDataPacket.AllSummonerData.Summoner.SumId;
                info.currentLevel   = loginDataPacket.AllSummonerData.SummonerLevel.Level;
                info.currentIp      = loginDataPacket.IpBalance;
                info.expToNextLevel = loginDataPacket.AllSummonerData.SummonerLevel.ExpToNextLevel;;
                info.currentXp      = loginDataPacket.AllSummonerData.SummonerLevelAndPoints.ExpPoints;
                info.currentRp      = loginDataPacket.RpBalance;
                info.summonerName   = loginDataPacket.AllSummonerData.Summoner.Name;
                myChampions         = await connection.GetAvailableChampions();
                await connection.CreatePlayer();
                sessionManager.smurfStart(info.username, info.region, info.currentXp, info.currentIp, info.currentLevel, info.expToNextLevel);
                updateStatus(msgStatus.INFO, "Logged in as " + info.summonerName + " @ level " + info.currentLevel);
                #endregion

                #region checkReconnectState
                if (loginDataPacket.ReconnectInfo != null && loginDataPacket.ReconnectInfo.Game != null)
                {
                    connection_OnMessageReceived(sender, loginDataPacket.ReconnectInfo.PlayerCredentials);
                    return;
                }
                #endregion

                #region startSoloSequence
                if (type == RotationType.SmurfDone)
                {
                    if (info.desiredLevel <= loginDataPacket.AllSummonerData.SummonerLevel.Level)
                    {
                        connection.Disconnect();
                        return;
                    }
                }

                object obj4 = await connection.ackLeaverBusterWarning();
                object obj5 = await connection.callPersistenceMessaging(new SimpleDialogMessageResponse()
                {
                    AccountID = loginDataPacket.AllSummonerData.Summoner.SumId,
                    MsgID     = loginDataPacket.AllSummonerData.Summoner.SumId,
                    Command   = "ack"
                });
                MatchMakerParams matchParams = new MatchMakerParams();
                checkAndUpdateQueueType();
                if (QueueType == QueueTypes.INTRO_BOT)
                {
                    matchParams.BotDifficulty = "INTRO";
                }
                else if (QueueType == QueueTypes.BEGINNER_BOT)
                {
                    matchParams.BotDifficulty = "EASY";
                }
                else if (QueueType == QueueTypes.MEDIUM_BOT)
                {
                    matchParams.BotDifficulty = "MEDIUM";
                }
                updateStatus(msgStatus.INFO, QueueType.ToString());
                if (QueueType != 0)
                {
                    matchParams.QueueIds = new int[1] {
                        (int)QueueType
                    };
                    SearchingForMatchNotification m = await connection.AttachToQueue(matchParams);

                    if (m.PlayerJoinFailures == null)
                    {
                        updateStatus(msgStatus.INFO, "In Queue: " + QueueType.ToString());
                    }
                    else
                    {
                        foreach (var failure in m.PlayerJoinFailures)
                        {
                            if (failure.ReasonFailed == "LEAVER_BUSTED")
                            {
                                m_accessToken = failure.AccessToken;
                                if (failure.LeaverPenaltyMillisRemaining > m_leaverBustedPenalty)
                                {
                                    m_leaverBustedPenalty = failure.LeaverPenaltyMillisRemaining;
                                }
                            }
                        }

                        if (String.IsNullOrEmpty(m_accessToken))
                        {
                            foreach (var failure in m.PlayerJoinFailures)
                            {
                                updateStatus(msgStatus.INFO, "Dodge Remaining Time: " + Convert.ToString((failure.DodgePenaltyRemainingTime / 1000 / (float)60)).Replace(",", ":") + "...");
                            }
                        }
                        else
                        {
                            double minutes = m_leaverBustedPenalty / 1000 / (float)60;
                            updateStatus(msgStatus.INFO, "Waiting out leaver buster: " + minutes + " minutes!");
                            t = TimeSpan.FromMinutes((int)minutes);
                            //Tick(); ->Visual Timer
                            Thread.Sleep(TimeSpan.FromMilliseconds(m_leaverBustedPenalty));
                            m = await connection.AttachToLowPriorityQueue(matchParams, m_accessToken);
                            if (m.PlayerJoinFailures == null)
                            {
                                updateStatus(msgStatus.INFO, "Succesfully joined lower priority queue!");
                            }
                            else
                            {
                                updateStatus(msgStatus.ERROR, "There was an error in joining lower priority queue.\nDisconnecting.");
                                connection.Disconnect();
                            }
                        }
                    }
                }
                #endregion
            }).Start();
        }
예제 #15
0
        protected Guid ScheduleTestJob(TimeSpan delayPeriod, JobType jobType, QueueType queueType)
        {
            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var ef = new EntityFactory(context);
                var jd = ef.LoadEntity<JobDefinition>(Cluster.AppSettings.ClusterName, typeof(Jhu.Graywulf.Jobs.Test.TestJob).Name);

                var queue = String.Format("Graywulf.Controller.Controller.{0}", queueType.ToString());

                JobInstance job = jd.CreateJobInstance(queue, Jhu.Graywulf.Registry.ScheduleType.Queued);

                job.Parameters["DelayPeriod"].SetValue((int)delayPeriod.TotalMilliseconds);
                job.Parameters["TestMethod"].SetValue(jobType.ToString());

                job.Name = String.Format("{0}_{1}", "test", DateTime.Now.ToString("yyMMddHHmmssff"));

                job.Save();

                return job.Guid;
            }
        }
예제 #16
0
        public async Task <LeagueListDto> SelectMasterLeagueByQueue(QueueType queueType)
        {
            var request = new RestRequest($"league/v3/masterleagues/by-queue/{queueType.ToString()}", Method.GET);

            return(await base.ExecuteGet <LeagueListDto>(request));
        }
예제 #17
0
 public static void Subscribe <TMessage>(object subscriber, QueueType queue, Action <TMessage> action)
     where TMessage : class
 {
     MessagingCenter.Subscribe(subscriber, queue.ToString(), action);
 }
예제 #18
0
        protected Guid ScheduleQueryJob(string query, QueueType queueType)
        {
            var queue = String.Format("QueueInstance:Graywulf.Controller.Controller.{0}", queueType.ToString());

            using (var context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit))
            {
                SignInTestUser(context);

                var f = new SqlQueryFactory(context);

                var q  = f.CreateQuery(query);
                var ji = f.ScheduleAsJob(q, queue, "testjob");

                ji.Save();

                return(ji.Guid);
            }
        }
예제 #19
0
 public static void Send <TMessage, TArg>(QueueType queue, TMessage message, TArg arg)
     where TMessage : class
 {
     MessagingCenter.Send(message, queue.ToString(), arg);
 }