Exemplo n.º 1
0
        /// <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);
                }
            }));
        }
Exemplo n.º 2
0
 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;
     }
 }
Exemplo n.º 3
0
        //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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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();
        }
Exemplo n.º 10
0
        /// <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();
        }