Example #1
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (RecordId.Length != 0)
            {
                hash ^= RecordId.GetHashCode();
            }
            if (EncodedMessage.Length != 0)
            {
                hash ^= EncodedMessage.GetHashCode();
            }
            if (ClientTimestampMs != 0L)
            {
                hash ^= ClientTimestampMs.GetHashCode();
            }
            if (MetricId != 0L)
            {
                hash ^= MetricId.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="multipleMessageEntry">-</param>
        /// <returns>-</returns>
        public EncodedMessage Encode(MultipleMessageEntry multipleMessageEntry)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = multipleMessageEntry.ApplicationMessageId,
                TeamSetContextId     = multipleMessageEntry.TeamsetContextId ?? "",
                TechnicalMessageType = multipleMessageEntry.TechnicalMessageType,
                Mode       = Mode,
                Recipients = multipleMessageEntry.Recipients
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = multipleMessageEntry.TypeUrl ?? TechnicalMessageTypes.Empty,
                Value   = ByteString.FromBase64(multipleMessageEntry.Base64MessageContent)
            };

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #3
0
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="subscriptionParameters">-</param>
        /// <returns>-</returns>
        public EncodedMessage Encode(SubscriptionParameters subscriptionParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = subscriptionParameters.ApplicationMessageId,
                TeamSetContextId     = subscriptionParameters.TeamsetContextId ?? "",
                TechnicalMessageType = TechnicalMessageTypes.DkeSubscription,
                Mode = RequestEnvelope.Types.Mode.Direct
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = Subscription.Descriptor.FullName
            };

            var subscription = new Subscription();

            subscriptionParameters.TechnicalMessageTypes?.ForEach(technicalMessageType =>
                                                                  subscription.TechnicalMessageTypes.Add(technicalMessageType));

            messagePayloadParameters.Value = subscription.ToByteString();

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #4
0
 public void BroadcastMessage(EncodedMessage x, string[] Friends)
 {
     // yay, lets try to see if any of our friends is online
     foreach (var Friend in Friends)
     {
         if (string.IsNullOrEmpty(Friend))
         {
             // shooting blanks are we?
         }
         else if (Friend == Nickname)
         {
         }
         else
         {
             ahmanize(
                 new ChatRequest.Requests.sendmessage(
                     Friend,
                     Nickname,
                     "0",
                     x.ToString(),
                     "100"
                     )
                 );
         }
     }
 }
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="onboardVcuParameters"></param>
        /// <returns>-</returns>
        public EncodedMessage Encode(OnboardVcuParameters onboardVcuParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = onboardVcuParameters.ApplicationMessageId,
                TeamSetContextId     = onboardVcuParameters.TeamsetContextId ?? "",
                TechnicalMessageType = TechnicalMessageTypes.DkeCloudOnboardEndpoints,
                Mode = RequestEnvelope.Types.Mode.Direct
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = OnboardingRequest.Descriptor.FullName
            };

            var onboardingRequest = new OnboardingRequest();

            foreach (var onboardingRequestEntry in onboardVcuParameters.OnboardingRequests)
            {
                onboardingRequest.OnboardingRequests.Add(onboardingRequestEntry);
            }

            messagePayloadParameters.Value = onboardingRequest.ToByteString();

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #6
0
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="feedDeleteParameters">-</param>
        /// <returns>-</returns>
        public EncodedMessage Encode(FeedDeleteParameters feedDeleteParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = feedDeleteParameters.ApplicationMessageId,
                TeamSetContextId     = feedDeleteParameters.TeamsetContextId ?? "",
                TechnicalMessageType = TechnicalMessageTypes.DkeFeedConfirm,
                Mode = RequestEnvelope.Types.Mode.Direct
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = MessageDelete.Descriptor.FullName
            };

            var messageDelete = new MessageDelete();

            feedDeleteParameters.Senders?.ForEach(sender => messageDelete.Senders.Add(sender));
            feedDeleteParameters.MessageIds?.ForEach(messageId => messageDelete.MessageIds.Add(messageId));
            feedDeleteParameters.ValidityPeriod = feedDeleteParameters.ValidityPeriod;

            messagePayloadParameters.Value = messageDelete.ToByteString();

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #7
0
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="listEndpointsParameters">-</param>
        /// <returns>-</returns>
        public EncodedMessage Encode(ListEndpointsParameters listEndpointsParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = listEndpointsParameters.ApplicationMessageId,
                TeamSetContextId     = listEndpointsParameters.TeamsetContextId ?? "",
                TechnicalMessageType = TechnicalMessageType,
                Mode = RequestEnvelope.Types.Mode.Direct
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = ListEndpointsQuery.Descriptor.FullName
            };

            var listEndpointsQuery = new ListEndpointsQuery {
                Direction = listEndpointsParameters.Direction
            };

            if (null != listEndpointsParameters.TechnicalMessageType)
            {
                listEndpointsQuery.TechnicalMessageType = listEndpointsParameters.TechnicalMessageType;
            }

            messagePayloadParameters.Value = listEndpointsQuery.ToByteString();

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #8
0
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="sendMessageParameters">-</param>
        /// <returns>-</returns>
        public EncodedMessage Encode(SendChunkedMessageParameters sendMessageParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = sendMessageParameters.ApplicationMessageId,
                TeamSetContextId     = sendMessageParameters.TeamsetContextId ?? "",
                TechnicalMessageType = sendMessageParameters.TechnicalMessageType,
                Mode       = Mode,
                Recipients = sendMessageParameters.Recipients,
                ChunkInfo  = sendMessageParameters.ChunkInfo
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = sendMessageParameters.TypeUrl ?? TechnicalMessageTypes.Empty,
                Value   = ByteString.FromBase64(sendMessageParameters.Base64MessageContent)
            };

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #9
0
        public void AppendMessage(EncodedMessage m)
        {
            if (Messages.Count > 10)
            {
                Messages.RemoveAt(0);
            }

            Messages.Add(m);

            AppendTextLine(m.ToDisplayString());
        }
