Beispiel #1
0
        public void QuitMessageTokens()
        {
            var message     = "Out for lunch";
            var quitMessage = new QuitMessage(message);

            Assert.Equal($"QUIT :{message}", quitMessage.ToString());
        }
Beispiel #2
0
        private void OnMessageQuit(QuitMessage quitMessage)
        {
            UserInfo user;

            if (Users.TryRemove(quitMessage.Nickname, out user))
            {
                // TODO: fire event here
            }
        }
Beispiel #3
0
        /// <summary>
        /// Finds a message type to handle the message.
        /// </summary>
        public ReceivableMessage Process()
        {
            // Named messages.
            if (NickMessage.CanProcess(this))
            {
                return(new NickMessage(this));
            }
            if (QuitMessage.CanProcess(this))
            {
                return(new QuitMessage(this));
            }
            if (JoinMessage.CanProcess(this))
            {
                return(new JoinMessage(this));
            }
            if (PartMessage.CanProcess(this))
            {
                return(new PartMessage(this));
            }
            if (PrivateMessage.CanProcess(this))
            {
                return(new PrivateMessage(this));
            }
            if (PingMessage.CanProcess(this))
            {
                return(new PingMessage(this));
            }
            if (NoticeMessage.CanProcess(this))
            {
                return(new NoticeMessage(this));
            }
            if (UserModeMessage.CanProcess(this))
            {
                return(new UserModeMessage(this));
            }
            if (ChannelModeMessage.CanProcess(this))
            {
                return(new ChannelModeMessage(this));
            }
            if (KickMessage.CanProcess(this))
            {
                return(new KickMessage(this));
            }
            if (InviteMessage.CanProcess(this))
            {
                return(new InviteMessage(this));
            }
            if (OperwallMessage.CanProcess(this))
            {
                return(new OperwallMessage(this));
            }
            if (Receive.TopicMessage.CanProcess(this))
            {
                return(new Receive.TopicMessage(this));
            }

            // IRCv3 messages.
            if (Receive.v3.CapabilityMessage.CanProcess(this))
            {
                return(new Receive.v3.CapabilityMessage(this));
            }
            if (Receive.v3.AwayMessage.CanProcess(this))
            {
                return(new Receive.v3.AwayMessage(this));
            }

            // Numerics.
            if (NumericMessage.CanProcess(this))
            {
                // Pass all numeric messages to NumericMessage so an event can be fired, then pass it to more specific instances.
                // ReSharper disable once ObjectCreationAsStatement
                new NumericMessage(this);

                if (WelcomeMessage.CanProcess(this))
                {
                    return(new WelcomeMessage(this));
                }
                if (YourHostMessage.CanProcess(this))
                {
                    return(new YourHostMessage(this));
                }
                if (CreatedMessage.CanProcess(this))
                {
                    return(new CreatedMessage(this));
                }
                if (MyInfoMessage.CanProcess(this))
                {
                    return(new MyInfoMessage(this));
                }
                if (SupportMessage.CanProcess(this))
                {
                    return(new SupportMessage(this));
                }
                if (BounceMessage.CanProcess(this))
                {
                    return(new BounceMessage(this));
                }
                if (MOTDEndMessage.CanProcess(this))
                {
                    return(new MOTDEndMessage(this));
                }
                if (MOTDStartMessage.CanProcess(this))
                {
                    return(new MOTDStartMessage(this));
                }
                if (MOTDMessage.CanProcess(this))
                {
                    return(new MOTDMessage(this));
                }
                if (LUserMessage.CanProcess(this))
                {
                    return(new LUserMessage(this));
                }
                if (NamesMessage.CanProcess(this))
                {
                    return(new NamesMessage(this));
                }
                if (EndOfNamesMessage.CanProcess(this))
                {
                    return(new EndOfNamesMessage(this));
                }
                if (TopicMessage.CanProcess(this))
                {
                    return(new TopicMessage(this));
                }
                if (TopicWhoTimeMessage.CanProcess(this))
                {
                    return(new TopicWhoTimeMessage(this));
                }
                if (ListMessage.CanProcess(this))
                {
                    return(new ListMessage(this));
                }
                if (ListEndMessage.CanProcess(this))
                {
                    return(new ListEndMessage(this));
                }
                if (YoureOperMessage.CanProcess(this))
                {
                    return(new YoureOperMessage(this));
                }
                if (AwayMessage.CanProcess(this))
                {
                    return(new AwayMessage(this));
                }
                if (UnAwayMessage.CanProcess(this))
                {
                    return(new UnAwayMessage(this));
                }
                if (NowAwayMessage.CanProcess(this))
                {
                    return(new NowAwayMessage(this));
                }
                if (ChannelModeIsMessage.CanProcess(this))
                {
                    return(new ChannelModeIsMessage(this));
                }
                if (UModeIsMessage.CanProcess(this))
                {
                    return(new UModeIsMessage(this));
                }
                if (VersionMessage.CanProcess(this))
                {
                    return(new VersionMessage(this));
                }
                if (TimeMessage.CanProcess(this))
                {
                    return(new TimeMessage(this));
                }
                if (WhoMessage.CanProcess(this))
                {
                    return(new WhoMessage(this));
                }
                if (WhoisMessage.CanProcess(this))
                {
                    return(new WhoisMessage(this));
                }
                if (EndOfWhoMessage.CanProcess(this))
                {
                    return(new EndOfWhoMessage(this));
                }
                if (EndOfWhoisMessage.CanProcess(this))
                {
                    return(new EndOfWhoisMessage(this));
                }
                if (BanListMessage.CanProcess(this))
                {
                    return(new BanListMessage(this));
                }
                if (EndOfBanListMessage.CanProcess(this))
                {
                    return(new EndOfBanListMessage(this));
                }
                if (InviteListMessage.CanProcess(this))
                {
                    return(new InviteListMessage(this));
                }
                if (EndOfInviteListMessage.CanProcess(this))
                {
                    return(new EndOfInviteListMessage(this));
                }
                if (ExceptListMessage.CanProcess(this))
                {
                    return(new ExceptListMessage(this));
                }
                if (EndOfExceptListMessage.CanProcess(this))
                {
                    return(new EndOfExceptListMessage(this));
                }
                if (IsOnMessage.CanProcess(this))
                {
                    return(new IsOnMessage(this));
                }

                // Catch all for unhandled error messages.
                if (ErrorMessage.CanProcess(this))
                {
                    return(new ErrorMessage(this));
                }
            }

            Console.WriteLine("Message handler for \"" + Text + "\" not found.");
            return(null);
        }
