コード例 #1
0
 private void AddGameHandler(Enums.GameSubs subId, GameDataHandler handler)
 {
     if (!gameHandlers.ContainsKey((ushort)subId))
     {
         gameHandlers.Add((ushort)subId, handler);
     }
 }
コード例 #2
0
 private void AddGameHandler(Enums.GameSubs subId, Networking.GameDataHandler handler)
 {
     try {
         if (!_gameHandlers.ContainsKey((ushort)subId))
         {
             _gameHandlers.TryAdd((ushort)subId, handler);
         }
     } catch { }
 }
コード例 #3
0
        public void Process(User u, InPacket packet)
        {
            string[] blocks = packet.Blocks;
            ushort   subId  = 0;

            try
            {
                ushort.TryParse(blocks[3], out subId);
            }
            catch { subId = 0; }

            if (subId > 0 && Enum.IsDefined(typeof(Enums.GameSubs), subId))
            {
                lock (handleLock)
                {
                    this.type   = (Enums.GameSubs)subId;
                    this.packet = packet;
                    mapData     = false;
                    updateLobby = false;
                    selfTarget  = false;
                    respond     = false;

                    this.blocks = new string[blocks.Length - 4];
                    Array.Copy(blocks, 4, this.blocks, 0, this.blocks.Length);

                    Room = u.Room;
                    Player p = null;
                    selfTarget = false;

                    try
                    {
                        this.Room.Players.TryGetValue(u.RoomSlot, out p);
                    }
                    catch { p = null; }

                    if (p != null)
                    {
                        this.Player = p;
                        roomSlot    = p.Id;

                        try
                        {
                            Handle();
                        }
                        catch { respond = false; }

                        if (respond)
                        {
                            string[] packetData;
                            if (errorCode == 1)
                            {
                                packetData    = new string[this.blocks.Length + 5];
                                packetData[0] = errorCode.ToString();
                                packetData[1] = roomSlot.ToString();
                                packetData[2] = Room.ID.ToString();
                                packetData[3] = blocks[2];                 // 2 - 0
                                packetData[4] = ((ushort)type).ToString(); // Type

                                Array.Copy(this.blocks, 0, packetData, 5, this.blocks.Length);
                            }
                            else
                            {
                                packetData = new string[] { errorCode.ToString() };
                            }

                            // Generate packet buffer //
                            byte[] buffer = new Packets.GameData(packetData).BuildEncrypted();
                            if (errorCode > 1 || selfTarget)
                            {
                                u.Send(buffer);
                            }
                            else
                            {
                                Room.Send(buffer);
                            }

                            if (mapData)
                            {
                                u.Send(new Packets.MapData(Room));
                            }

                            if (updateLobby)
                            { // Send a update to the lobby :)
                                byte roomPage   = (byte)Math.Floor((decimal)(Room.ID / 8));
                                var  targetList = Managers.ChannelManager.Instance.Get(Room.Channel).Users.Select(n => n.Value).Where(n => n.RoomListPage == roomPage && n.Room == null);
                                if (targetList.Count() > 0)
                                {
                                    byte[] outBuffer = new Packets.RoomUpdate(Room, true).BuildEncrypted();
                                    foreach (User usr in targetList)
                                    {
                                        usr.Send(outBuffer);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                u.Disconnect(); // Wrong id?
            }
        }