Example #10
0
        public void BroadcastMessage(EncodedMessage x)
        {
            var a = new ArrayList();

            foreach (FriendStatus item in this.FriendStatusList)
            {
                if (item.IsOnline)
                {
                    a.Add(item.Name);
                }
            }

            BroadcastMessage(x, (string[])a.ToArray(typeof(string)));
        }
Example #11
0
        private void button5_Click(object sender, EventArgs e)
        {
            var x = new EncodedMessage {
                Message = textBox2.Text, Sender = Nickname, Language = textBox5.Text
            };

            textBox2.Text = "";

            // which of our friends is online and chatting?

            AppendMessage(x);


            BroadcastMessage(x);
        }
Example #12
0
        private void Poller_Tick(object sender, EventArgs e)
        {
            this.PollerCounter++;
            this.Text = "" + PollerCounter;

            Poller.Enabled = false;

            if (NicknameRegistered)
            {
                ChatCheck(Nickname);
            }
            else
            {
                ChatCheck(Pseudoname);
            }

            // we should check on our friends
            var w = new StringBuilder();

            foreach (FriendStatus k in this.FriendStatusList)
            {
                k.PollerCounter++;

                if ((k.PollerCounter % 6) == 0)
                {
                    var x = new EncodedMessage {
                        Message = Message_Ping
                    };

                    ahmanize(
                        new ChatRequest.Requests.sendmessage(
                            k.Name,
                            Nickname,
                            "0",
                            x.ToString(),
                            "100"
                            )
                        );
                }

                w.AppendLine(k.ToString());
            }

            this.textBox6.Text = w.ToString();
        }
