예제 #1
0
        private static PublishingEvent PublishPublishingEvent(Message request)
        {
            PublishingEvent e = new PublishingEvent(request);

            EventHub.Publish(e);
            return(e);
        }
예제 #2
0
        public void SendWhisper(PublishingEvent ev)
        {
            if (ev.Cancel)
            {
                return;
            }

            AuthenticatedClient sender  = (AuthenticatedClient)clientRepository.GetByID(ev.Message.clientId);
            Whisper             whisper = Whisper.FromMessage(ev.Message);

            if (whisper == null)
            {
                ev.Cancel             = true;
                ev.CancellationReason = "Format error";
                SendInfoToClient(sender, "Usage: /whisper <nickname> message");
                return;
            }

            AuthenticatedClient receiver =
                clientRepository.WhereSubscribedTo("/chat")
                .Cast <AuthenticatedClient>()
                .FirstOrDefault(user => user.HasUsername(whisper.Username));

            if (receiver == null)
            {
                SendInfoToClient(sender, "User " + whisper.Username + " is not connected to the chat");
                return;
            }
            SendInfoToClient(sender, "To " + whisper.Username + ": " + whisper.Message);
            SendInfoToClient(receiver, sender.Username + " whispers: " + whisper.Message);
        }
예제 #3
0
        public MessageHandlerResult HandleMessage(Message request)
        {
            PublishingEvent e = PublishPublishingEvent(request);

            Message messageToSendToSender = null;

            if (e.Cancel)
            {
                messageToSendToSender = GetForwardingFailedResponse(request, e.CancellationReason);
            }
            else
            {
                Message forwardMessage = GetForwardMessage(request);

                bool shouldFowardToSender = SendMessageToRecipients(request, forwardMessage);

                if (shouldFowardToSender)
                {
                    messageToSendToSender = forwardMessage;
                }
            }

            return(new MessageHandlerResult {
                Message = messageToSendToSender, CanTreatAsLongPoll = false
            });
        }
예제 #4
0
        public MessageHandlerResult HandleMessage(Message request)
        {
            var e = new PublishingEvent(request);

            EventHub.Publish(e);

            Message msg = null;

            if (e.Cancel)
            {
                msg = new Message
                {
                    id         = request.id,
                    clientId   = request.clientId,
                    channel    = request.channel,
                    successful = false,
                    error      = e.CancellationReason
                };
            }

            return(new MessageHandlerResult
            {
                Message = msg,
                CanTreatAsLongPoll = false
            });
        }
예제 #5
0
        public MessageHandlerResult HandleMessage(Message request)
        {
            var e = new PublishingEvent(request);

            EventHub.Publish(e);

            return(null);
        }
예제 #6
0
        public void CheckMessage(PublishingEvent ev)
        {
            if (!ev.Message.GetData <string>("message").Contains("pish"))
            {
                return;
            }

            Client sender = this.clientRepository.GetByID(ev.Message.clientId);

            ev.Cancel = true;

            SendBadLanguageWarningToSender(ev.Message, sender);
            InformChannelOfBadLanguage(ev.Message, sender);
        }
예제 #7
0
        public MessageHandlerResult HandleMessage(Message request)
        {
            bool sendToSelf = false;

            PublishingEvent e = new PublishingEvent(request);

            EventHub.Publish(e);

            if (e.Cancel)
            {
                return(null); // TODO should we return some error?
            }

            Message[] forward = { new Message
                                  {
                                      channel = this.ChannelName,
                                      data    = request.data
                                                // TODO What other fields should be forwarded?
                                  } };

            foreach (Client client in this.Recipients)
            {
                if (client.ID == request.clientId)
                {
                    sendToSelf = true;
                }
                else
                {
                    client.Enqueue(forward);
                    client.FlushQueue();
                }
            }

            return(new MessageHandlerResult {
                Message = sendToSelf ? forward : null, ShouldWait = false
            });
        }