private async void ClientOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            var messageInfo = message.ToChatMessage();

            OnMessageReceived?.Invoke(messageInfo);

            try
            {
                var response = _messagesProcessor.ProcessMessage(messageInfo);
                if (!string.IsNullOrEmpty(response))
                {
                    await _client.SendTextMessageAsync(message.Chat.Id, response);
                }
            }
            catch (Exception e)
            {
                OnErrorOccured?.Invoke(e.Message);
            }
        }
예제 #2
0
 public void OnMessageReceivedCallback(string userName, string msg)
 {
     if (OnMessageReceived != null)
     {
         OnMessageReceived.Invoke(userName, msg);
     }
 }
예제 #3
0
 protected void ChatHandler(NeutronPlayer player, ChatMode packet, MatchmakingTo matchmakingTo, int viewId, string message)
 {
     if (OnMessageReceived.Invoke(player, message))
     {
         using (NeutronStream stream = Neutron.PooledNetworkStreams.Pull())
         {
             NeutronStream.IWriter writer = stream.Writer;
             writer.WritePacket((byte)Packet.Chat);
             writer.Write(message);
             if (packet == ChatMode.Global)
             {
                 player.Write(writer, TargetTo.All, matchmakingTo, Protocol.Tcp);
             }
             else if (packet == ChatMode.Private)
             {
                 if (MatchmakingHelper.Server.GetPlayer(viewId, out NeutronPlayer playerFound))
                 {
                     playerFound.Write(player, writer, TargetTo.Me, MatchmakingTo.Me, Protocol.Tcp);
                 }
                 else
                 {
                     player.Error(Packet.Chat, "Player not found!", ErrorMessage.PLAYER_NOT_FOUND);
                 }
             }
         }
     }
 }
 public void Listening(TimeSpan timeout, CancellationToken cancellationToken)
 {
     Connect();
     while (true)
     {
         string topic = string.Empty;
         try
         {
             var buffer = _sub.ReceiveMultipartMessage();
             topic = buffer[0].ConvertToString();
             string header  = buffer[1].ConvertToString();
             var    body    = buffer[2].ToByteArray();
             var    _header = System.Text.Json.JsonSerializer.Deserialize <Dictionary <string, string> >(header);
             _header.Add(DotNetCore.CAP.Messages.Headers.Group, _queueName);
             var message = new TransportMessage(_header, body);
             OnMessageReceived?.Invoke(_sub, message);
         }
         catch (Exception ex)
         {
             OnLog?.Invoke(this, new LogMessageEventArgs()
             {
                 LogType = MqLogType.ExceptionReceived, Reason = $"{_queueName}-{topic}-{ex.Message}"
             });
         }
         cancellationToken.ThrowIfCancellationRequested();
         cancellationToken.WaitHandle.WaitOne(timeout);
     }
 }
예제 #5
0
        /// <summary>
        /// 订阅消息
        /// </summary>
        /// <typeparam name="TMessage"></typeparam>
        public void Subscribe <TMessage>() where TMessage : class
        {
            (string QueueName, string RoutingKey, string ExchangeName)queue = GetQueue(typeof(TMessage));
            IModel channel = CreateQueue(queue.ExchangeName, queue.QueueName, queue.RoutingKey);
            EventingBasicConsumer _consumer = new EventingBasicConsumer(channel);

            _consumer.Received += async(ch, ea) =>
            {
                string   messageBody = Encoding.UTF8.GetString(ea.Body);
                TMessage message     = JsonConvert.DeserializeObject <TMessage>(messageBody);
                foreach (Type handleType in GetHandlers(typeof(TMessage)))
                {
                    if (OnMessageReceived != null)
                    {
                        OnMessageReceived?.Invoke(ea, new MessageContext(handleType, message, messageBody));
                    }
                    else
                    {
                        IRabbitMQBusHandler <TMessage> handle = Activator.CreateInstance(handleType) as IRabbitMQBusHandler <TMessage>;
                        await handle.Handle(message);
                    }
                }
                channel.BasicAck(ea.DeliveryTag, false);
            };
            channel.BasicConsume(queue.QueueName, false, _consumer);
            Console.WriteLine($"\t订阅\tExchange::{queue.ExchangeName}\tRoutingKey::{queue.RoutingKey}");
        }
