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