public void ConnectToServer(IPAddress ip, int port)
    {
        if (_webSocketConnection != null) return;
        
        _webSocketConnection = new WebSocket($"ws://{ip}:{port}");

        _webSocketConnection.OnOpen += (sender, args) =>
        {
            Connected?.Invoke();
        };
        
        _webSocketConnection.OnClose += (sender, args) =>
        {
            Disconnected?.Invoke();
        };
        
        _webSocketConnection.OnMessage += (sender, args) =>
        {
            if (args.IsText)
            {
                ReceivedTextMessage?.Invoke(args.Data);
            }
            else if (args.IsBinary)
            {
                ReceivedByteArrayMessage?.Invoke(args.RawData);
            }
        };

        _webSocketConnection.OnError += (sender, args) =>
        {
            ReceivedError?.Invoke();
        };
        
        _webSocketConnection.Connect();
    }
Ejemplo n.º 2
0
        Result HandleTextMessage(Request pendingRequest)
        {
            if (!(pendingRequest is MessageRequest textMessageRequest))
            {
                return(Result.Fail($"Request received is not valid for this operation ({pendingRequest.Type})."));
            }

            ReceivedTextMessage?.Invoke(this, textMessageRequest);
            return(Result.Ok());
        }
Ejemplo n.º 3
0
        public void ParseContact_MobileWithForeignCountryCode_CountryCodePreserved()
        {
            var sut     = new ContactsViewModel(null, null);
            var message = new ReceivedTextMessage()
            {
                Sender = "+67716475048", Text = "AGM Kavinda 9"
            };

            var actual = sut.ParseContact(message);

            actual.Should().NotBeNull();
            actual.Batch.Should().Be(9);
            actual.Mobile.Should().Be("+67716475048");
            actual.Name.Should().Be("Kavinda");
        }
Ejemplo n.º 4
0
        public void ParseContact_NoBatch_ReadSenderAndName()
        {
            var sut     = new ContactsViewModel(null, null);
            var message = new ReceivedTextMessage()
            {
                Sender = "0716475048", Text = "AGM Kavinda Gayashan  "
            };

            var actual = sut.ParseContact(message);

            actual.Should().NotBeNull();
            actual.Batch.Should().Be(0);
            actual.Mobile.Should().Be("0716475048");
            actual.Name.Should().Be("Kavinda Gayashan");
        }
Ejemplo n.º 5
0
        public void ParseContact_EmptyText_SenderRead()
        {
            var sut     = new ContactsViewModel(null, null);
            var message = new ReceivedTextMessage()
            {
                Sender = "0716475048", Text = ""
            };

            var actual = sut.ParseContact(message);

            actual.Should().NotBeNull();
            actual.Batch.Should().Be(0);
            actual.Mobile.Should().Be("0716475048");
            actual.Name.Should().BeEmpty();
        }
Ejemplo n.º 6
0
        //[InlineData("0716475048", " AgM  Kavinda  09 Additional data")]
        //[InlineData("0716475048", " AgM  Kavinda  09 Additional data 123")]
        public void ParseContact(string sender, string text)
        {
            var sut     = new ContactsViewModel(null, null);
            var message = new ReceivedTextMessage()
            {
                Sender = sender, Text = text
            };

            var actual = sut.ParseContact(message);

            actual.Should().NotBeNull();
            actual.Batch.Should().Be(9);
            actual.Mobile.Should().Be("0716475048");
            actual.Name.Should().Be("Kavinda");
        }
Ejemplo n.º 7
0
        public Contact ParseContact(ReceivedTextMessage message)
        {
            var text = message.Text.Trim();

            if (string.IsNullOrEmpty(text))
            {
                return new Contact {
                           Mobile = message.Sender
                }
            }
            ;

            var name  = string.Empty;
            int batch = 0;

            try
            {
                text = text.Remove(0, 3).Trim();

                var indexOfBatch = text.IndexOfAny(_digits);
                if (indexOfBatch > 0)
                {
                    name = text.Substring(0, indexOfBatch).Trim();
                    int.TryParse(text.Substring(indexOfBatch), out batch);
                }
                else
                {
                    name = text;
                }
            }
            catch
            {
                // ignore Parse errors. Just use the sender
            }

            var contact = new Contact
            {
                Batch  = batch,
                Mobile = message.Sender,
                Name   = name
            };

            return(contact);
        }
Ejemplo n.º 8
0
        public async Task <bool> OnTextMessageReceived(object sender, TextMessageReceivedEventArgs e)
        {
            _logger.LogDebug(XmlConvert.SerializeObject(e));

            var msg = new ReceivedTextMessage();

            msg.Content      = e.Content;
            msg.From         = e.FromUserName;
            msg.To           = e.ToUserName;
            msg.ReceivedTime = new DateTimeOffset(WeixinTimestampHelper.ToUtcTime(e.CreateTimeStr));
            _db.ReceivedTextMessages.Add(msg);
            var saveResult = await _db.SaveChangesAsync();

            if (saveResult > 0)
            {
                _logger.LogDebug($"已将微信文本消息存入数据库。Result:{saveResult}, From:{msg.From}, To:{msg.To}, Time:{msg.ReceivedTime}, Content:{msg.Content}");
            }
            _logger.LogDebug($"微信文本消息在数据库中共{_db.ReceivedTextMessages.ToList().Count()}条记录。");


            var messageHandler  = sender as WeixinMessageHandler;
            var responseMessage = new ResponseMessageText();
            {
                var result = new StringBuilder();
                result.AppendFormat("您刚才发送了文本信息:{0}", e.Content);

                responseMessage.FromUserName = e.ToUserName;
                responseMessage.ToUserName   = e.FromUserName;
                responseMessage.Content      = result.ToString();
            }
            await messageHandler.WriteAsync(responseMessage);

            _logger.LogDebug(XmlConvert.SerializeObject(responseMessage));

            return(true);
        }