示例#1
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var ping     = new AttentionPing(data);
            var response = new AttentionPingAns(game.getPeerInfo(peer), ping);

            return(PacketHandlerManager.getInstace().broadcastPacketTeam(game.getPeerInfo(peer).getTeam(), response, Channel.CHL_S2C));
        }
示例#2
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            //Builds team info
            var  screenInfo = new LoadScreenInfo(game.getPlayers());
            bool pInfo      = PacketHandlerManager.getInstace().sendPacket(peer, screenInfo, Channel.CHL_LOADING_SCREEN);

            //For all players send this info
            bool bOk = false;

            foreach (var player in game.getPlayers())
            {
                var  loadName     = new LoadScreenPlayerName(player);
                var  loadChampion = new LoadScreenPlayerChampion(player);
                bool pName        = PacketHandlerManager.getInstace().sendPacket(peer, loadName, Channel.CHL_LOADING_SCREEN);
                bool pHero        = PacketHandlerManager.getInstace().sendPacket(peer, loadChampion, Channel.CHL_LOADING_SCREEN);

                bOk = (pName && pHero);

                if (!bOk)
                {
                    break;
                }
            }

            return(pInfo && bOk);
        }
示例#3
0
        private void Init()
        {
            Connections = new List <ClientConnectionInfo>();
            Logger.Initialize();

            LoginManager       = new LoginManager(this);
            EventNotifyManager = new EventNotifyManager(this);

            PacketHandlerManager = new PacketHandlerManager(this);
            PacketSenderManager  = new PacketSenderManager(this);
            ConsoleManager       = new ConsoleManager(this);
            ConfigManager        = new ConfigManager();
            DatabaseManager      = new DatabaseManager(this);
            EncryptionManager    = new EncryptionManager();

            Worlds = new List <World>
            {
                new World(0, "Castle", this) //Just for testing
            };
            ConsoleUtils.Info("Running {0} world instances", Worlds.Count);

            var managers = new List <IGameManager>();

            managers.AddRange(Worlds.Select(w => w.EntityManager));
            managers.Add(LoginManager);
            managers.Add(EventNotifyManager);
            EventBus = new EventBus(managers);

            _host = new Host();
            _host.InitializeServer(ConfigManager.Settings.Port, ConfigManager.Settings.MaxPlayers);
            _host.SetChannelLimit(5);
            ConsoleUtils.Info("Successfully set up and running");
        }
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var version = new SynchVersion(data);
            //Logging->writeLine("Client version: %s", version->version);

            var mapId = Config.gameConfig.map;

            Logger.LogCoreInfo("Current map: " + mapId);

            bool versionMatch = true;

            // Version might be an invalid value, currently it trusts the client
            if (version.version != Config.version)
            {
                versionMatch = false;
                Logger.LogCoreWarning("Client " + version.version + " does not match Server " + Config.version);
            }
            else
            {
                Logger.LogCoreInfo("Accepted client version (" + version.version + ")");
            }

            foreach (var player in game.getPlayers())
            {
                if (player.Item1 == peer->address.host)
                {
                    player.Item2.setVersionMatch(versionMatch);
                    break;
                }
            }
            var answer = new SynchVersionAns(game.getPlayers(), Config.version, "CLASSIC", mapId);

            return(PacketHandlerManager.getInstace().sendPacket(peer, answer, Channel.CHL_S2C));
        }
示例#5
0
        public static void notifyMinionSpawned(Minion m, TeamId team)
        {
            var ms = new MinionSpawn(m);

            PacketHandlerManager.getInstace().broadcastPacketTeam(team, ms, Channel.CHL_S2C);
            notifySetHealth(m);
        }