Beispiel #4
0
 private void Quit(QuitMessage msg)
 {
     this.Close();
 }
Beispiel #5
0
        static void Main(string[] args)
        {
            Thread.Sleep(1000);

            System.Timers.Timer UpdateClock = new System.Timers.Timer();
            UpdateClock.Enabled  = false;
            UpdateClock.Interval = 500;
            UpdateClock.Elapsed += new System.Timers.ElapsedEventHandler(UpdateClock_Elapsed);

            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;


            string _Title = @"Lap Score v0.1";

            //Create MDSClient object to connect to DotNetMQ
            //Name of this application: Application1
            //Connect to DotNetMQ server
            mdsClient.Connect();
            Guid testAccount = Guid.NewGuid();

            clock.Init(testAccount);


            while (true)
            {
                if (_IsRecording)
                {
                    Console.BackgroundColor = ConsoleColor.White;
                    Console.ForegroundColor = ConsoleColor.DarkBlue;
                    Console.Write(_Title + "...");
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Recording");
                }
                else
                {
                    Console.BackgroundColor = ConsoleColor.White;
                    Console.ForegroundColor = ConsoleColor.DarkBlue;
                    Console.Write(_Title + "...");
                    Console.WriteLine("Not Recording");
                }

                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.White;

                Console.WriteLine("Commands are.......");
                Console.WriteLine("Press (R) to record.");
                Console.WriteLine("Press (Q) to quite.");
                Console.WriteLine("Press (space) to start race , twice to reset.");
                Console.WriteLine("Press (0-9) for car numbers.");

                var xmlSave = new XmlDocument();


                Car car = new Car
                {
                    Driver = new Driver {
                        Name = "David"
                    },
                    Number      = 1,
                    Transponder = "123121"
                };
                CarRegistrationMessage carmessage = new CarRegistrationMessage();
                carmessage.Init(testAccount, car);

                System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(carmessage.GetType());

                StringWriter writer = new StringWriter();
                x.Serialize(writer, carmessage);


                SendMessage(mdsClient, "LapScore.MessageService.Listener", carmessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.NonPersistent);
                SendMessage(mdsClient, "LapScore.Server", carmessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);

                Car car1 = new Car
                {
                    Driver = new Driver
                    {
                        Name = "Ed"
                    },
                    Number      = 2,
                    Transponder = "123121"
                };


                carmessage = new CarRegistrationMessage();
                carmessage.Init(testAccount, car1);
                x = new System.Xml.Serialization.XmlSerializer(carmessage.GetType());

                writer = new StringWriter();
                x.Serialize(writer, carmessage);

                SendMessage(mdsClient, "LapScore.MessageService.Listener", carmessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.NonPersistent);
                SendMessage(mdsClient, "LapScore.Server", carmessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);



                var keypress = Console.ReadKey();
                //Get a message from user
                if (keypress.Key == ConsoleKey.Q)
                {
                    QuitMessage record = new QuitMessage();
                    record.Init(testAccount);
                    x      = new System.Xml.Serialization.XmlSerializer(record.GetType());
                    writer = new StringWriter();
                    x.Serialize(writer, record);

                    SendMessage(mdsClient, "LapScore.MessageService.Listener", writer.ToString(), MDS.Communication.Messages.MessageTransmitRules.NonPersistent);
                    SendMessage(mdsClient, "LapScore.Server", writer.ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);

                    break;
                }
                else if (keypress.Key == ConsoleKey.R)
                {
                    RecordMessage record = new RecordMessage();
                    record.Init(testAccount);
                    x      = new System.Xml.Serialization.XmlSerializer(record.GetType());
                    writer = new StringWriter();
                    x.Serialize(writer, record);

                    SendMessage(mdsClient, "LapScore.MessageService.Listener", writer.ToString(), MDS.Communication.Messages.MessageTransmitRules.NonPersistent);
                    SendMessage(mdsClient, "LapScore.Server", writer.ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);

                    _IsRecording = !_IsRecording;
                }
                else if (keypress.Key == ConsoleKey.Spacebar)
                {
                    if (_IsClockStarted == false)
                    {
                        _ClockStartTime         = DateTime.UtcNow;
                        clock.Payload.Loop      = 0;
                        clock.Payload.Elapsed   = 0;
                        clock.Payload.Remaining = 5000;
                    }


                    UpdateClock.Enabled = _IsClockStarted = !_IsClockStarted;
                }
                else if ((keypress.KeyChar >= 48) && (keypress.KeyChar <= 58))
                {
                    var carNumber = keypress.KeyChar - 48;

                    LapRegistrationMessage newMessage = new LapRegistrationMessage();
                    newMessage.Init(testAccount, "111111", carNumber, DateTime.UtcNow.Ticks - _ClockStartTime.Ticks);
                    SendMessage(mdsClient, "LapScore.MessageService.Listener", newMessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.NonPersistent);
                    SendMessage(mdsClient, "LapScore.Server", newMessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);

                    if (_IsRecording)
                    {
                        SendMessage(mdsClient, "LapScore.MessageService.Recorder", newMessage.AsXml().ToString(), MDS.Communication.Messages.MessageTransmitRules.StoreAndForward);
                    }
                }
                Console.Clear();
            }

            //Disconnect from DotNetMQ server
            mdsClient.Disconnect();
        }
