/// <summary> /// メッセージからメンションを検索し、含まれる場合はメンションを送信します。 /// </summary> /// <param name="message">メッセージ</param> /// <param name="roomId">メッセージが投稿されたルーム</param> /// <returns></returns> public async Task SendMention(string message, Guid roomId) { var mentions = MessageAnalyzer.GetMentionedUser(message); if (mentions.Contains("here")) { var usersBelongedToRoom = await _roomService.ReadUsersBelongedToRoom(roomId); await Task.WhenAll(usersBelongedToRoom.Select(async user => await _hubContext.Clients.User(user.ApplicationUser.Email) .SendAsync(SignalRMehod.SendMention, message))); return; } await Task.WhenAll(mentions.Select(async mention => { var userData = await _userService.ReadUser(mention, roomId); if (userData is not null) { await _hubContext.Clients.User(userData.ApplicationUser.Email) .SendAsync(SignalRMehod.SendMention, message); } })); }
private void testBtn_Click(object sender, EventArgs e) { for (int i = 0; i < messages.Length; i++) { resultsTxt.Text += messages[i] + " ### " + MessageAnalyzer.GetMessage(messages[i]).ToString() + Environment.NewLine; } }
//Needs be be triggered by an external source //Each invitiation needs to subscrib to a delegate in its fiend class. Then the friend class will trigger the OnMessageReceived. This is because receiving messages changes based on the implementation.(facebook , google , text ect) //When changes the status based on the analyzed sentiment then triggers status changed protected virtual void OnMessageReceived(string message) { _timer.Stop(); MessageAnalyzer analyzer = new MessageAnalyzer(message); var sentiment = analyzer.Sentiment; switch (sentiment) { case MessageSentiment.Yes: Status = InvitationStatus.Yes; break; case MessageSentiment.No: Status = InvitationStatus.No; break; case MessageSentiment.Unknown: Status = InvitationStatus.Unknown; break; } if (invitationStatusChanged != null) { invitationStatusChanged(Status, EventArgs.Empty); } }
public void GetMessageLightONShouldPass() { BaseMessage message = MessageAnalyzer.GetMessage("*1*1*11##"); Assert.AreEqual <WHAT>(WHAT.LightON, message.What); Assert.AreEqual <int>(message.Where.A, 1); Assert.AreEqual <int>(message.Where.PL, 1); Assert.AreEqual <WHO>(message.Who, WHO.Lighting); }
private void processMessage(string message) { Message analyzedMessage = MessageAnalyzer.Analyze(message); if (analyzedMessage.VectorCount == 2) { updatePlayersPositions(analyzedMessage.Vectors[0], analyzedMessage.Vectors[1]); } else if (analyzedMessage.VectorCount == 1) { updateBall(analyzedMessage.Vectors[0], analyzedMessage.Radius); } }
public void ConnectServer(string ip, ushort port) { Console.WriteLine("Connecting to {0}", ip); MessageAnalyzer ma = new MessageAnalyzer(); if (encrypt == EncryptionType.Normal) { ma.CryptoTransform = new CryptoTransformHeroes(); Console.WriteLine("Using encryption"); } client.Connect(jp, ip, port, ma); }
public void GetMessageDateAndTimeRequestTestShouldPass() { DeviceMessage message = MessageAnalyzer.GetMessage("*#13**22*1*2*3*15*16*4*5*6##") as DeviceMessage; Assert.AreEqual <WHAT>(message.What, WHAT.DateAndTimeRequest); Assert.AreEqual <WHO>(message.Who, WHO.OutsideInterface); Assert.AreEqual <int>(message.DateTime.Hour, 1); Assert.AreEqual <int>(message.DateTime.Minute, 2); Assert.AreEqual <int>(message.DateTime.Second, 3); Assert.AreEqual <int>(message.DateTime.Day, 4); Assert.AreEqual <int>(message.DateTime.Month, 5); Assert.AreEqual <int>(message.DateTime.Year, 6); }
public override CommandResult Execute() { var datagrams = Pcap.ReadFile(PcapFile). TrySelect(record => Tx.Network.PacketParser.Parse(record.Data.Skip(14).ToArray())). Where(p => p != null). Where(p => p.ProtocolType == ProtocolType.Udp). Select(p => p.ToUdpDatagram()). Where(p => p.UdpDatagramHeader.SourcePort == Port || p.UdpDatagramHeader.DestinationPort == Port). ToArray(); var cryptoBlob = SharedSecret.HexToBytes(); var decryptor = new MessageAnalyzer(cryptoBlob); foreach (var datagram in datagrams) { var messageInfo = decryptor.ReadMessage(datagram.UdpData.ToArray()); Console.WriteLine($"From: {datagram.UdpDatagramHeader.SourcePort}, To: {datagram.UdpDatagramHeader.DestinationPort}"); Console.WriteLine($"Message Type: {messageInfo.MessageType}"); Console.WriteLine($"Request Ack: {messageInfo.RequestAcknowledge}"); Console.WriteLine($"Version: {messageInfo.Version}"); Console.WriteLine($"ChannelId: {messageInfo.ChannelId}"); if (!String.IsNullOrEmpty(messageInfo.Json)) { Console.WriteLine($"Json: {messageInfo.Json}"); } else { Console.WriteLine($"Binary: {messageInfo.Data.ToHex()}"); } Console.WriteLine(); } return(CommandResult.Success); }
protected virtual async Task PrepareFailed(string error) { PreventCloseFlag = false; LastErrorMessage = error; var ma = new MessageAnalyzer(error); if (ma.NeedRelogin) { if (Query.Resign) { this.Information("登录已被强退,请重新登录并重新改签。"); Close(); } else { if (await OnReloginAsync().ConfigureAwait(true)) { await OnOrderContextInitializeAsync().ConfigureAwait(true); await PrepareOrderAsync().ConfigureAwait(true); } else { Close(); } } return; } if (ma.CaptchaError) { await OnCaptchaErrorAsync().ConfigureAwait(true); return; } if (ma.TicketNotEnough) { //排队人数过多/排队人数已超过剩余票数 //余票不足 //没有足够的票 RecentlySubmitFailedTokenStorageProvider.Instance.AddDisableTicketData(Train); } if (ma.NeedRollbackOrderCommitMethod) { Query.TemporaryDisableFastSubmitOrder = !Query.TemporaryDisableFastSubmitOrder; } if (ma.TicketNotEnough || ma.DataExpired || ma.ErrorElse || ma.NeedRetry) { //订单提交失败 if (AutoResumeAttached) { Error = SubmitOrderWorker.Error; OnInitSubmitFailed(); if (BreakOperation) { return; } } if (ma.DataExpired) { await OnInformationAsync("余票信息已经过期,请重新查询最新的余票信息 o(>_<)o ~~").ConfigureAwait(true); Close(); return; } if (ma.NeedRollbackOrderCommitMethod) { await OnInformationAsync("当前订单提交已失效,请返回后重试。").ConfigureAwait(true); Close(); return; } //自动禁用 if (await OnOrderResubmitAsync(error).ConfigureAwait(true)) { await PrepareOrderAsync().ConfigureAwait(true); } else { Close(); } return; } //身份信息有误/账户信息有误/订单要处理/订单排队中 new OrderNotification(Session, Query, Train, PassengerInTickets, ma.Message, null).Show(AppContext.HostForm); Close(); }
/// <summary> /// 订票失败 /// </summary> /// <param name="error">错误信息</param> /// <param name="isQueue">是排队后的信息还是排队前信息</param> protected virtual async Task OrderFailedAsync(string error, bool isQueue) { PreventCloseFlag = false; if (OrderEventArgs != null) { OrderEventArgs.OrderSubmitContext.OrderID = null; OrderEventArgs.OrderSubmitContext.Message = error; Session.OnOrderSubmitFailed(OrderEventArgs.OrderSubmitContext.Session, OrderEventArgs); } LastErrorMessage = error; if (error?.IndexOf("出票失败") >= 0) { ApiConfiguration.Instance.MinimalVcWaitTimeRunTime += 100; Trace.TraceInformation($"Increase MinimalVcWaitTimeRunTime to {ApiConfiguration.Instance.MinimalVcWaitTimeRunTime}"); } var ma = new MessageAnalyzer(error); if (ma.NeedRelogin) { if (await OnReloginAsync().ConfigureAwait(true)) { await OnOrderContextInitializeAsync().ConfigureAwait(true); await PrepareOrderAsync().ConfigureAwait(true); } else { Close(); } return; } if (ma.NeedVc) { this.ShowToast("请输入验证码"); await SetAllowOperationAsync(false, true).ConfigureAwait(true); VerifyCodeBox.SetIfNeedVc(SubmitOrderWorker.NeedVc); return; } if (ma.CaptchaError) { await OnCaptchaErrorAsync().ConfigureAwait(true); return; } if (ma.NeedRetry && AutoRetryCount++ < OrderConfiguration.Instance.AutoRetryCountLimit) { await OnOrderContextInitializeAsync().ConfigureAwait(true); await OnRequireRetryAsync().ConfigureAwait(true); return; } if (ma.TicketNotEnough) { //排队人数过多/排队人数已超过剩余票数 //余票不足 //没有足够的票 RecentlySubmitFailedTokenStorageProvider.Instance.AddDisableTicketData(Train); } if (ma.NeedRollbackOrderCommitMethod) { Query.TemporaryDisableFastSubmitOrder = !Query.TemporaryDisableFastSubmitOrder; } if (ma.TicketNotEnough || ma.ErrorElse || ma.NeedRetry) { //订单提交失败 if (AutoResumeAttached) { if (ma.TicketNotEnough) { if (isQueue) { OnQueueFailedNoTicket(); } else { OnSubmitFailed(); } } else { if (isQueue) { OnQueueFailedElse(); } else { OnSubmitFailed(); } } if (BreakOperation) { return; } } if (ma.NeedRollbackOrderCommitMethod) { await OnInformationAsync("当前订单提交已失效,请返回后重试。").ConfigureAwait(true); Close(); return; } //请求确认 if (await OnOrderResubmitAsync(error).ConfigureAwait(true)) { await PrepareOrderAsync().ConfigureAwait(true); } else { Close(); } return; } //身份信息有误/账户信息有误/订单要处理/订单排队中 UiUtility.PlaceFormAtCenter(new OrderNotification(Session, Query, Train, PassengerInTickets, ma.Message, null)); Close(); }