Beispiel #1
0
 public async Task Leave(IMiniroomDialog dialog,
                         MiniroomLeaveResult leaveResult = MiniroomLeaveResult.UserRequest)
 {
     Users.Remove(dialog.ID);
     using var p = new Packet(SendPacketOperations.MiniRoom);
     p.Encode <byte>((byte)MiniroomAction.MRP_Leave);
     p.Encode <byte>(dialog.ID);
     p.Encode <byte>((byte)leaveResult);
     await BroadcastPacket(p);
 }
Beispiel #2
0
        public async Task <MiniroomEnterResult> Enter(IMiniroomDialog dialog)
        {
            var id = byte.MaxValue;

            foreach (var i in Enumerable.Range(0, MaxUsers))
            {
                if (Users.ContainsKey((byte)i))
                {
                    continue;
                }
                id = (byte)i;
                break;
            }

            if (id >= MaxUsers)
            {
                return(MiniroomEnterResult.Full);
            }
            if (Users.ContainsKey(id))
            {
                return(MiniroomEnterResult.Etc);
            }

            dialog.ID = id;
            Users[id] = dialog.User;

            using (var p = new Packet(SendPacketOperations.MiniRoom))
            {
                p.Encode <byte>((byte)MiniroomAction.MRP_EnterResult);
                p.Encode <byte>((byte)Type);
                p.Encode <byte>(MaxUsers);
                p.Encode <byte>(dialog.ID);

                Users.ForEach(kv =>
                {
                    var character = kv.Value.Character;

                    p.Encode <byte>(kv.Key);

                    character.EncodeLook(p);
                    p.Encode <string>(character.Name);
                    p.Encode <short>(character.Job);
                });
                p.Encode <byte>(0xFF);

                await dialog.User.SendPacket(p);
            }

            using (var p = new Packet(SendPacketOperations.MiniRoom))
            {
                var character = dialog.User.Character;

                p.Encode <byte>((byte)MiniroomAction.MRP_Enter);
                p.Encode <byte>(dialog.ID);

                character.EncodeLook(p);
                p.Encode <string>(character.Name);
                p.Encode <short>(character.Job);

                await BroadcastPacket(dialog.User, p);
            }

            return(MiniroomEnterResult.Success);
        }