Beispiel #6
0
        /// <summary>
        /// Do any channel level processing required for the message.
        /// </summary>
        /// <param name="message">The message to process.</param>
        public void HandleMessage(Message message)
        {
            Action namesRequest = () =>
            {
                if (!this.expectingNamesMessage)
                {
                    this.users.Clear();
                    this.expectingNamesMessage = true;
                    this.marshal.Send(this.TabPage, new NamesMessage(this.Name));
                }
            };

            if (message is JoinMessage)
            {
                namesRequest.Invoke();
            }
            else if (message is PartMessage)
            {
                PartMessage partMessage = message as PartMessage;
                if (partMessage.NickName.Equals(this.marshal.Connection.Nickname, StringComparison.OrdinalIgnoreCase))
                {
                    this.Dispose();
                    return;
                }
                else
                {
                    IRCUser user = this.users.Find(i => i.NickName.Equals(partMessage.NickName, StringComparison.OrdinalIgnoreCase));
                    this.TabPage.RemoveUserFromList(user);
                    this.users.Remove(user);
                }
            }
            else if (message is KickMessage)
            {
                KickMessage kickMessage = message as KickMessage;
                IRCUser     user        = this.users.Find(i => i.NickName.Equals(kickMessage.NickName, StringComparison.OrdinalIgnoreCase));
                this.TabPage.RemoveUserFromList(user);
                this.users.Remove(user);
            }
            else if (message is NickMessage)
            {
                NickMessage nickMessage = message as NickMessage;
                IRCUser     user        = this.users.Find(i => i.NickName.Equals(nickMessage.OldNickname, StringComparison.OrdinalIgnoreCase));
                if (user != null)
                {
                    this.TabPage.RemoveUserFromList(user);
                    user.NickName = nickMessage.NewNickname;
                    this.TabPage.AddUserToList(user, true);
                }
                else
                {
                    return;
                }
            }
            else if (message is QuitMessage)
            {
                QuitMessage quitMessage = message as QuitMessage;
                IRCUser     user        = this.users.Find(i => i.NickName.Equals(quitMessage.NickName, StringComparison.OrdinalIgnoreCase));
                if (user != null)
                {
                    this.TabPage.RemoveUserFromList(user);
                    this.users.Remove(user);
                }
                else
                {
                    return;
                }
            }
            else if (message is ModeMessage)
            {
                namesRequest.Invoke();
            }

            GlobalSettings settings = GlobalSettings.Instance;

            if (settings.DebugMode == GlobalSettings.Boolean.Yes)
            {
                this.TabPage.AppendMessage(message.Command, "[RAW]", message.ToString(), MessageType.WarningMessage);
            }

            this.TabPage.AppendMessage(message.Command, message.Source, message.Content, message.Type);
        }
