private static void LeafEmoteToLeaf(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint leaf_ident = packet; Leaf l = LeafPool.Leaves.Find(x => x.Ident == leaf_ident && x.LoginPhase == LinkLogin.Ready); if (l != null) { String sender = packet.ReadString(leaf); String text = packet.ReadString(leaf); l.SendPacket(HubOutbound.HubEmoteToLeaf(l, sender, text)); } }
private static void LeafPart(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } String name = packet.ReadString(leaf); LinkUser user = leaf.Users.Find(x => x.Name == name); if (user != null) { LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubPart(x, leaf.Ident, user)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); leaf.Users.RemoveAll(x => x.Name == name); } }
private static void LeafPrivateText(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint target_leaf = packet; String target_name = packet.ReadString(leaf); String sender_name = packet.ReadString(leaf); String text = packet.ReadString(leaf); Leaf l = LeafPool.Leaves.Find(x => x.Ident == target_leaf && x.LoginPhase == LinkLogin.Ready); if (l != null) { l.SendPacket(HubOutbound.HubPrivateText(l, leaf.Ident, sender_name, target_name, text)); } }
private static void LeafIUserBin(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint target_leaf = packet; Leaf l = LeafPool.Leaves.Find(x => x.Ident == target_leaf && x.LoginPhase == LinkLogin.Ready); if (l != null) { String name = packet.ReadString(leaf); String command = packet.ReadString(leaf); byte[] args = packet; l.SendPacket(HubOutbound.HubIUserBin(l, name, command, args)); } }
private static void LeafScribbleLeaf(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint leaf_ident = packet; Leaf l = LeafPool.Leaves.Find(x => x.Ident == leaf_ident && x.LoginPhase == LinkLogin.Ready); if (l != null) { String sender = packet.ReadString(leaf); uint height = packet; byte[] img = packet; l.SendPacket(HubOutbound.HubScribbleLeaf(l, sender, height, img)); } }
private static void LeafJoin(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } LinkUser user = new LinkUser(leaf.Ident); user.OrgName = packet.ReadString(leaf); user.Name = packet.ReadString(leaf); user.Version = packet.ReadString(leaf); user.Guid = packet; user.FileCount = packet; user.ExternalIP = packet; user.LocalIP = packet; user.Port = packet; user.DNS = packet.ReadString(leaf); user.Browsable = ((byte)packet) == 1; user.Age = packet; user.Sex = packet; user.Country = packet; user.Region = packet.ReadString(leaf); user.Level = (iconnect.ILevel)((byte)packet); user.Vroom = packet; user.CustomClient = ((byte)packet) == 1; user.Muzzled = ((byte)packet) == 1; user.WebClient = ((byte)packet) == 1; user.Encrypted = ((byte)packet) == 1; user.Registered = ((byte)packet) == 1; user.Idle = ((byte)packet) == 1; user.PersonalMessage = String.Empty; user.CustomName = String.Empty; user.Avatar = new byte[] { }; leaf.Users.Add(user); LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubUserlistItem(x, leaf.Ident, user)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); }
private static void LeafBrowse(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint leaf_ident = packet; Leaf l = LeafPool.Leaves.Find(x => x.Ident == leaf_ident && x.LoginPhase == LinkLogin.Ready); if (l != null) { String browsee = packet.ReadString(leaf); String browser = packet.ReadString(leaf); ushort browse_ident = packet; byte mime = packet; l.SendPacket(HubOutbound.HubBrowse(l, leaf.Ident, browsee, browser, browse_ident, mime)); } }
private static void LeafCustomDataTo(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } uint leaf_ident = packet; Leaf l = LeafPool.Leaves.Find(x => x.Ident == leaf_ident && x.LoginPhase == LinkLogin.Ready); if (l != null) { String sender = packet.ReadString(leaf); String target = packet.ReadString(leaf); String ident = packet.ReadString(leaf); byte[] data = packet; l.SendPacket(HubOutbound.HubCustomDataTo(l, sender, target, ident, data)); } }
private static void LeafUserUpdated(Leaf leaf, TCPPacketReader packet) { if (leaf.LoginPhase != LinkLogin.Ready) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } String name = packet.ReadString(leaf); LinkUser user = leaf.Users.Find(x => x.Name == name); if (user != null) { user.Level = (iconnect.ILevel)((byte)packet); user.Muzzled = ((byte)packet) == 1; user.Registered = ((byte)packet) == 1; user.Idle = ((byte)packet) == 1; LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubUserUpdated(x, leaf.Ident, user)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); } }
private static void LeafUserlistEnd(Leaf leaf) { if (leaf.LoginPhase != LinkLogin.AwaitingUserlist) { leaf.SendPacket(HubOutbound.LinkError(LinkError.BadProtocol)); leaf.Disconnect(); return; } leaf.LoginPhase = LinkLogin.Ready; LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubLeafConnected(x, leaf)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); foreach (LinkUser u in leaf.Users) { LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubUserlistItem(x, leaf.Ident, u)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); if (u.CustomName.Length > 0) { LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubCustomName(x, leaf.Ident, u)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); } if (u.Avatar.Length > 0) { LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubAvatar(x, leaf.Ident, u)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); } if (u.PersonalMessage.Length > 0) { LeafPool.Leaves.ForEachWhere(x => x.SendPacket(HubOutbound.HubPersonalMessage(x, leaf.Ident, u)), x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); } } LeafPool.Leaves.ForEachWhere(x => { leaf.SendPacket(HubOutbound.HubLeafConnected(leaf, x)); foreach (LinkUser u in x.Users) { leaf.SendPacket(HubOutbound.HubUserlistItem(leaf, x.Ident, u)); if (u.CustomName.Length > 0) { leaf.SendPacket(HubOutbound.HubCustomName(leaf, x.Ident, u)); } if (u.Avatar.Length > 0) { leaf.SendPacket(HubOutbound.HubAvatar(leaf, x.Ident, u)); } if (u.PersonalMessage.Length > 0) { leaf.SendPacket(HubOutbound.HubPersonalMessage(leaf, x.Ident, u)); } } }, x => x.Ident != leaf.Ident && x.LoginPhase == LinkLogin.Ready); }
private static void LeafPing(Leaf leaf, ulong time) { leaf.Time = time; leaf.SendPacket(HubOutbound.HubPong()); }