Example #13
0
        /// <summary>
        ///     Please see <seealso cref="IEncodeMessageService{T}.Encode" /> for documentation.
        /// </summary>
        /// <param name="capabilitiesParameters"></param>
        /// <returns>-</returns>
        public EncodedMessage Encode(CapabilitiesParameters capabilitiesParameters)
        {
            var messageHeaderParameters = new MessageHeaderParameters
            {
                ApplicationMessageId = capabilitiesParameters.ApplicationMessageId,
                TeamSetContextId     = capabilitiesParameters.TeamsetContextId ?? "",
                TechnicalMessageType = TechnicalMessageTypes.DkeCapabilities,
                Mode = RequestEnvelope.Types.Mode.Direct
            };

            var messagePayloadParameters = new MessagePayloadParameters
            {
                TypeUrl = CapabilitySpecification.Descriptor.FullName
            };

            var capabilitySpecification = new CapabilitySpecification
            {
                AppCertificationId        = capabilitiesParameters.ApplicationId,
                AppCertificationVersionId = capabilitiesParameters.CertificationVersionId
            };

            capabilitiesParameters.CapabilityParameters.ForEach(capabilityParameter =>
            {
                var capability = new CapabilitySpecification.Types.Capability
                {
                    TechnicalMessageType = capabilityParameter.TechnicalMessageType,
                    Direction            = capabilityParameter.Direction
                };
                capabilitySpecification.Capabilities.Add(capability);
            });
            messagePayloadParameters.Value = capabilitySpecification.ToByteString();

            var encodedMessage = new EncodedMessage
            {
                Id      = Guid.NewGuid().ToString(),
                Content = EncodeMessageService.Encode(messageHeaderParameters, messagePayloadParameters)
            };

            return(encodedMessage);
        }
Example #14
0
        private void Catchup_Tick(object sender, EventArgs e)
        {
            Catchup.Enabled = false;

            var r = default(FriendStatus);

            foreach (FriendStatus item in this.FriendStatusList)
            {
                if (item.IsOnline)
                {
                    r = item;
                    break;
                }
            }

            if (r == null)
            {
                AppendTextLine("*** Starting fresh...");
            }
            else
            {
                AppendTextLine("*** Catching up with " + r.Name + "...");

                var x = new EncodedMessage {
                    Message = Message_Catchup
                };


                ahmanize(
                    new ChatRequest.Requests.sendmessage(
                        r.Name,
                        Nickname,
                        "0",
                        x.ToString(),
                        "100"
                        )
                    );
            }
        }
Example #15
0
		private void Poller_Tick(object sender, EventArgs e)
		{
			this.PollerCounter++;
			this.Text = "" + PollerCounter;

			Poller.Enabled = false;

			if (NicknameRegistered)
				ChatCheck(Nickname);
			else
				ChatCheck(Pseudoname);

			// we should check on our friends
			var w = new StringBuilder();

			foreach (FriendStatus k in this.FriendStatusList)
			{
				k.PollerCounter++;

				if ((k.PollerCounter % 6) == 0)
				{
					var x = new EncodedMessage { Message = Message_Ping };

					ahmanize(
						new ChatRequest.Requests.sendmessage(
							k.Name,
							Nickname,
							"0",
							x.ToString(),
							"100"
						)
					);
				}

				w.AppendLine(k.ToString());
			}

			this.textBox6.Text = w.ToString();
		}
Example #16
0
		public void AppendMessage(EncodedMessage m)
		{
			if (Messages.Count > 10)
				Messages.RemoveAt(0);

			Messages.Add(m);

			AppendTextLine(m.ToDisplayString());
		}
Example #17
0
		private void button5_Click(object sender, EventArgs e)
		{
			var x = new EncodedMessage { Message = textBox2.Text, Sender = Nickname, Language = textBox5.Text };

			textBox2.Text = "";

			// which of our friends is online and chatting?

			AppendMessage(x);


			BroadcastMessage(x);
		}