Beispiel #7
0
        protected override void ParseRaw(byte[] buffer, int offset, int length)
        {
            var received = _encoding.GetString(buffer, offset, length);

            if (!string.IsNullOrEmpty(_dataBuffer))
            {
                received    = _dataBuffer + received;
                _dataBuffer = null;
            }

            var commands     = received.Split('|');
            var processCount = commands.Length;

            if (!received.EndsWith("|"))
            {
                _dataBuffer = received.Substring(received.LastIndexOf('|') + 1);
                processCount--;
            }

            for (int i = 0; i < processCount; i++)
            {
                var cmd = commands[i];

                if (cmd.Length == 0)
                {
                    continue;
                }

                if (IncomingMessage != null)
                {
                    OnIncomingMessage(new MessageEventArgs {
                        Message = cmd
                    });
                }

                if (cmd[0] == '$')
                {
                    // command
                    var spaceIndex = cmd.IndexOf(' ');
                    var cmdName    = spaceIndex == -1 ? cmd : cmd.Substring(0, spaceIndex);

                    try
                    {
                        switch (cmdName)
                        {
                        case "$Hello":
                        {
                            var arg = HelloMessage.Parse(cmd);
                            OnMessageHello(ref arg);
                        }
                        break;

                        case "$HubName":
                        {
                            var arg = HubNameMessage.Parse(cmd);
                            OnMessageHubName(ref arg);
                        }
                        break;

                        case "$Lock":
                        {
                            var arg = LockMessage.Parse(cmd);
                            OnMessageLock(ref arg);
                        }
                        break;

                        case "$Search":
                        {
                            var arg = SearchMessage.Parse(cmd);
                            OnMessageSearch(ref arg);
                        }
                        break;

                        case "$ConnectToMe":
                        {
                            var arg = ConnectToMeMessage.Parse(cmd);
                            var ea  = new OutgoingConnectionRequestEventArgs {
                                Message = arg
                            };

                            OnOutgoingConnectionRequest(ea);
                        }
                        break;

                        case "$RevConnectToMe":
                        {
                            var arg = RevConnectToMeMessage.Parse(cmd);
                            var ea  = new IncomingConnectionRequestEventArgs {
                                Message = arg
                            };
                            OnIncomingConnectionRequest(ea);

                            if (!string.IsNullOrEmpty(ea.LocalAddress))
                            {
                                SendMessage(
                                    new ConnectToMeMessage
                                    {
                                        RecipientNickname = arg.SenderNickname,
                                        SenderAddress     = ea.LocalAddress
                                    }.Raw);
                            }
                        }
                        break;

                        case "$GetPass":
                        {
                            OnMessageGetPass();
                        }
                        break;

                        case "$MyINFO":
                        {
                            var arg = MyINFOMessage.Parse(cmd);
                            OnMessageMyINFO(arg);
                        }
                        break;

                        case "$Quit":
                        {
                            var arg = QuitMessage.Parse(cmd);
                            OnMessageQuit(arg);
                        }
                        break;

                        case "$SR":
                        {
                            var arg = SRMessage.Parse(cmd);
                            OnMessageSR(arg);
                        }
                        break;

                        case "$UserIP":
                        {
                            var arg = UserIPMessage.Parse(cmd);
                            OnUserIPMessage(arg);
                        }
                        break;
                        }
                    }
                    catch (Exception x)
                    {
                        Logger.Error("Error when trying to parse a command: " + x.Message);
                    }
                }
                else
                {
                    // chat message
                    _lastChatMessage = cmd;

                    OnChatMessage(new ChatMessageEventArgs {
                        RawMessage = cmd
                    });
                }
            }
        }