示例#1
0
    public void Request(PacketManager.PacketID packetId, IPacketHandler packet)
    {
        if (PacketProcessor != null)
        {
            if (PacketProcessor.ContainsKey(packetId) == true)
            {
                PacketProcessor[packetId]();
            }
            else
            {
                Debug.Log(packetId + " NO Support in Server");
            }

            if (
                    packetId == PacketManager.PacketID.QUEST_FINISH ||
                    packetId == PacketManager.PacketID.CHAR_BUYING ||
                    packetId == PacketManager.PacketID.CHAR_UPGRADE ||
                    packetId == PacketManager.PacketID.PARTY_MEMBER_CHARNGE ||
                    packetId == PacketManager.PacketID.REFRESH_POSTBOXGIFT)
            {
                Save();
            }
        }
        
    }
示例#2
0
        public static void SendCommandFailedMessage(Client c)
        {
            _Logger.Print("GameOp command failed. Insufficient privileges. Requster ID -> " + c.GetLevel().GetPlayerAvatar().GetId(), Types.DEBUG);
            var p = new GlobalChatLineMessage(c);

            p.SetChatMessage("GameOp command failed. Insufficient privileges.");
            p.SetPlayerId(0);
            p.SetLeagueId(2);
            string srvname = ConfigurationManager.AppSettings["serverName"];

            p.SetPlayerName(srvname);
            PacketManager.ProcessOutgoingPacket(p);
        }
示例#3
0
        public ISerializablePacket ReadPacket()
        {
            if (_readStream.ShiftRight <bool>())
            {
                var interfaceName      = _readStream.ShiftRight <string>();
                var packet             = PacketManager.CreatePacket(interfaceName);
                var endianBinaryReader = new EndianBinaryReader(_readStream);
                packet.FromBinaryReader(endianBinaryReader);
                return(packet);
            }

            return(null);
        }
示例#4
0
        /// <summary>
        /// Start running service with server components.
        /// </summary>
        /// <param name="serviceId">The service ID.</param>
        /// <param name="networking">The <see cref="IServiceNetworking"/> implementation.</param>
        /// <param name="database">The <see cref="IDatabase"/> implementation.</param>
        /// <param name="packetManager">The server <see cref="PacketManager"/>.</param>
        /// <param name="logManager">The <see cref="ILogManager"/> implementation.</param>
        /// <param name="serverFunctions">The <see cref="IServerFunctions"/> implementation.</param>
        public void Initialize(long serviceId, IServiceNetworking networking, IDatabase database,
                               PacketManager packetManager, ILogManager logManager, IServerFunctions serverFunctions)
        {
            this.serviceId  = serviceId;
            this.logManager = logManager;
            this.registeredPacketDefinitions = new List <PacketDefinition>();
            this.packetManager = packetManager;
            this.Networking    = networking;
            this.Database      = database;
            this.Server        = serverFunctions;

            Run();
        }
示例#5
0
        public NetClient(PacketManager packetManager)
        {
            _packetManager = packetManager;

            _tcpNetClient = new TcpNetClient();
            _udpNetClient = new UdpNetClient();

            _tcpNetClient.RegisterOnConnect(OnConnect);
            _tcpNetClient.RegisterOnConnectFailed(OnConnectFailed);

            // Register the same function for both TCP and UDP receive callbacks
            _udpNetClient.RegisterOnReceive(OnReceiveData);
        }
示例#6
0
        public override void Process(Level level)
        {
            var id = level.GetPlayerAvatar().GetId();
            var l  = ResourcesManager.GetPlayer(id, true);

            if (l != null)
            {
                l.GetPlayerAvatar().SetName(PlayerName);
                var p = new AvatarNameChangeOkMessage(l.GetClient());
                p.SetAvatarName(PlayerName);
                PacketManager.ProcessOutgoingPacket(p);
            }
        }
示例#7
0
    //private void Stat()
    //{
    //    while (true)
    //    {
    //        Thread.Sleep(1000 * 10);
    //    }
    //}

    public void SendBroad(Packet packet, DataClient client = null)
    {
        byte[] buff = PacketManager.GetBuff(packet);

        for (int i = 0; i < m_clientList.Count; ++i)
        {
            if (client != null && m_clientList[i].id == client.id)
            {
                continue;
            }
            m_clientList[i].stream.Write(buff, 0, buff.Length);
        }
    }