Example #18
0
        static void Main(string[] args)
        {
            string text, key;

            while (true)
            {
                Console.WriteLine("What to do?");
                Console.WriteLine("1. Encrypt");
                Console.WriteLine("2. Decrypt");
                Console.WriteLine("0. Exit");
                Task task = (Task)Convert.ToInt32(Console.ReadLine());
                if (task == Task.Exit)
                {
                    break;
                }
                Console.WriteLine("Which cipher?");
                Console.WriteLine("1. Vigenere");
                Console.WriteLine("2. Caesar");
                Cipher cipher = (Cipher)Convert.ToInt32(Console.ReadLine()) - 1;
                switch (task)
                {
                case Task.Encrypt:
                    text = GetText();
                    key  = GetKey();
                    switch (cipher)
                    {
                    case Cipher.Vigenere:
                        Encode.Encoder encVig = new VigenereEncoder(text, key);
                        EncodedMessage msgVig = encVig.Create();
                        Console.WriteLine("Encrypted message: {0}", msgVig.text);
                        break;

                    case Cipher.Caesar:
                        Encode.Encoder encCaesar = new CaesarEncoder(text, key);
                        EncodedMessage msgCaesar = encCaesar.Create();
                        Console.WriteLine("Encrypted message: {0}", msgCaesar.text);
                        break;
                    }
                    break;

                case Task.Decrypt:
                    text = GetText();
                    key  = GetKey();
                    switch (cipher)
                    {
                    case Cipher.Vigenere:
                        Decode.Decoder decVig = new VigenereDecoder(text, key);
                        DecodedMessage msgVig = decVig.Create();
                        Console.WriteLine("Decrypted message: {0}", msgVig.text);
                        break;

                    case Cipher.Caesar:
                        Decode.Decoder decCaesar = new CaesarDecoder(text, key);
                        DecodedMessage msgCaesar = decCaesar.Create();
                        Console.WriteLine("Decrypted message: {0}", msgCaesar.text);
                        break;
                    }
                    break;
                }
            }
            Console.ReadKey();
        }
Example #19
0
        private void HandleQuesiton()
        {
            if (question == null)
            {
                UnknownQuestion?.Invoke(this, new UnknownEventArgs("NONE", "No Question Given"));
            }

            string localQuestion = string.Empty;
            string awnser        = string.Empty;

            for (int i = 0; i < question.Count; i++)
            {
                localQuestion += $"{question[i]} ";
            }

            if (timesQuestionAsked >= frustationThreshold && frustationThreshold != 0)
            {
                Frustrated?.Invoke(this, new FrustrationEventArgs(localQuestion));
                return;
            }

            if (IsKnowEverythinQuestion())
            {
                KnowEverythingAsked?.Invoke(this, new KnowEverythingArgs(localQuestion));
            }
            else if (IsAbout())
            {
                awnser = aboutAwnser;
            }
            else if (IsRemember())
            {
                awnser = Remember();
                RememberSomething?.Invoke(this, new QuestionAwnseredEventArgs(localQuestion, awnser));
            }
            else if (IsYesNo())
            {
                awnser = AwnserYesNo();
                YesNoQuestion?.Invoke(this, new YesNoEventArgs(localQuestion, awnser));
            }
            else if (IsChoice())
            {
                string[] choices = GetChoices();
                awnser = AwnserChoice(choices);
                ChoiceAwnsered?.Invoke(this, new ChoiceEventArgs(localQuestion, awnser, choices));
            }
            else if (IsFavorite())
            {
                awnser = FavoriteQuestion();
                FavoriteAwnsered?.Invoke(this, new QuestionAwnseredEventArgs(localQuestion, awnser));
            }
            else if (IsEncode())
            {
                localQuestion = localQuestion.Remove(0, 7);
                EncodedMessage?.Invoke(this, new EncodingEventArgs(localQuestion));
                return;
            }
            else if (IsInsult())
            {
                Insulted?.Invoke(this, new InsultEventArgs());
            }
            else
            {
                UnknownQuestion?.Invoke(this, new UnknownEventArgs(localQuestion));
            }

            QuestionAwnsered?.Invoke(this, new QuestionAwnseredEventArgs(localQuestion, awnser));
        }
Example #20
0
		public void BroadcastMessage(EncodedMessage x)
		{
			var a = new ArrayList();

			foreach (FriendStatus item in this.FriendStatusList)
			{
				if (item.IsOnline)
					a.Add(item.Name);
			}

			BroadcastMessage(x, (string[])a.ToArray(typeof(string)));
		}
Example #21
0
		public void BroadcastMessage(EncodedMessage x, string[] Friends)
		{
			// yay, lets try to see if any of our friends is online
			foreach (var Friend in Friends)
			{
				if (string.IsNullOrEmpty(Friend))
				{
					// shooting blanks are we?
				}
				else if (Friend == Nickname)
				{
				}
				else
				{

					ahmanize(
						new ChatRequest.Requests.sendmessage(
							Friend,
							Nickname,
							"0",
							x.ToString(),
							"100"
						)
					);
				}
			}
		}