예제 #6
0
 /// <summary>
 /// 自定订阅
 /// </summary>
 public void AutoSubscribe()
 {
     Console.WriteLine("开启自动订阅::BEGIN");
     foreach (Type messageType in GetQueues())
     {
         (string QueueName, string RoutingKey, string ExchangeName)queue = GetQueue(messageType);
         IModel channel = CreateQueue(queue.ExchangeName, queue.QueueName, queue.RoutingKey);
         EventingBasicConsumer _consumer = new EventingBasicConsumer(channel);
         _consumer.Received += (ch, ea) =>
         {
             string messageBody = Encoding.UTF8.GetString(ea.Body);
             object message     = JsonConvert.DeserializeObject(messageBody, messageType);
             foreach (Type handleType in GetHandlers(messageType))
             {
                 if (OnMessageReceived != null)
                 {
                     OnMessageReceived?.Invoke(ea, new MessageContext(handleType, message, messageBody));
                 }
                 else
                 {
                     object     handle = Activator.CreateInstance(handleType);
                     MethodInfo method = handleType.GetMethod(nameof(IRabbitMQBusHandler.Handle));
                     Task       task   = (Task)method.Invoke(handle, new[] { message });
                     task.GetAwaiter().GetResult();
                 }
             }
             channel.BasicAck(ea.DeliveryTag, false);
         };
         channel.BasicConsume(queue.QueueName, false, _consumer);
         Console.WriteLine($"\t订阅\tExchange::{queue.ExchangeName}\tRoutingKey::{queue.RoutingKey}");
     }
     Console.WriteLine("开启自动订阅::END");
 }
예제 #7
0
        void Tick(object state)
        {
            var h   = OnMessageReceived.GetInvocationList().ToArray();
            var awt = h.Select(d =>
            {
                var dd = (MessageReceivedEventHandler)d;
                return(dd?.Invoke(new SlackMessage
                {
                    User = new SlackUser
                    {
                        Id = "TestUser",
                        Name = "Test",
                    },
                    Timestamp = DateTime.Now.Ticks,
                    Text = "A message",
                    MentionsBot = false,
                    ChatHub = new SlackChatHub
                    {
                        Name = "Hob",
                        Id = "HHOD",
                        Members = new String[0],
                        Type = SlackChatHubType.Channel
                    },
                    MessageSubType = SlackMessageSubType.ChannelArchive,
                    RawData = "Some rasw data"
                }) ?? Task.CompletedTask);
            }).ToArray();

            Task.WaitAll(awt);
        }
 public void MessageReceived(MessagePartialTransportModel obj)
 {
     OnMessageReceived?.Invoke(this, new MessageReceivedEventArgs
     {
         Message = obj.Mapping <MessagePartialModel>()
     });
 }
예제 #9
0
        /// <summary>
        /// Used internally. Receives as message and passes it to the ComChannels listeners.
        /// </summary>
        /// <param name="amqMessage">The received raw amq message</param>
        internal void _OnMessage(IMessage amqMessage)
        {
            if (!(amqMessage is ITextMessage))
            {
                Console.Error.WriteLine("[ComChannel] Recieved unsupported amq message type: " + amqMessage.GetType());
                return;
            }

            string messageType = null;

            messageType = amqMessage.Properties.GetString(MESSAGETYPE_PROPERTY);

            if (messageType == null)
            {
                Console.Error.WriteLine("[ComChannel] Cannot determine message type");
            }
            else if (messageType.Equals(string.Empty))
            {
                Console.Error.WriteLine("[ComChannel] Cannot determine message type");
            }

            ITextMessage amqTextMessage = amqMessage as ITextMessage;
            string       message        = amqTextMessage.Text;

            OnMessageReceived?.Invoke(messageType, message);
        }
 public void Connect(string _username, string roomname)
 {
     Connection = new HubConnection(url, new Dictionary <string, string> {
         { "username", _username }
     }
                                    );
     Connection.StateChanged += Connection_StateChanged;
     ChatHubProxy             = Connection.CreateHubProxy("ChatHub");
     ConnectedUser.Ids.Add(Connection.ConnectionId);
     ChatHubProxy.On <string, string>("MessageReceived", (username, message) =>
     {
         var user = new SignalrUser
         {
             username = username,
             message  = message,
         };
         OnMessageReceived?.Invoke(user);
     });
     Start().ContinueWith(task =>
     {
         if (task.IsFaulted)
         {
             ConnectionError.Invoke();
         }
     });
 }
 private void GenericNpmRunnerOnMessageReceived(object sender, MessageEventArgs e)
 {
     if (!e.Error)
     {
         TryParsePort(e.Message);
     }
     OnMessageReceived?.Invoke(this, e);
 }
