Ejemplo n.º 1
0
        public override void Handle(User sender, InPacket packetReader)
        {
            if (sender.Authenticated)
            {
                sbyte target = packetReader.ReadSbyte();;
                if (target >= 0 && target <= Core.Constants.maxChannelsCount)
                {
                    if (Enum.IsDefined(typeof(ChannelType), target))
                    {
                        sender.SetChannel((ChannelType)target);
                        sender.Send(new Packets.ChangeChannel(sender.Channel));

                        var result = Managers.ChannelManager.Instance.Get(sender.Channel).Rooms.Select(n => n.Value)
                                     .Where(n => n.ID >= (uint)(8 * sender.RoomListPage) && n.ID < (uint)(8 * (sender.RoomListPage + 1))).OrderBy(n => n.ID);

                        sender.Send(new Packets.RoomList(sender.RoomListPage, new ArrayList(result.ToArray())));
                    }
                    else
                    {
                        sender.Disconnect(); // Channel is not defined?
                    }
                }
                else
                {
                    sender.Disconnect(); // Channel is out of range.
                }
            }
            else
            {
                sender.Disconnect(); // Unauthorized user.
            }
        }
Ejemplo n.º 2
0
        public override void Handle(User sender, InPacket packetReader)
        {
            if (sender.Authenticated)
            {
                if (sender.Room == null)
                {
                    sbyte direction   = (sbyte)(packetReader.ReadSbyte(0) - packetReader.ReadSbyte(2));
                    bool  waitingOnly = packetReader.ReadBool(1);

                    if (direction == -1)
                    {
                        if (sender.RoomListPage > 0)
                        {
                            sender.RoomListPage = (byte)(sender.RoomListPage - 1);
                        }
                        else
                        {
                            sender.RoomListPage = 0;
                        }
                    }
                    else if (direction == 1 && sender.RoomListPage < byte.MaxValue)
                    {
                        sender.RoomListPage += 1;
                    }

                    var result = Managers.ChannelManager.Instance.Get(sender.Channel).Rooms.Select(n => n.Value);

                    if (waitingOnly)
                    {
                        result = result.Where(n => n.State == Enums.RoomState.Waiting).OrderByDescending(n => n.ID).Take(8).OrderBy(n => n.ID);
                    }
                    else
                    {
                        result = result.Where(n => n.ID >= (uint)(8 * sender.RoomListPage) && n.ID < (uint)(8 * (sender.RoomListPage + 1))).OrderBy(n => n.ID);
                    }

                    sender.Send(new Packets.RoomList(sender.RoomListPage, new ArrayList(result.ToArray())));
                }
            }
            else
            {
                sender.Disconnect(); // Unauthorized user.
            }
        }