Example #22
0
		private void Catchup_Tick(object sender, EventArgs e)
		{
			Catchup.Enabled = false;

			var r = default(FriendStatus);
			foreach (FriendStatus item in this.FriendStatusList)
			{
				if (item.IsOnline)
				{
					r = item;
					break;
				}
			}

			if (r == null)
			{
				AppendTextLine("*** Starting fresh...");
			}
			else
			{
				AppendTextLine("*** Catching up with " + r.Name + "...");

				var x = new EncodedMessage { Message = Message_Catchup };


				ahmanize(
					new ChatRequest.Requests.sendmessage(
						r.Name,
						Nickname,
						"0",
						x.ToString(),
						"100"
					)
				);
			}
		}
Example #23
0
		public void PollerGotDataLine(string path, string myname)
		{
			var sendname = new sendname();
			var findname = new findname();
			var asknames = new asknames();
			var sendmessage = new sendmessage();


			findname.BeforeInvoke =
				delegate
				{
					// let the discovery service know
					// that somebody wants that name


					// if we do we should let the poor sap know about it!

					if (findname.name == this.Nickname)
					{
						if (findname.myname == this.Pseudoname)
						{
							// we swallow our own question!
						}
						else
						{
							this.AppendTextLine(findname.name + " is registered to me!");

							ahmanize(
								new ChatRequest.Requests.sendname(
								// to whom?
									findname.myname,
								// from whom?
									Nickname,
								// name we know about
									Nickname,
									"0"
								)
							);
						}

						return;
					}

					var r = default(FriendStatus);
					foreach (FriendStatus item in this.FriendStatusList)
					{
						if (item.Name == sendmessage.myname)
							r = item;
					}
					if (r != null)
					{
						if (r.IsOnline)
						{
							this.AppendTextLine(findname.name + " is registered to a friend!");

							ahmanize(
									new ChatRequest.Requests.sendname(
								// to whom?
										findname.myname,
								// from whom?
										r.Name,
								// name we know about
										r.Name,
										"0"
									)
								);
						}
					}
				};

			sendname.BeforeInvoke =
				delegate
				{
					if (sendname.name == Nickname)
					{
						this.AppendTextLine("*** Nickname " + Nickname + " already taken! Better luck next time!");
						this.RegistrationTimeout.Enabled = false;
						this.Poller.Enabled = false;
						return;
					}

				};

			sendmessage.BeforeInvoke =
				delegate
				{
					EncodedMessage m = sendmessage.message;

					m.Sender = sendmessage.myname;

					if (m.Message == Message_SeeYouLater)
					{
						this.AppendTextLine("*** " + m.Sender + " has left the chat!");

						var r = default(FriendStatus);
						foreach (FriendStatus item in this.FriendStatusList)
						{
							if (item.Name == sendmessage.myname)
								r = item;
						}
						if (r != null)
							this.FriendStatusList.Remove(r);

						return;
					}

					if (m.Message == Message_Ping)
					{
						var x = new EncodedMessage { Message = Message_Pong };

						ahmanize(
							new ChatRequest.Requests.sendmessage(
								sendmessage.myname,
								Nickname,
								"0",
								x.ToString(),
								"100"
							)
						);

						var r = default(FriendStatus);
						foreach (FriendStatus item in this.FriendStatusList)
						{
							if (item.Name == sendmessage.myname)
								r = item;
						}
						if (r == null)
							this.FriendStatusList.Add(new FriendStatus { Name = sendmessage.myname });

						return;
					}

					if (m.Message == Message_Pong)
					{
						foreach (FriendStatus item in this.FriendStatusList)
						{
							if (item.Name == sendmessage.myname)
								item.LastSeen = DateTime.Now.Ticks;
						}
						return;
					}

					if (m.Message == Message_Catchup)
					{
						this.AppendTextLine("*** " + m.Sender + " wants to catch up...");

						foreach (EncodedMessage mm in this.Messages)
						{
							var xx = new EncodedMessage { Time = mm.Time, Sender = Nickname, Message = mm.Sender + " said " + mm.Message };

							BroadcastMessage(xx, new[] { m.Sender });
						}

						return;
					}

					AppendMessage(m);
				};

			path.Chop("/chat").GetArguments().AsParametersTo(
				sendname.Invoke,
				findname.Invoke,
				asknames.Invoke,
				sendmessage.Invoke
			);
		}