예제 #12
0
        private void HandleMessage(Group server, Channel channel, MessageResponse message)
        {
            var chatChannel = new ChatChannel(message.ConversationID, channel.GroupTitle);
            var sender      = new ChatUser(message.SenderName, message.SenderID.ToString());
            var msg         = new ChatMessage(message.Timestamp, sender, chatChannel, message.Body);

            OnMessageReceived?.Invoke(msg);
        }
예제 #13
0
 private void ExtendedTextMessage(object sender, TextMessage eventArgs)
 {
     if (connectionData.suppressLoopback && eventArgs.InvokerId == me.ClientId)
     {
         return;
     }
     OnMessageReceived?.Invoke(sender, eventArgs);
 }
 private void OnConsumerReceived(object sender, BasicDeliverEventArgs e)
 {
     _deliveryTag = e.DeliveryTag;
     if (OnMessageReceived != null)
     {
         OnMessageReceived.Invoke(sender, e);
     }
 }
 internal void SetOnMessageReceivedCallback(OnMessageReceived callback)
 {
     C.MessageListenerHelper_SetOnMessageReceivedCallback(
         SelfPtr(),
         InternalOnMessageReceivedCallback,
         Callbacks.ToIntPtr(callback)
         );
 }
예제 #16
0
 /// <summary>
 /// Publish received message.
 /// </summary>
 /// <param name="receivedMessage">Received message.</param>
 protected void PublishMessage(MessageContainer <TMessage> receivedMessage)
 {
     if (receivedMessage != null && !receivedMessage.IsEmpty)
     {
         // This is not awaited.
         OnMessageReceived?.Invoke(receivedMessage);
     }
 }
예제 #17
0
 public void FetchNewSQSMessages(OnMessageReceived mesgRecvCallback)
 {
     if (!hasPendingFetch)
     {
         hasPendingFetch = true;
         StartCoroutine(SQSMessageGetAsync(mesgRecvCallback));
     }
 }
예제 #18
0
 public void SetCallback(int MsgType, OnMessageReceived onMsgReceived)
 {
     if (MsgType >= (int)PackMsg.PackMsg.MsgKind_e.PACK_MSG_NUMBER)
     {
         return;
     }
     msgHandlers[MsgType] = onMsgReceived;
 }
        private Task OnConsumerReceived(Message message, CancellationToken token)
        {
            var context = ConvertMessage(message);

            OnMessageReceived?.Invoke(new AzureServiceBusConsumerCommitInput(message.SystemProperties.LockToken), context);

            return(Task.CompletedTask);
        }
예제 #20
0
 // call if received message not find event for processing
 static void MessageReceived(Connection connection, Response msg)
 {
     Unity.Console.DebugLog(Unity.Console.SetYellowColor("Received unbinding message:"), Unity.Console.SetWhiteColor(msg));
     if (!OnMessageReceived.IsNull())
     {
         OnMessageReceived(connection, msg);
     }
 }
예제 #21
0
        public async Task AddChatMessage(IChatMessage msg)
        {
            var test = await httpClient.PostJsonAsync <ChatMessageModel>("http://localhost:46473/api/Chat", msg);

            ChatMessages.Add(test);
            OnMessageReceived?.Invoke(this, null);
            // instances.ForEach(x => x.OnMessageReceived?.Invoke(this, test));
        }
 internal void SetOnMessageReceivedCallback(OnMessageReceived callback)
 {
     C.MessageListenerHelper_SetOnMessageReceivedCallback(
         SelfPtr(),
         InternalOnMessageReceivedCallback,
         Callbacks.ToIntPtr(callback)
     );
 }
        public override void Connect()
        {
            base.Connect();

            // If it's the first access for the user, we send the added meta message
            if (FirstAccess)
            {
                SendMetaMessage(MetaState.Added);
            }

            // Now send a meta message, that the user is online
            SendMetaMessage(MetaState.Online);

            // Declare the queue for the user
            var queue = GroupChat.SharedSecret.GroupChatName + "." + GroupChat.ChatMember;

            Model.QueueDeclare(queue, true, false, false, null);
            var consumer = new EventingBasicConsumer(Model);

            consumer.Received += (obj, ea) =>
            {
                var message = BinaryFormatter <ChatMessage> .FromBinary(ea.Body);

                // Proof that receiver is not the sender
                if (message.Sender == GroupChat.ChatMember)
                {
                    return;
                }

                // Decrypt the message
                if (message.IsEncrypted)
                {
                    message = GroupChat.Decrypt(message);
                }

                // if Message can't decrypted (due to wrong shared key etc)
                if (message == null)
                {
                    return;
                }

                // Check, if the plain text is a json meta object
                var parsedJsonObject = JObject.Parse(message.PlainText);
                if (parsedJsonObject.IsValid(MetaMessageSchema))
                {
                    var metaMessage = JsonConvert.DeserializeObject <MetaMessage>(message.PlainText);
                    OnMetaMessageReceived?.Invoke(GroupChat.ChatMember, message.Sender, metaMessage);
                }
                else if (parsedJsonObject.IsValid(ContentMessageSchema))
                {
                    var contentMessage = JsonConvert.DeserializeObject <TMessageObject>(message.PlainText);
                    OnMessageReceived?.Invoke(GroupChat.ChatMember, message.Sender, contentMessage);
                }
            };

            Model.QueueBind(queue, "amq.fanout", GroupChat.SharedSecret.GroupChatName, null);
            Model.BasicConsume(queue, true, string.Empty, false, true, null, consumer);
        }
