Raised when a client is publishing a message to the comet message bus
Inheritance: CancellableEvent, IChannelEvent
Example #1
0
        public void SendWhisper( PublishingEvent ev )
        {
            if ( ev.Cancel ) return;

            AuthenticatedClient sender = (AuthenticatedClient)clientRepository.GetByID( ev.Message.clientId );
            string message = ev.Message.GetData<string>( "message" );
            int spacePos = message.IndexOf( ' ' );
            if ( spacePos == -1 ) {
                ev.Cancel = true;
                ev.CancellationReason = "Format error";
                SendInfoToUser( sender, "Usage: /whisper <nickname> message" );
                return;
            }
            string nickname = message.Substring( 0, spacePos );
            var receiver = ( from AuthenticatedClient user in clientRepository.WhereSubscribedTo( "/chat" )
                             where String.Equals( user.username, nickname, StringComparison.InvariantCultureIgnoreCase )
                             select user ).FirstOrDefault();
            if ( receiver == null ) {
                SendInfoToUser( sender, "User " + nickname + " is not connected to the chat" );
                return;
            }
            string text = message.Substring( spacePos+1 );
            SendInfoToUser( sender, "To " + nickname + ": " + text );
            SendInfoToUser( receiver, sender.username + " whispers: " + text );
        }
Example #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);
        }
Example #3
0
        public MessageHandlerResult HandleMessage(Message request)
        {
            var e = new PublishingEvent(request);
            EventHub.Publish(e);

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

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

            ev.Cancel = true;
            ev.CancellationReason = "Bad Language";

            SendBadLanguageWarningToSender(ev.Message, sender);
            InformChannelOfBadLanguage(ev.Message, sender);
        }
Example #5
0
        public void ProcessEvent(PublishingEvent @event)
        {
            var action = @event.Channel.SubstringAfterLast("/");
            dynamic data = new DynamicDictionaryWrapper((IDictionary<string, object>)@event.Message.data);
            var channelPrefix = @event.Channel.SubstringBeforeLast("/");
            var page = this.repository.Load(channelPrefix.SubstringAfterLast("/"));

            if (action == "change") {
                this.ProcessChange(page, channelPrefix, @event.Message.clientId, data);
            }
            else if (action == "resync") {
                this.ProcessResync(page, channelPrefix, @event.Message.clientId, data);
            }
        }
Example #6
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
            };
        }
Example #7
0
 private static PublishingEvent PublishPublishingEvent(Message request)
 {
     PublishingEvent e = new PublishingEvent(request);
     EventHub.Publish(e);
     return e;
 }