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"); } }
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); }
// 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); }
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); } }