예제 #24
0
        public void OnRecievedData(IAsyncResult arg)
        {
            var    sock      = (SocketAdapter)arg.AsyncState;
            int    nBytesRec = sock.EndReceive(arg);
            string sRecieved = Encoding.Unicode.GetString(buffer, 0, nBytesRec);

            OnMessageReceived?.Invoke(sRecieved);
            SetupRecieveCallback(sock);
        }
 public void Send(int opCode, object parameters)
 {
     Task.Run(() => {
         // emulating interoperation with a bank terminal device
         Console.WriteLine("Operation is active");
         Thread.Sleep(3000);
         OnMessageReceived?.Invoke(this, new ProtocolMessage(OperationStatus.Finished));
     });
 }
예제 #26
0
        public Task ListenAsync(CancellationToken cancellationToken = default)
        {
            _currentConsumer.OnMessageReceived += (sender, msg) =>
            {
                OnMessageReceived.Invoke(sender, new TransportMessage(new Dictionary <string, string>(), msg));
            };

            return(Task.CompletedTask);
        }
예제 #27
0
        // Handle the direct method call
        private Task <MethodResponse> SwitchRelay(MethodRequest methodRequest, object userContext)
        {
            OnMessageReceived?.Invoke("Executed direct method: " + methodRequest.Name);
            _relayModule.ChangeState();

            string result = "{\"result\":\"Relay state: " + _relayModule.RelayState + "\"}";

            return(Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200)));
        }
예제 #28
0
        private void ReceiveCallback(IAsyncResult result)
        {
            var endPoint  = LocalEndPoint;
            var bytes     = _client.EndReceive(result, ref endPoint);
            var eventArgs = new UdpReceivedEventArgs(bytes);

            OnMessageReceived?.Invoke(this, eventArgs);
            Receive();
        }
예제 #29
0
 private void ExtendedTextMessage(object sender, TextMessage textMessage)
 {
     // Prevent loopback of own textmessages
     if (textMessage.InvokerId == tsFullClient.ClientId)
     {
         return;
     }
     OnMessageReceived?.Invoke(sender, textMessage);
 }
예제 #30
0
        public void AddMessage(string message)
        {
            lock (Messages)
            {
                Messages.Add(message);
            }

            OnMessageReceived?.Invoke(this, EventArgs.Empty);
        }
예제 #31
0
        protected override void OnMessage(MessageEventArgs e)
        {
            var settings = new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.All
            };
            BaseMessage message = JsonConvert.DeserializeObject <BaseMessage>(e.Data, settings);

            OnMessageReceived?.Invoke(this, message);
        }
예제 #32
0
 /// <summary>
 /// This method allows you to get subscribed to the MessageReceived event
 /// </summary>
 /// <param name="_method"> the method to run when this event fires </param>
 public void SubscribeToMessageReceived(OnMessageReceived _method)
 {
     MessageReceived += _method;
 }
예제 #33
0
 public void SetCallback(int MsgType, OnMessageReceived onMsgReceived)
 {
     if (MsgType >= (int)PackMsg.PackMsg.MsgKind_e.PACK_MSG_NUMBER)
     {
         return;
     }
     msgHandlers[MsgType] = onMsgReceived;
 }
예제 #34
0
 /// <summary>
 /// Unsubscribe from this event
 /// </summary>
 /// <param name="_method"> the method you want to unsubscribe from this event </param>
 public void UnsubscribeToMessageReceived(OnMessageReceived _method)
 {
     MessageReceived -= _method;
 }