示例#1
0
        /// <summary>
        ///     <see cref="Process" /> this instance.
        /// </summary>
        /// <param name="level">
        /// </param>
        /// <exception cref="OverflowException">
        ///     <paramref name="value" /> es menor que <see cref="F:System.TimeSpan.MinValue" /> o mayor que
        ///     <see cref="F:System.TimeSpan.MaxValue" />.O bienEl valor de <paramref name="value" /> es
        ///     <see cref="F:System.Double.PositiveInfinity" />.O bienEl valor de <paramref name="value" /> es
        ///     <see cref="F:System.Double.NegativeInfinity" />.
        /// </exception>
        public override void Process(Level level)
        {
            var p = new Authentification_Failed(this.Client);

            if (this.Version[0] != 2 && this.Version[2] != 2000)
            {
                this.Client.State = 0;
                p.SetErrorCode(CodesFail.NEW_VERSION);
                if (this.Version[0] > 2)
                {
                    p.SetReason("Esta versión de cliente es superior a la aceptada por el servidor.");
                }
                else if (this.Version[2] < 2000)
                {
                    p.SetReason("Esta versión de cliente es menor a la aceptada por el servidor.");
                }
                else
                {
                    p.SetReason("Este cliente no es aceptado por el servidor.");
                }

                p.Send();
                return;
            }

            if (Settings.Maintenance)
            {
                this.Client.State = State.DISCONNECTED;
                p.SetErrorCode(CodesFail.MAINTENANCE);
                p.SetReason("Duración del mantenimiento: " + TimeSpan.FromMinutes(Settings.MaintenanceDuration));
                p.RemainingTime(Settings.MaintenanceDuration);
                p.Send();
                return;
            }

            if (this.Hash != Constants.Sha)
            {
                p.SetErrorCode(CodesFail.NEW_VERSION);
                p.SetReason("Este cliente no es aceptado por el servidor.");
                p.Send();
            }
            else
            {
                this.Client.State = State.SESSION;
                new Pre_Authentification_OK(this.Client).Send();
            }
        }
示例#2
0
        /// <summary>
        ///     <see cref="Process" /> this instance.
        /// </summary>
        /// <param name="level">
        /// </param>
        public override void Process(Level level)
        {
            level = ResourcesManager.GetPlayer(this.UserID);

            if (Convert.ToBoolean(Constants.Patching))
            {
                if (this.MasterHash != ObjectManager.FingerPrint.sha)
                {
                    var p = new Authentification_Failed(this.Client);
                    p.SetErrorCode(CodesFail.NEW_VERSION);
                    p.SetResourceFingerprintData(ObjectManager.FingerPrint.SaveToJson());
                    p.SetContentURL(Constants.PatchURL);
                    p.SetUpdateURL("https://ClashRoyaleSpain.es/");
                    p.Send();
                    return;
                }
            }

            if (level == null)
            {
                level = ObjectManager.CreateAvatar(this.UserID);
                byte[] tokenSeed = new byte[20];
                new Random().NextBytes(tokenSeed);
                SHA1 sha = new SHA1CryptoServiceProvider();
                this.Token = BitConverter.ToString(sha.ComputeHash(tokenSeed)).Replace("-", string.Empty);
                Debug.Write("New Token: " + this.Token);
                level.GetPlayerAvatar().SetCreated(DateTime.UtcNow);
                level.GetPlayerAvatar().SetToken(this.Token);
            }
            else
            {
                if (level.GetPlayerAvatar().GetToken() != this.Token)
                {
                    new Authentification_Failed(this.Client).Send();
                }

                if (level.GetAccountStatus() == 99)
                {
                    var p = new Authentification_Failed(this.Client);
                    p.SetErrorCode(CodesFail.BANNED);
                    p.Send();
                    return;
                }
            }

            ResourcesManager.LogPlayerIn(level, this.Client);
            level.Tick();

            if (level.GetAccountPrivileges() > 0)
            {
                level.GetPlayerAvatar().SetLeagueId(21);
            }

            if (level.GetAccountPrivileges() > 4)
            {
                level.GetPlayerAvatar().SetLeagueId(22);
            }

            level.GetPlayerAvatar().SetIsAndroid(this.isAndroid);
            level.GetPlayerAvatar().SetRegion(this.Region);
            level.GetPlayerAvatar().SetUpdate(DateTime.UtcNow);

            var loginOk = new Authentification_OK(this.Client);

            loginOk.SetAccountId(level.GetPlayerAvatar().GetId());
            loginOk.SetPassToken(this.Token);
            loginOk.SetServerMajorVersion(this.Version[0]);
            loginOk.SetServerBuild(this.Version[1]);
            loginOk.SetContentVersion(this.Version[2]);
            loginOk.SetServerEnvironment("prod");
            loginOk.SetDaysSinceStartedPlaying(10);
            loginOk.SetServerTime(
                Math.Round(level.GetTime().Subtract(new DateTime(1970, 1, 1)).TotalSeconds * 1000).ToString());
            loginOk.SetAccountCreatedDate(level.GetPlayerAvatar().GetCreated().ToString());
            loginOk.SetStartupCooldownSeconds(0);
            loginOk.SetCountryCode("ES");
            loginOk.Send();

            if (level.GetPlayerAvatar().GetBattleID() > 0)
            {
                if (ResourcesManager.Battles.ContainsKey(level.GetPlayerAvatar().GetId()))
                {
                    var SectorPC = new Sector_PC(this.Client)
                    {
                        Battle =
                            ResourcesManager.Battles[
                                level.GetPlayerAvatar().GetId()]
                    };
                    SectorPC.Send();

                    this.Client.State = State.IN_BATTLE;
                }
                else
                {
                    level.GetPlayerAvatar().SetBattleID(0);
                }
            }
            else
            {
                new Own_Home_Data(this.Client).Send();

                if (level.GetPlayerAvatar().GetClan())
                {
                    new Clan_Data(this.Client).Send();
                }
            }
        }