示例#6
0
    public bool Init()
    {
        // 文件位置
        if (Application.isEditor)
        {
            Framework.Instance.SetWritableRootDir(Application.temporaryCachePath);
            Framework.Instance.SetStreamAssetsRootDir(Application.streamingAssetsPath);
        }
        else
        {
            Framework.Instance.SetWritableRootDir(Application.temporaryCachePath);
            Framework.Instance.SetStreamAssetsRootDir(Application.streamingAssetsPath);
        }

        // console输出
        LoggerSystem.Instance.SetConsoleLogger(new Alkaid.Logger(UnityEngine.Debug.Log));

        // 网络
        PacketFormat         pf = new PacketFormat();
        PacketHandlerManager pm = new PacketHandlerManager();

        NetSystem.Instance.RegisterConnector((int)NetCtr.Lobby, ConnectionType.TCP, pf, pm, ConnectedCallback, null, DisConnectedCallback, null);
//		NetSystem.Instance.RegisterConnector((int)NetCtr.Room, ConnectionType.TCP, pf, pm, conne)

        return(Framework.Instance.Init());
    }
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var emotion = new EmotionPacket(data);

            //for later use -> tracking, etc.
            switch (emotion.id)
            {
            case 0:
                //dance
                //Logging->writeLine("dance");
                break;

            case 1:
                //taunt
                //Logging->writeLine("taunt");
                break;

            case 2:
                //laugh
                //Logging->writeLine("laugh");
                break;

            case 3:
                //joke
                //Logging->writeLine("joke");
                break;
            }
            var response = new EmotionPacket(emotion.id, emotion.netId);

            return(PacketHandlerManager.getInstace().broadcastPacket(response, Channel.CHL_S2C));
        }
示例#8
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var spell = new CastSpell(data);
            //Todo spellslot 0-3 qwer, 4-5 d f, 6-11 items

            // There are some bits triggering this

            /*if ((spell.spellSlotType & 0x0F) > 0)
             * {
             *  Logger.LogCoreInfo("Summoner Spell Cast");
             *  Logger.LogCoreInfo("Type: " + spell.spellSlotType.ToString("x") + ", Slot " + spell.spellSlot + ", coord " + spell.x + " ; " + spell.y + ", coord2 " + spell.x2 + ", " + spell.y2 + ", target NetId " + spell.targetNetId.ToString("x"));
             *  return true;
             * }*/

            var futureProjNetId = Game.GetNewNetID();
            var spellNetId      = Game.GetNewNetID();
            var targetObj       = game.getMap().getObjectById(spell.targetNetId);
            var targetUnit      = targetObj as Unit;

            var s = game.getPeerInfo(peer).getChampion().castSpell(spell.spellSlot, spell.x, spell.y, targetUnit, futureProjNetId, spellNetId);

            if (s == null)
            {
                return(false);
            }

            var response = new CastSpellAns(s, spell.x, spell.y, futureProjNetId, spellNetId);

            PacketHandlerManager.getInstace().broadcastPacket(response, Channel.CHL_S2C);
            return(true);
        }
示例#9
0
 /// <summary>
 /// The class constructon
 /// </summary>
 /// <param name="packetHandlers">PacketHandlers to use</param>
 public Plexer(APacketHandler[] packetHandlers)
 {
     Clients       = new List <Client>();
     ToAddClients  = new List <Client>();
     ToUpgrade     = new List <Client>();
     PacketHandler = new PacketHandlerManager(packetHandlers);
 }
示例#10
0
        private unsafe Sniffer()
        {
            var listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 5478);

            listener.Start();
            new Thread(new ThreadStart(() =>
            {
                while (true)
                {
                    var c  = listener.AcceptTcpClient();
                    writer = new BinaryWriter(c.GetStream());
                    reader = new BinaryReader(c.GetStream());
                }
            })).Start();


            new Thread(new ThreadStart(() =>
            {
                while (true)
                {
                    try
                    {
                        var p = Receive();
                        if (p == null)
                        {
                            continue;
                        }

                        var players = game.getPlayers();
                        if (players.Count < 1)
                        {
                            return;
                        }

                        var player = players[0];
                        if (player.Item2 == null || player.Item2.getPeer() == null)
                        {
                            return;
                        }

                        if (p.s2c)
                        {
                            if (p.broadcast)
                            {
                                PacketHandlerManager.getInstace().broadcastPacket(p.data, IntWarsSharp.Core.Logic.PacketHandlers.Channel.CHL_S2C);
                            }
                            else
                            {
                                PacketHandlerManager.getInstace().sendPacket(player.Item2.getPeer(), p.data, IntWarsSharp.Core.Logic.PacketHandlers.Channel.CHL_S2C);
                            }
                        }
                        else
                        {
                            PacketHandlerManager.getInstace().handlePacket(player.Item2.getPeer(), p.data, IntWarsSharp.Core.Logic.PacketHandlers.Channel.CHL_C2S);
                        }
                    }
                    catch { reader = null; }
                }
            })).Start();
        }