示例#8
0
        public new bool recvTimingReq(Packet pkt)
        {
            pkt.ts_issue = GlobalTimer.tick;
            var x = get_req(BitConverter.ToInt32(pkt.ReadData(), 0));

            PacketManager.Collect(pkt);
            Packet new_pkt = new Packet(CMD.ReadResp);

            new_pkt.source    = PacketSource.TraceFetcher;
            new_pkt.linkDelay = Config.linkdelay_tracetetcher_to_insp;
            new_pkt.BuildData(SerializationHelper.SerializeObject(x));
            return(sendTimingResq(PacketSource.Insp, ref new_pkt));
        }
示例#9
0
        public override void Process(Level level)
        {
            level.Tick();

            var alliance = ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

            //player.GetPlayerAvatar().Clean();
            PacketManager.ProcessOutgoingPacket(new OwnHomeDataMessage(Client, level));
            if (alliance != null)
            {
                PacketManager.ProcessOutgoingPacket(new AllianceStreamMessage(Client, alliance));
            }
        }
示例#10
0
 public override void Execute(Level level)
 {
     if (level.GetAccountPrivileges() >= GetRequiredAccountPrivileges())
     {
         var l  = level.GetClient();
         var pm = new GlobalChatLineMessage(l);
         pm.SetPlayerName("System Manager");
         pm.SetLeagueId(22);
         pm.SetChatMessage("Your id: " + level.GetPlayerAvatar().GetId());
         pm.SetPlayerId(0);
         PacketManager.ProcessOutgoingPacket(pm);
     }
 }
示例#11
0
        private static void Main()
        {
            Console.Title = Title;

            ConfigManager.Initialise();
            DatabaseManager.Initialise(ConfigManager.Config.MySql.Authentication, ConfigManager.Config.MySql.DataCentre, ConfigManager.Config.MySql.World);
            GameTableManager.InitialiseLobby(ConfigManager.Config.Server.AssetPath);
            PacketManager.Initialise();
            NetworkManager.Initialise(ConfigManager.Config.Server.LobbyPort);
            AssetManager.Initalise();
            UpdateManager.Initialise();
            CommandManager.Initialise();
        }
示例#12
0
        public override void Process(Level level)
        {
            var targetLevel = ResourcesManager.GetPlayer(AvatarId);

            targetLevel.Tick();
            var clan = ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

            PacketManager.ProcessOutgoingPacket(new VisitedHomeDataMessage(Client, targetLevel, level));
            if (clan != null)
            {
                PacketManager.ProcessOutgoingPacket(new AllianceStreamMessage(Client, clan));
            }
        }
        private void ServerUpdate()
        {
            // isLocalPlayer added to make sure that the server is just used for computation
            // and not for anything else. Its a dumb dedicated sever
            if (!isServer || isLocalPlayer)
            {
                return;
            }

            InputSendPackage inputSendPackageData = PacketManager.GetNextDataReceived();

            if (inputSendPackageData == null)
            {
                return;
            }

            RotatePlayer(inputSendPackageData.horizontal);
            MovePlayerForward(inputSendPackageData.vertical);
            SetMovementAnimation(inputSendPackageData.vertical);
            _screenWrapper.CheckObjectOutOfScreen();

            if (_lastPosition == transform.position && _lastRotation == transform.rotation.eulerAngles)
            {
                return;
            }

            Vector3 position = transform.position;
            Vector3 rotation = transform.rotation.eulerAngles;
            Vector3 velocity = _playerRb.velocity;

            ServerPacketManager.AddPackage(new PositionReceivePackage
            {
                percentX = ExtensionFunctions.Map(position.x, _screenWrapper.LeftMostPoint,
                                                  _screenWrapper.RightMostPoint, -1, 1),
                percentY = ExtensionFunctions.Map(position.y, _screenWrapper.TopMostPoint,
                                                  _screenWrapper.BottomMostPoint, 1, -1),

                velocityX = velocity.x,
                velocityY = velocity.y,

                rotationZ = rotation.z,
                roll      = _roll,

                movementAnimation = inputSendPackageData.vertical > 0,

                timestamp = inputSendPackageData.timestamp
            });

            _lastPosition = position;
            _lastRotation = rotation;
        }