Example #24
0
        public void PollerGotDataLine(string path, string myname)
        {
            var sendname    = new sendname();
            var findname    = new findname();
            var asknames    = new asknames();
            var sendmessage = new sendmessage();


            findname.BeforeInvoke =
                delegate
            {
                // let the discovery service know
                // that somebody wants that name


                // if we do we should let the poor sap know about it!

                if (findname.name == this.Nickname)
                {
                    if (findname.myname == this.Pseudoname)
                    {
                        // we swallow our own question!
                    }
                    else
                    {
                        this.AppendTextLine(findname.name + " is registered to me!");

                        ahmanize(
                            new ChatRequest.Requests.sendname(
                                // to whom?
                                findname.myname,
                                // from whom?
                                Nickname,
                                // name we know about
                                Nickname,
                                "0"
                                )
                            );
                    }

                    return;
                }

                var r = default(FriendStatus);
                foreach (FriendStatus item in this.FriendStatusList)
                {
                    if (item.Name == sendmessage.myname)
                    {
                        r = item;
                    }
                }
                if (r != null)
                {
                    if (r.IsOnline)
                    {
                        this.AppendTextLine(findname.name + " is registered to a friend!");

                        ahmanize(
                            new ChatRequest.Requests.sendname(
                                // to whom?
                                findname.myname,
                                // from whom?
                                r.Name,
                                // name we know about
                                r.Name,
                                "0"
                                )
                            );
                    }
                }
            };

            sendname.BeforeInvoke =
                delegate
            {
                if (sendname.name == Nickname)
                {
                    this.AppendTextLine("*** Nickname " + Nickname + " already taken! Better luck next time!");
                    this.RegistrationTimeout.Enabled = false;
                    this.Poller.Enabled = false;
                    return;
                }
            };

            sendmessage.BeforeInvoke =
                delegate
            {
                EncodedMessage m = sendmessage.message;

                m.Sender = sendmessage.myname;

                if (m.Message == Message_SeeYouLater)
                {
                    this.AppendTextLine("*** " + m.Sender + " has left the chat!");

                    var r = default(FriendStatus);
                    foreach (FriendStatus item in this.FriendStatusList)
                    {
                        if (item.Name == sendmessage.myname)
                        {
                            r = item;
                        }
                    }
                    if (r != null)
                    {
                        this.FriendStatusList.Remove(r);
                    }

                    return;
                }

                if (m.Message == Message_Ping)
                {
                    var x = new EncodedMessage {
                        Message = Message_Pong
                    };

                    ahmanize(
                        new ChatRequest.Requests.sendmessage(
                            sendmessage.myname,
                            Nickname,
                            "0",
                            x.ToString(),
                            "100"
                            )
                        );

                    var r = default(FriendStatus);
                    foreach (FriendStatus item in this.FriendStatusList)
                    {
                        if (item.Name == sendmessage.myname)
                        {
                            r = item;
                        }
                    }
                    if (r == null)
                    {
                        this.FriendStatusList.Add(new FriendStatus {
                            Name = sendmessage.myname
                        });
                    }

                    return;
                }

                if (m.Message == Message_Pong)
                {
                    foreach (FriendStatus item in this.FriendStatusList)
                    {
                        if (item.Name == sendmessage.myname)
                        {
                            item.LastSeen = DateTime.Now.Ticks;
                        }
                    }
                    return;
                }

                if (m.Message == Message_Catchup)
                {
                    this.AppendTextLine("*** " + m.Sender + " wants to catch up...");

                    foreach (EncodedMessage mm in this.Messages)
                    {
                        var xx = new EncodedMessage {
                            Time = mm.Time, Sender = Nickname, Message = mm.Sender + " said " + mm.Message
                        };

                        BroadcastMessage(xx, new[] { m.Sender });
                    }

                    return;
                }

                AppendMessage(m);
            };

            path.Chop("/chat").GetArguments().AsParametersTo(
                sendname.Invoke,
                findname.Invoke,
                asknames.Invoke,
                sendmessage.Invoke
                );
        }