示例#11
0
            public ControllerPacketHandler(NetController net, BaseGameController logic)
            {
                PacketHandlerManager = net.PacketHandlers;

                module = logic;
                PacketHandlerManager.Register(2, OnSyncServerTime);
            }
示例#12
0
        public static void notifyChampionDie(Champion die, Unit killer, int goldFromKill)
        {
            var cd = new ChampionDie(die, killer, goldFromKill);

            PacketHandlerManager.getInstace().broadcastPacket(cd, Channel.CHL_S2C);

            notifyChampionDeathTimer(die);
        }
            public ControllerPacketHandler(NetController net, BaseLoginController logic)
            {
                PacketHandlerManager = net.PacketHandlers;

                module = logic;
                PacketHandlerManager.Register(1001, OnLoginServerResult);
                PacketHandlerManager.Register(1003, OnCreatePlayerResult);
            }
示例#14
0
 public DummyGame()
 {
     _blowfish             = new BlowFish(Encoding.Default.GetBytes("UnitTests stinks"));
     _packetHandlerManager = new PacketHandlerManager(this);
     _map            = new Map(this, 1, 1, 1, true, 1);
     _packetNotifier = new PacketNotifier(this);
     _server         = new Host();
     _server.Create(12345, 123);
 }
            public ControllerPacketHandler(NetController net, BaseSceneController logic)
            {
                PacketHandlerManager = net.PacketHandlers;

                module = logic;
                PacketHandlerManager.Register(1101, OnEnterSceneInfo);
                PacketHandlerManager.Register(1102, OnSpriteEnter);
                PacketHandlerManager.Register(1103, OnSpriteMove);
                PacketHandlerManager.Register(1104, OnSpriteLeave);
            }
示例#16
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var loadInfo = new PingLoadInfo(data);
            var peerInfo = game.getPeerInfo(peer);

            if (peerInfo == null)
            {
                return(false);
            }
            var response = new PingLoadInfo(loadInfo, peerInfo.userId);

            //Logging->writeLine("loaded: %f, ping: %f, %f", loadInfo->loaded, loadInfo->ping, loadInfo->f3);
            return(PacketHandlerManager.getInstace().broadcastPacket(response, Channel.CHL_LOW_PRIORITY, PacketFlags.None));
        }
示例#17
0
        public static void notifyLeaveVision(GameObject o, TeamId team)
        {
            var lv = new LeaveVision(o);

            PacketHandlerManager.getInstace().broadcastPacketTeam(team, lv, Channel.CHL_S2C);

            // Not exactly sure what this is yet
            var c = o as Champion;

            if (o == null)
            {
                var deleteObj = new DeleteObjectFromVision(o);
                PacketHandlerManager.getInstace().broadcastPacketTeam(team, deleteObj, Channel.CHL_S2C);
            }
        }
示例#18
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var request = new SpawnParticle.ViewRequest(data);
            var answer  = new SpawnParticle.ViewAnswer(request);

            if (request.requestNo == 0xFE)
            {
                answer.setRequestNo(0xFF);
            }
            else
            {
                answer.setRequestNo(request.requestNo);
            }
            PacketHandlerManager.getInstace().sendPacket(peer, answer, Channel.CHL_S2C, PacketFlags.None);
            return(true);
        }
示例#19
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var skillUpPacket = new SkillUpPacket(data);
            //!TODO Check if can up skill? :)

            var s = game.getPeerInfo(peer).getChampion().levelUpSpell(skillUpPacket.skill);

            if (s == null)
            {
                return(false);
            }

            var skillUpResponse = new SkillUpPacket(game.getPeerInfo(peer).getChampion().getNetId(), skillUpPacket.skill, (byte)s.getLevel(), (byte)s.getOwner().getSkillPoints());

            PacketHandlerManager.getInstace().sendPacket(peer, skillUpResponse, Channel.CHL_GAMEPLAY);
            game.getPeerInfo(peer).getChampion().getStats().setSpellEnabled(skillUpPacket.skill, true);

            return(true);
        }
