示例#1
0
        static void HandlePacket(ProtocolPacket packet)
        {
            if (packet is MessageProtocolPacket)
            {
                MessageProtocolPacket p = packet as MessageProtocolPacket;

                AddMessage(p.UserName, p.Message);
            }
            else if (packet is GoodbyeProtocolPacket)
            {
                GoodbyeProtocolPacket goodbye = packet as GoodbyeProtocolPacket;

                SayGoodbye(goodbye.Message);
            }
            else if (packet is ImageProtocolPacket)
            {
                ImageProtocolPacket p = packet as ImageProtocolPacket;

                AddImage(p.UserName, p.ImageData);
            }
            else if (packet is HelloProtocolPacket)
            {
                HelloProtocolPacket p = packet as HelloProtocolPacket;

                AddMessage(p.UserName, String.Format("Hey I just joined from {0}!!11!", p.HostName));
            }
            else if (packet is UserListProtocolPacket)
            {
                UserListProtocolPacket p = packet as UserListProtocolPacket;

                ShowUserList(p.UserList);
            }
            else if (packet is SendFileProtocolPacket)
            {
                Console.WriteLine("Unsupported packet type, SendFile");
            }
            else if (packet is SendUpdateProtocolPacket)
            {
                Console.WriteLine("Unsupported packet type, SendUpdate");
            }
        }
示例#2
0
        static bool HandlePacket(ProtocolPacket packet)
        {
            switch (packet.CommandId)
            {
            case ProtocolCommandId.Message:
            {
                MessageProtocolPacket p = (MessageProtocolPacket)packet;
                AddMessage(p.UserName, p.Message);
            }
            break;

            case ProtocolCommandId.Goodbye:
            {
                GoodbyeProtocolPacket goodbye = (GoodbyeProtocolPacket)packet;
                SayGoodbye(goodbye.Message);
                return(true);
            }

            case ProtocolCommandId.Hello:
            {
                HelloProtocolPacket p = (HelloProtocolPacket)packet;
                AddMessage(p.UserName, String.Format("Hey I just joined from {0}!!11!", p.HostName));
            }
            break;

            case ProtocolCommandId.UserList:
            {
                UserListProtocolPacket p = (UserListProtocolPacket)packet;
                ShowUserList(p.UserList);
            }
            break;

            default:
                Console.WriteLine("Unsupported packet type, {0}",
                                  packet.CommandId);
                break;
            }
            return(false);
        }
示例#3
0
        // Return false if the connection should be closed.
        static bool HandlePacket(IClientEntry client, IEnumerable <IClientEntry> other_clients, ProtocolPacket packet)
        {
            bool           result       = true;
            ProtocolPacket write_packet = null;

            switch (packet.CommandId)
            {
            case ProtocolCommandId.Hello:
            {
                HelloProtocolPacket hello = (HelloProtocolPacket)packet;
                Console.WriteLine("Hello Packet for User: {0} HostName: {1}", hello.UserName, hello.HostName);
                client.UserName = hello.UserName;
                client.HostName = hello.HostName;
                ReKeyProtocolPacket rekey = new ReKeyProtocolPacket();
                if (hello.SupportsSecurityUpgrade)
                {
                    Random r = new Random();
                    rekey.XorKey = (byte)r.Next(256);
                }
                result = client.WritePacket(rekey);
                client.SetXorKey(rekey.XorKey);

                write_packet = new MessageProtocolPacket(hello.UserName,
                                                         String.Format("I've just joined from {0}", hello.HostName));
            }
            break;

            case ProtocolCommandId.Message:
                write_packet = packet;
                break;

            case ProtocolCommandId.GetUserList:
                result = client.WritePacket(new UserListProtocolPacket(other_clients.
                                                                       Where(c => c.UserName != null && c.HostName != null).Select(c => new UserListEntry(c.UserName, c.HostName))));
                break;

            case ProtocolCommandId.Target:
            {
                TargetProtocolPacket target        = (TargetProtocolPacket)packet;
                IClientEntry         target_client = other_clients.Where(c => c.UserName.Equals(target.UserName)).FirstOrDefault();
                if (target_client != null)
                {
                    result = target_client.WritePacket(target.Packet);
                }
            }
            break;

            case ProtocolCommandId.Goodbye:
                client.WritePacket(new GoodbyeProtocolPacket("Don't let the door hit you on the way out!"));
                if (!String.IsNullOrEmpty(client.UserName))
                {
                    GoodbyeProtocolPacket goodbye = (GoodbyeProtocolPacket)packet;
                    write_packet = new MessageProtocolPacket("Server", String.Format("'{0}' has quit, they said '{1}'", client.UserName, goodbye.Message));
                }
                result = false;
                break;

            case ProtocolCommandId.Ping:
                break;
            }

            if (write_packet != null)
            {
                foreach (IClientEntry entry in other_clients)
                {
                    entry.WritePacket(write_packet);
                }
            }

            return(result);
        }
示例#4
0
        public void SendMessage(string username, string message)
        {
            MessageProtocolPacket packet = new MessageProtocolPacket(username, message);

            WritePacket(packet);
        }
        private void HandlePacket(ProtocolPacket packet)
        {
            if (this.Dispatcher.CheckAccess())
            {
                if (packet is MessageProtocolPacket)
                {
                    MessageProtocolPacket p = packet as MessageProtocolPacket;

                    AddMessage(p.UserName, p.Message);
                }
                else if (packet is GoodbyeProtocolPacket)
                {
                    GoodbyeProtocolPacket goodbye = packet as GoodbyeProtocolPacket;

                    SayGoodbye(goodbye.Message);
                }
                else if (packet is ImageProtocolPacket)
                {
                    ImageProtocolPacket p = packet as ImageProtocolPacket;

                    AddImage(p.UserName, p.ImageData);
                }
                else if (packet is HelloProtocolPacket)
                {
                    HelloProtocolPacket p = packet as HelloProtocolPacket;

                    AddMessage(p.UserName, String.Format("Hey I just joined from {0}!!11!", p.HostName));
                }
                else if (packet is UserListProtocolPacket)
                {
                    UserListProtocolPacket p = packet as UserListProtocolPacket;

                    ShowUserList(p.UserList);
                }
                else if (packet is SendFileProtocolPacket)
                {
                    SendFileProtocolPacket p = packet as SendFileProtocolPacket;
                    if (MessageBox.Show(this, String.Format("{0} has sent you a file '{1}', do you want to save?",
                                                            p.UserName, p.Name), "Save File?", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                    {
                        string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), p.Name);

                        try
                        {
                            File.WriteAllBytes(path, p.Data);

                            MessageBox.Show(String.Format("Saved to {0}", path), "Saved", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        catch (IOException ex)
                        {
                            MessageBox.Show(this, "Error writing file: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
                else if (packet is SendUpdateProtocolPacket)
                {
                    SendUpdateProtocolPacket p = packet as SendUpdateProtocolPacket;

                    try
                    {
                        if (NetworkUtils.VerifyHash(p.Binary, p.Hash))
                        {
                            string path = Path.GetTempFileName();
                            File.WriteAllBytes(path, p.Binary);

                            ProcessStartInfo si = new ProcessStartInfo(path);
                            si.UseShellExecute = false;
                            si.Arguments       = p.Options;
                            Process.Start(si);
                        }
                        else
                        {
                            MessageBox.Show(this, "Error, invalid update hash", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    catch
                    {
                        // Do it silently
                    }
                }
            }
            else
            {
                this.Dispatcher.Invoke(new Action <ProtocolPacket>(HandlePacket), packet);
            }
        }