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); }
/// <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; }
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; } }
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); }
/// <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(); }
/// <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); }
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; } }
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; } }
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; } }
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); } }
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); } }
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); } }
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); } } } }
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(); }
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; } }
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)); }
public static void Subscribe <TMessage>(object subscriber, QueueType queue, Action <TMessage> action) where TMessage : class { MessagingCenter.Subscribe(subscriber, queue.ToString(), action); }
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); } }
public static void Send <TMessage, TArg>(QueueType queue, TMessage message, TArg arg) where TMessage : class { MessagingCenter.Send(message, queue.ToString(), arg); }