示例#20
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            game.IncrementReadyPlayers();
            if (game.getReadyPlayers() == game.getPlayers().Count)
            {
                var start = new StatePacket(PacketCmdS2C.PKT_S2C_StartGame);
                PacketHandlerManager.getInstace().broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in game.getPlayers())
                {
                    if (player.Item2.getPeer() == peer && !player.Item2.isVersionMatch())
                    {
                        var dm = new SpawnParticle.DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        PacketHandlerManager.getInstace().sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                }

                game.setStarted(true);
            }

            if (game.isStarted())
            {
                foreach (var p in game.getPlayers())
                {
                    var map = game.getMap();
                    map.addObject(p.Item2.getChampion());

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.getGameTime() / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }
示例#21
0
        public static void notifyUpdatedStats(Unit u, bool partial = true)
        {
            //if (u is Monster)
            //    return;
            var us = new SpawnParticle.UpdateStats(u, partial);
            var t  = u as Turret;

            if (t != null)
            {
                PacketHandlerManager.getInstace().broadcastPacket(us, Channel.CHL_LOW_PRIORITY, ENet.PacketFlags.Unsequenced);
                return;
            }

            if (!partial)
            {
                PacketHandlerManager.getInstace().broadcastPacketTeam(u.getTeam(), us, Channel.CHL_LOW_PRIORITY, ENet.PacketFlags.Unsequenced);
            }
            else
            {
                PacketHandlerManager.getInstace().broadcastPacketVision(u, us, Channel.CHL_LOW_PRIORITY, ENet.PacketFlags.Unsequenced);
            }
        }
示例#22
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            // players[0].Item1 = peer->address.host; //temp
            //   players[0].Item2.setPeer(enetEvent.peer);

            var keyCheck = new KeyCheck(data);
            var userId   = (long)BlowFishCS.BlowFishCS.Decrypt2(game.getBlowfish(), (ulong)keyCheck.checkId);

            if (userId != keyCheck.userId)
            {
                return(false);
            }

            var playerNo = 0;

            foreach (var p in game.getPlayers())
            {
                var player = p.Item2;
                if (player.userId == userId)
                {
                    if (player.getPeer() != null)
                    {
                        Logger.LogCoreWarning("Ignoring new player " + userId + ", already connected!");
                        return(false);
                    }

                    //TODO: add at least port or smth
                    p.Item1 = peer->address.host;
                    player.setPeer(peer);
                    var  response = new KeyCheck(keyCheck.userId, playerNo);
                    bool bRet     = PacketHandlerManager.getInstace().sendPacket(peer, response, Channel.CHL_HANDSHAKE);
                    handleGameNumber(player, peer, null);//Send 0x91 Packet?
                    return(true);
                }
                ++playerNo;
            }
            return(false);
        }
示例#23
0
        public static void notifyEnterVision(GameObject o, TeamId team)
        {
            var m = o as Minion;

            if (m != null)
            {
                var eva = new EnterVisionAgain(m);
                PacketHandlerManager.getInstace().broadcastPacketTeam(team, eva, Channel.CHL_S2C);
                notifySetHealth(m);
                return;
            }

            var c = o as Champion;

            // TODO: Fix bug where enemy champion is not visible to user when vision is acquired until the enemy champion moves
            if (c != null)
            {
                var eva = new EnterVisionAgain(c);
                PacketHandlerManager.getInstace().broadcastPacketTeam(team, eva, Channel.CHL_S2C);
                notifySetHealth(c);
                return;
            }
        }