示例#14
0
        void c_ClientAddStatInfo(object sender, ClientAddStatEventArgs e)
        {
            Client      c        = (Client)sender;
            AddStatInfo statinfo = e.Info;

            if (c.MyCharacter.StatPoint >= statinfo.Amount)
            {
                int pointsleft = -1;
                int statafter  = -1;

                switch (statinfo.Stat)
                {
                case 1:     // dex
                    c.MyCharacter.StatPoint -= 1;
                    c.MyCharacter.Dexterity += 1;
                    statafter = c.MyCharacter.Dexterity;
                    break;

                case 2:     // str
                    c.MyCharacter.StatPoint -= 1;
                    c.MyCharacter.Strength  += 1;
                    statafter = c.MyCharacter.Strength;
                    break;

                case 3:     // sta

                    c.MyCharacter.StatPoint -= 1;
                    c.MyCharacter.Stamina   += 1;
                    statafter = c.MyCharacter.Stamina;
                    break;

                case 4:     // energy
                    c.MyCharacter.StatPoint -= 1;
                    c.MyCharacter.Energy    += 1;
                    statafter = c.MyCharacter.Energy;
                    break;
                }
                pointsleft = c.MyCharacter.StatPoint;

                byte[] bufferSendAddStat = PacketManager.SendAddStat(0, statinfo, pointsleft, statafter);
                c.Send(bufferSendAddStat);
            }
            else
            {
                byte[] bufferSendStatError = PacketManager.SendAddStat(3, statinfo, 0, 0);
                c.Send(bufferSendStatError);
            }

            byte[] bufferSendStats = PacketManager.SendStats(c.MyCharacter);
            c.Send(bufferSendStats);
        }