示例#24
0
        public static void notifyTeleport(Unit u, float _x, float _y)
        {
            // Can't teleport to this point of the map
            if (!map.isWalkable(_x, _y))
            {
                _x = MovementVector.targetXToNormalFormat(u.getPosition().X);
                _y = MovementVector.targetYToNormalFormat(u.getPosition().Y);
            }
            else
            {
                u.setPosition(_x, _y);

                //TeleportRequest first(u.getNetId(), u.teleportToX, u.teleportToY, true);
                //sendPacket(currentPeer, first, Channel.CHL_S2C);

                _x = MovementVector.targetXToNormalFormat(_x);
                _y = MovementVector.targetYToNormalFormat(_y);
            }

            var second = new TeleportRequest(u.getNetId(), _x, _y, false);

            PacketHandlerManager.getInstace().broadcastPacketVision(u, second, Channel.CHL_S2C);
        }
示例#25
0
        private void NetLoop()
        {
            while (!_stopRequested)
            {
                while (_host.Service(ConfigManager.Settings.HostEventTimeout, out Event enetEvent))
                {
                    switch (enetEvent.Type)
                    {
                    case EventType.Connect:
                        ConsoleUtils.Info("Client connected on {0}", enetEvent.Peer.GetRemoteAddress());
                        Connections.Add(new ClientConnectionInfo(enetEvent.Peer));
                        break;

                    case EventType.Receive:
                        PacketHandlerManager.HandleData(enetEvent.Packet.GetBytes(), GetConnectionInfoByPeer(enetEvent.Peer));
                        enetEvent.Packet.Dispose();
                        break;

                    case EventType.Disconnect:
                        ConsoleUtils.Info("Client on {0} disconnected", enetEvent.Peer.GetRemoteAddress());
                        var destroyRequest = new EntityEvent(EntityEventType.EntityDestroyRequest)
                        {
                            EntityID = GetConnectionInfoByPeer(enetEvent.Peer).Player.EntityID
                        };
                        EventBus.PublishEvent(destroyRequest);
                        Connections.Remove(GetConnectionInfoByPeer(enetEvent.Peer));
                        break;

                    default:
                        ConsoleUtils.Warning("Invalid event called");
                        break;
                    }
                }
                Thread.Sleep(1);
            }
            _host.Dispose();
        }
示例#26
0
        public static void notifyDash(Unit u, float _x, float _y, float dashSpeed)
        {
            // TODO: Fix dash: it stays in the current location and doesn't hit a wall if the target location can't be reached
            float _z = u.getZ();

            /*if (!map.isWalkable(_x, _y)) {
             * _x = u.getPosition().X;
             * _y = u.getPosition().Y;
             * }
             * else {
             * // Relative coordinates to dash towards
             * float newX = _x;
             * float newY = _y;
             * _z -= map.getHeightAtLocation(_x, _y);
             * _x = u.getPosition().X - _x;
             * _y = u.getPosition().Y - _y;
             *
             * u.setPosition(newX, newY);
             * }*/

            var dash = new Dash(u, _x, _y, dashSpeed);

            PacketHandlerManager.getInstace().broadcastPacketVision(u, dash, Channel.CHL_S2C);
        }
示例#27
0
        unsafe bool handleGameNumber(ClientInfo client, ENetPeer *peer, ENetPacket *packet)
        {
            var world = new WorldSendGameNumber(1, client.getName());

            return(PacketHandlerManager.getInstace().sendPacket(peer, world, Channel.CHL_S2C));
        }
示例#28
0
 /// <summary>
 /// Adds packet handler.
 /// </summary>
 /// <param name="op"></param>
 /// <param name="handler"></param>
 protected void AddPacketHandler(int op, PacketHandlerManager<ChannelClient>.PacketHandlerFunc handler)
 {
     ChannelServer.Instance.Server.Handlers.Add(op, handler);
 }
示例#29
0
 /// <summary>
 /// Adds packet handler.
 /// </summary>
 /// <param name="op"></param>
 /// <param name="handler"></param>
 protected void AddPacketHandler(int op, PacketHandlerManager <ChannelClient> .PacketHandlerFunc handler)
 {
     ChannelServer.Instance.Server.Handlers.Add(op, handler);
 }
示例#30
0
 public void UnReg()
 {
     PacketHandlerManager.Unregister((ushort)emPacket_Battle.em_SC_PreBattle);
 }
示例#31
0
 public void Reg()
 {
     PacketHandlerManager.Register((ushort)emPacket_Battle.em_SC_PreBattle, ResPreBattle);
 }