示例#15
0
        public void Load()
        {
            _logManager        = new LogManager();
            _serverInformation = new ServerInformation();

            foreach (var consoleOutputString in _serverInformation.ConsoleLogo)
            {
                Console.WriteLine(consoleOutputString);
            }

            _logManager.Log("Loading " + _serverInformation.ServerName + "...", LogType.Information);

            var stopwatch = Stopwatch.StartNew();

            _configManager = new ConfigManager("Extra/Other/config.ini");

            var databaseStopwatch = Stopwatch.StartNew();

            _mysqlManager = new DatabaseManager(new DatabaseSettings(
                                                    _configManager.GetConfigElement("database.host"),
                                                    _configManager.GetConfigElement("database.username"),
                                                    _configManager.GetConfigElement("database.password"),
                                                    _configManager.GetConfigElement("database.name"),
                                                    int.Parse(_configManager.GetConfigElement("database.port")),
                                                    int.Parse(_configManager.GetConfigElement("database.max_connections"))));

            if (!_mysqlManager.WorkingConnection())
            {
                _logManager.Log("Unable to connect to the MySQL server.", LogType.Error);
                return;
            }

            databaseStopwatch.Stop();
            _logManager.Log("Loaded MySQL [" + databaseStopwatch.ElapsedMilliseconds + "ms]", LogType.Information);

            _socketManager = new SocketManager();
            _gameManager   = new GameManager();
            _packetManager = new PacketManager();
            _utility       = new Utility();

            StartedTime          = DateTime.Now;
            _serverStatusUpdater = new ServerStatusUpdater();

            HabboEncryptionV2.Initialize(new RSAKeys());

            stopwatch.Stop();

            _logManager.Log("Finished Loading! [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Warning);

            Console.ForegroundColor = ConsoleColor.Black;
        }
示例#16
0
        private void GlobalChatBtn_Click_1(object sender, EventArgs e)
        {
            var mail = new AllianceMailStreamEntry();

            foreach (var onlinePlayer in ResourcesManager.GetOnlinePlayers())
            {
                var pm = new GlobalChatLineMessage(onlinePlayer.GetClient());
                pm.SetChatMessage(CMessageTextBox.Text);
                pm.SetPlayerId(0);
                pm.SetLeagueId(22);
                pm.SetPlayerName(MessageSenderNameTextBox.Text);
                PacketManager.ProcessOutgoingPacket(pm);
            }
        }
示例#17
0
        public static void RegisterPacket(Type interfaceType, Type implementType)
        {
            if (interfaceType == null)
            {
                throw new ArgumentNullException(nameof(interfaceType));
            }
            if (implementType == null)
            {
                throw new ArgumentNullException(nameof(implementType));
            }

            PacketManager.Register(interfaceType,
                                   args => ObjectFactory.GetActivator <ISerializablePacket>(implementType.GetConstructors().First())());
        }
示例#18
0
        private void InitializePipeClient()
        {
            Pipe = new NamedPipeClientStream("IViewServerManager");

            PacketManager = new PacketManager();

            MessageStore = new MemoryStream();

            InnerBuffer = new byte[PipeClientConfig.GetBufferSize()];

            ShutdownLock = new object();

            IsPipeShutdown = false;
        }
示例#19
0
        public void OnData()
        {
            PacketReader packetReader = null;

            if (WorldClass2.smethod_1(this.PacketQueue) > 0)
            {
                goto IL_13;
            }
            goto IL_B6;
            uint arg_92_0;

            while (true)
            {
IL_8D:
                uint num;
                switch ((num = (arg_92_0 ^ 728961571u)) % 6u)
                {
                case 1u:
                    goto IL_B6;

                case 2u:
                    WorldClass2.smethod_6(WorldClass2.smethod_4((IPEndPoint)WorldClass2.smethod_3(this.clientSocket)), Module.smethod_33 <string>(1968828782u), WorldClass2.smethod_5((IPEndPoint)WorldClass2.smethod_3(this.clientSocket)));
                    arg_92_0 = 1105268257u;
                    continue;

                case 3u:
                    arg_92_0 = (num * 3788876196u ^ 3971847957u);
                    continue;

                case 4u:
                    packetReader = (PacketReader)WorldClass2.smethod_2(this.PacketQueue);
                    arg_92_0     = (num * 3269895699u ^ 92473324u);
                    continue;

                case 5u:
                    goto IL_13;
                }
                break;
            }
            PacketManager.InvokeHandler(ref packetReader, this);
            return;

IL_13:
            arg_92_0 = 1382663277u;
            goto IL_8D;
IL_B6:
            packetReader = new PacketReader(this.DataBuffer, false, this.initiated);
            arg_92_0     = 1917673249u;
            goto IL_8D;
        }
示例#20
0
        /**
         * Will start the server with the given port and game settings.
         */
        private void StartServer(int port, GameSettings gameSettings)
        {
            Logger.Get().Info(this, $"Starting server v{Version.String}");

            var packetManager = new PacketManager();

            var netServer = new NetServer(packetManager);

            var serverManager = new ServerManager(netServer, gameSettings, packetManager);

            new CommandManager(gameSettings, serverManager);

            serverManager.Start(port);
        }
示例#21
0
 public static void Restart()
 {
     DatabaseManager.Singelton.Save(ResourcesManager.GetInMemoryLevels());
     DatabaseManager.Singelton.Save(ObjectManager.GetInMemoryAlliances());
     foreach (var onlinePlayer in ResourcesManager.GetOnlinePlayers())
     {
         var p = new ShutdownStartedMessage(onlinePlayer.GetClient());
         p.SetCode(5);
         PacketManager.ProcessOutgoingPacket(p);
     }
     Console.WriteLine("[UCS]    Shutdown Message Initiated!");
     Process.Start(Directory.GetCurrentDirectory() + @"\Tools\UCR.exe");
     Environment.Exit(0);
 }
        public override void Execute(Level level)
        {
            var l = ObjectManager.GetRandomOnlinePlayer();

            if (l != null)
            {
                l.Tick();
                PacketManager.ProcessOutgoingPacket(new EnemyHomeDataMessage(level.GetClient(), l, level));
            }
            else
            {
                PacketManager.ProcessOutgoingPacket(new EnemyHomeDataMessage(level.GetClient(), l, level));
            }
        }
示例#23
0
    void Start()
    {
        serverIP   = PlayerPrefs.GetString("ip", "localhost");
        serverPort = PlayerPrefs.GetInt("port", 25565);

        PacketManager.Init();

        packetManager = PacketManager.Instance;

        ws = new WebSocket("ws://" + serverIP + ":" + serverPort + "//");
        RegisterWebSocketListeners(ws);

        ws.Connect();
    }
示例#24
0
        void c_ClientSpawnOtherPlayerInfo(object sender, ClientSpawnOtherPlayerEventArgs e)
        {
            Client           c  = (Client)sender;
            SpawnRequestInfo sr = e.Info;

            Character ch          = characterManager.GetCharacterByCharacterId(sr.CharacterID);
            Client    OtherClient = GetClientByCharacterID(ch.CharacterId);

            byte[] bufferSendOtherPlayers = PacketManager.SendSpawnPlayers(ch);
            c.Send(bufferSendOtherPlayers);

            byte[] bufferSendOtherPlayers2 = PacketManager.SendSpawnPlayers(c.MyCharacter);
            OtherClient.Send(bufferSendOtherPlayers2);
        }
示例#25
0
        void LogUser()
        {
            ResourcesManager.LogPlayerIn(level, Client);
            level.Tick();
            var loginOk = new LoginOkMessage(Client);
            var avatar  = level.GetPlayerAvatar();

            loginOk.SetAccountId(avatar.GetId());
            loginOk.SetPassToken(avatar.GetUserToken());
            loginOk.SetServerMajorVersion(MajorVersion);
            loginOk.SetServerBuild(MinorVersion);
            loginOk.SetContentVersion(ContentVersion);
            loginOk.SetServerEnvironment("prod");
            loginOk.SetDaysSinceStartedPlaying(0);
            loginOk.SetServerTime(Math.Round(level.GetTime().Subtract(new DateTime(1970, 1, 1)).TotalSeconds * 1000).ToString(CultureInfo.InvariantCulture));
            loginOk.SetAccountCreatedDate("1414003838000");
            loginOk.SetStartupCooldownSeconds(0);
            loginOk.SetCountryCode(avatar.GetUserRegion().ToUpper());
            PacketManager.ProcessOutgoingPacket(loginOk);
            PacketManager.ProcessOutgoingPacket(new OwnHomeDataMessage(Client, level));
            var alliance = ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

            if (ResourcesManager.IsPlayerOnline(level))
            {
                var mail = new AllianceMailStreamEntry();
                mail.SetId((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
                mail.SetSenderId(0);
                mail.SetSenderAvatarId(0);
                mail.SetSenderName("Server Manager");
                mail.SetIsNew(0);
                mail.SetAllianceId(0);
                mail.SetSenderLeagueId(22);
                mail.SetAllianceBadgeData(1728059989);
                mail.SetAllianceName("Server Admin");
                mail.SetMessage(ConfigurationManager.AppSettings["AdminMessage"]);
                mail.SetSenderLevel(500);
                var p = new AvatarStreamEntryMessage(level.GetClient());
                p.SetAvatarStreamEntry(mail);
                PacketManager.ProcessOutgoingPacket(p);
            }

            if (alliance != null)
            {
                PacketManager.ProcessOutgoingPacket(new AllianceFullEntryMessage(Client, alliance));
                PacketManager.ProcessOutgoingPacket(new AllianceStreamMessage(Client, alliance));
                PacketManager.ProcessOutgoingPacket(new AllianceWarHistoryMessage(Client));
            }
            PacketManager.ProcessOutgoingPacket(new BookmarkMessage(Client));
        }
示例#26
0
        public void Recieve()
        {
            SetAutosave();

            this.Send(WorldServer.Sandbox.AuthHandler.HandleAuthChallenge());             //SMSG_AUTH_CHALLENGE

            while (WorldSession.ListenWorldSocket && Socket.Connected)
            {
                Thread.Sleep(1);
                if (Socket.Available > 0)
                {
                    byte[] buffer = new byte[Socket.Available];
                    Socket.Receive(buffer, buffer.Length, SocketFlags.None);

                    while (buffer.Length > 0)
                    {
                        IPacketReader pkt = WorldServer.Sandbox.ReadPacket(buffer);
                        if (WorldServer.Sandbox.Opcodes.OpcodeExists(pkt.Opcode))
                        {
                            Opcodes opcode = WorldServer.Sandbox.Opcodes[pkt.Opcode];
                            Log.Message(LogType.DUMP, "RECEIVED OPCODE: {0}, LENGTH: {1}", opcode.ToString(), pkt.Size);
                            PacketManager.InvokeHandler(pkt, this, opcode);
                        }
                        else
                        {
                            Log.Message(LogType.DEBUG, "UNKNOWN OPCODE: 0x{0} ({1}), LENGTH: {2}", pkt.Opcode.ToString("X"), pkt.Opcode, pkt.Size);
                        }

                        if (buffer.Length == pkt.Size)
                        {
                            break;
                        }

                        buffer = buffer.Skip((int)pkt.Size).ToArray();
                    }
                }

                DoAutosave();
            }

            Account?.Save();
            if (Account?.ActiveCharacter != null)
            {
                Account.ActiveCharacter.IsOnline = false;
            }

            Log.Message(LogType.DEBUG, "CLIENT DISCONNECTED {0}", Account?.Name ?? string.Empty);
            Socket.Close();
        }
示例#27
0
        public override void Process(Level level)
        {
            if (m_vChatMessage.Length > 0)
            {
                if (m_vChatMessage[0] == '/')
                {
                    var obj = GameOpCommandFactory.Parse(m_vChatMessage);
                    if (obj != null)
                    {
                        var player = "";
                        if (level != null)
                        {
                            player += " (" + level.GetPlayerAvatar().GetId() + ", " +
                                      level.GetPlayerAvatar().GetAvatarName() + ")";
                        }
                        Debugger.WriteLine("\t" + obj.GetType().Name + player);
                        ((GameOpCommand)obj).Execute(level);
                    }
                }
                else
                {
                    var avatar     = level.GetPlayerAvatar();
                    var allianceId = avatar.GetAllianceId();
                    if (allianceId > 0)
                    {
                        var cm = new ChatStreamEntry();
                        cm.SetId((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
                        cm.SetAvatar(avatar);
                        cm.SetMessage(m_vChatMessage);

                        var alliance = ObjectManager.GetAlliance(allianceId);
                        if (alliance != null)
                        {
                            alliance.AddChatMessage(cm);

                            foreach (var onlinePlayer in ResourcesManager.GetOnlinePlayers())
                            {
                                if (onlinePlayer.GetPlayerAvatar().GetAllianceId() == allianceId)
                                {
                                    var p = new AllianceStreamEntryMessage(onlinePlayer.GetClient());
                                    p.SetStreamEntry(cm);
                                    PacketManager.ProcessOutgoingPacket(p);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#28
0
        public PlayerManager(PacketManager packetManager, Game.Settings.GameSettings gameSettings)
        {
            _gameSettings = gameSettings;

            _skinManager = new SkinManager();

            _playerData = new Dictionary <ushort, ClientPlayerData>();

            // Create the player prefab, used to instantiate player objects
            _playerPrefab = new GameObject(
                "PlayerPrefab",
                typeof(BoxCollider2D),
                typeof(DamageHero),
                typeof(EnemyHitEffectsUninfected),
                typeof(MeshFilter),
                typeof(MeshRenderer),
                typeof(NonBouncer),
                typeof(SpriteFlash),
                typeof(tk2dSprite),
                typeof(tk2dSpriteAnimator),
                typeof(CoroutineCancelComponent)
                )
            {
                layer = 9
            };

            // Add some extra gameObjects related to animation effects
            new GameObject("Attacks")
            {
                layer = 9
            }.transform.SetParent(_playerPrefab.transform);
            new GameObject("Effects")
            {
                layer = 9
            }.transform.SetParent(_playerPrefab.transform);
            new GameObject("Spells")
            {
                layer = 9
            }.transform.SetParent(_playerPrefab.transform);

            _playerPrefab.SetActive(false);
            Object.DontDestroyOnLoad(_playerPrefab);

            // Register packet handlers
            packetManager.RegisterClientPacketHandler <ClientPlayerTeamUpdate>(ClientPacketId.PlayerTeamUpdate,
                                                                               OnPlayerTeamUpdate);
            packetManager.RegisterClientPacketHandler <ClientPlayerSkinUpdate>(ClientPacketId.PlayerSkinUpdate,
                                                                               OnPlayerSkinUpdate);
        }
示例#29
0
        /**
         * Callback for when data is received over the TCP stream
         */
        private void OnReceive(IAsyncResult result)
        {
            var dataLength = 0;

            try {
                dataLength = _stream.EndRead(result);
            } catch (Exception e) {
                Logger.Info(this, $"TCP Receive exception, message: {e.Message}");
            }

            if (dataLength <= 0)
            {
                Logger.Error(this, $"Received incorrect data length: {dataLength}");

                if (!_tcpClient.Connected)
                {
                    Logger.Info(this, "The TCP client is not connected anymore, stopped reading from stream");
                    return;
                }

                // Create new byte array and start listening/reading for new data
                _receivedData = new byte[MaxBufferSize];
                _stream.BeginRead(_receivedData, 0, MaxBufferSize, OnReceive, null);
                return;
            }

            // Create new byte array with exact length of received data
            var trimmedData = new byte[dataLength];

            // Copy over the data to new array
            Array.Copy(_receivedData, trimmedData, dataLength);

            // After the data is copied, create new byte array
            // and start listening/reading for new data
            _receivedData = new byte[MaxBufferSize];
            _stream.BeginRead(_receivedData, 0, MaxBufferSize, OnReceive, null);

            List <Packet.Packet> packets;

            // Lock the leftover data array for synchronous data handling
            // This makes sure that from another asynchronous receive callback we don't
            // read/write to it in different places
            lock (_lock) {
                packets = PacketManager.HandleReceivedData(trimmedData, ref _leftoverData);
            }

            // If callback exists, execute it
            _onReceive?.Invoke(packets);
        }
        private void LocalClientUpdate()
        {
            if (!isLocalPlayer || isServer)
            {
                return;
            }

            float moveZ     = Input.GetAxis(Controls.PlayerVM);
            float moveX     = Input.GetAxis(Controls.PlayerHM);
            float timestamp = Time.time;

            if (isPredictionEnabled)
            {
                RotatePlayer(moveX);
                MovePlayerForward(moveZ);
                SetMovementAnimation(moveZ);
                _screenWrapper.CheckObjectOutOfScreen();

                Vector3 position = transform.position;
                Vector3 rotation = transform.rotation.eulerAngles;
                Vector3 velocity = _playerRb.velocity;

                _predictedPackages.Add(new PositionReceivePackage
                {
                    percentX = ExtensionFunctions.Map(position.x, _screenWrapper.LeftMostPoint,
                                                      _screenWrapper.RightMostPoint, -1, 1),
                    percentY = ExtensionFunctions.Map(position.y, _screenWrapper.TopMostPoint,
                                                      _screenWrapper.BottomMostPoint, 1, -1),

                    velocityX = velocity.x,
                    velocityY = velocity.y,

                    rotationZ = rotation.z,
                    roll      = _roll,

                    movementAnimation = moveZ > 0,

                    timestamp = timestamp,
                });
            }

            PacketManager.AddPackage(new InputSendPackage
            {
                horizontal = moveX,
                vertical   = moveZ,

                timestamp = timestamp
            });
        }
示例#31
0
        static void Main(string[] args)
        {
            Console.Title           = "Ultrapowa Clash Server v0.6.1.1 - Beta 1";
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(
                @"
888     888  .d8888b.   .d8888b.  
888     888 d88P  Y88b d88P  Y88b 
888     888 888    888 Y88b.      
888     888 888         ""Y888b.   
888     888 888            ""Y88b. 
888     888 888    888       ""888 
Y88b. .d88P Y88b  d88P Y88b  d88P 
 ""Y88888P""   ""Y8888P""   ""Y8888P""  
        ");
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Ultrapowa Clash Server");
            Console.WriteLine("version 0.6.1.1 - Beta 1");
            Console.WriteLine("www.ultrapowa.com");
            Console.WriteLine("www.gobelinland.fr");
            Console.WriteLine("Server starting...");
            string           hostName = Dns.GetHostName();
            string           myIP     = Dns.GetHostEntry(hostName).AddressList[0].ToString();
            Gateway          g        = new Gateway();
            PacketManager    ph       = new PacketManager();
            MessageManager   dp       = new MessageManager();
            ResourcesManager rm       = new ResourcesManager();
            ObjectManager    pm       = new ObjectManager();

            dp.Start();
            ph.Start();
            g.Start();
            if (Convert.ToBoolean(ConfigurationManager.AppSettings["apiManager"]))
            {
                ApiManager api = new ApiManager();
                Debugger.SetLogLevel(Int32.Parse(ConfigurationManager.AppSettings["loggingLevel"]));
                Logger.SetLogLevel(Int32.Parse(ConfigurationManager.AppSettings["loggingLevel"]));
                Console.WriteLine("Server started on " + myIP + ":9339 and let's play Clash of Clans!");
                Thread.Sleep(Timeout.Infinite);
            }
            else
            {
                Console.WriteLine("Api Manager disabled...");
                Debugger.SetLogLevel(Int32.Parse(ConfigurationManager.AppSettings["loggingLevel"]));
                Logger.SetLogLevel(Int32.Parse(ConfigurationManager.AppSettings["loggingLevel"]));
                Console.WriteLine("Server started on " + myIP + ":9339 and let's play Clash of Clans!");
                Thread.Sleep(Timeout.Infinite);
            }
        }
示例#32
0
 public void GivePackets(PacketManager pm)
 {
     Packets = pm;
 }
        // EQStreamProcessor is the class that generates the SQL. It calls the relevant patch specific decoder to decode the packets
        // and return the relevant data in a standardized internal format.
        public EQStreamProcessor()
        {
            ZonePointList = null;
            if(_lookups==null)_lookups = ZoneLookups.Deserialize("Configs/ZoneLookups.xml");
            Packets = new PacketManager();

            // Tell the PacketManager to call our Identify method to identify the packet stream. We will then call the different
            // patch specific Identifiers to identify the patch version.

            Packets.SetVersionIdentifierMethod(Identify);

            // Put our supported patch version decoders into the list.

            PatchList = new List<PatchSpecficDecoder>();
            PatchList.Add(new PatchTestApr242014Decoder());

            PatchList.Add(new PatchApril032014Decoder());

            PatchList.Add(new PatchMay122010Decoder());

            PatchList.Add(new PatchJuly132010Decoder());

            PatchList.Add(new PatchTestSep012010Decoder());

            PatchList.Add(new PatchTestSep222010Decoder());

            PatchList.Add(new PatchOct202010Decoder());

            PatchList.Add(new PatchDec072010Decoder());

            PatchList.Add(new PatchFeb082011Decoder());

            PatchList.Add(new PatchMarch152011Decoder());

            PatchList.Add(new PatchMay122011Decoder());

            PatchList.Add(new PatchMay242011Decoder());

            PatchList.Add(new PatchAug042011Decoder());

            PatchList.Add(new PatchNov172011Decoder());

            PatchList.Add(new PatchMar152012Decoder());

            PatchList.Add(new PatchJune252012Decoder());

            PatchList.Add(new PatchJuly132012Decoder());

            PatchList.Add(new PatchAugust152012Decoder());

            PatchList.Add(new PatchDecember102012Decoder());

            PatchList.Add(new PatchJanuary162013Decoder());

            PatchList.Add(new PatchTestServerJanuary162013Decoder());

            PatchList.Add(new PatchTestServerFebruary52013Decoder());

            PatchList.Add(new PatchFebruary112013Decoder());

            PatchList.Add(new PatchMarch132013Decoder());

            PatchList.Add(new PatchApril152013Decoder());

            PatchList.Add(new PatchSoD());
        }