Exemplo n.º 1
0
        internal static IObservable <ApiInfo> GetObservable(string api) =>
        r_ApiObservables.GetOrAdd(api, rpApi =>
        {
            var rResult = Observable.FromEvent <ApiInfo>(
                rpHandler => ApiParserManager.GetParser(rpApi).AfterProcessCompleted += rpHandler,
                rpHandler => ApiParserManager.GetParser(rpApi).AfterProcessCompleted -= rpHandler).Publish();
            rResult.Connect();

            return(rResult);
        });
Exemplo n.º 2
0
        static void FiddlerApplication_BeforeResponse(Session rpSession)
        {
            var rSession = rpSession.Tag as NetworkSession;

            if (rSession != null)
            {
                if (rSession.State == NetworkSessionState.Requested)
                {
                    rSession.State = NetworkSessionState.Responsed;
                }

                if (rSession.FullUrl.OICStartsWith("http://osapi.dmm.com/gadgets/makeRequest"))
                {
                    using (var rCommand = r_Connection.CreateCommand())
                    {
                        rCommand.CommandText = "INSERT INTO anti_blank_screen.history(time, url, body) VALUES(@time, @url, @body);";
                        rCommand.Parameters.AddWithValue("@time", DateTimeOffset.Now.Ticks);
                        rCommand.Parameters.AddWithValue("@url", r_UserIDRegex.Replace(rSession.FullUrl, "******"));

                        var rBody = rpSession.GetResponseBodyAsString();
                        rBody = r_UserIDRegex.Replace(rBody, "******");
                        rBody = r_TokenResponseRegex.Replace(rBody, "******");
                        rCommand.Parameters.AddWithValue("@body", r_UserIDRegex.Replace(rBody, "******"));

                        rCommand.ExecuteNonQuery();
                    }
                }

                var rApiSession = rSession as ApiSession;
                if (rApiSession != null)
                {
                    rSession.ResponseBodyString = rpSession.GetResponseBodyAsString();
                    ApiParserManager.Process(rApiSession);
                }

                var rResourceSession = rSession as ResourceSession;
                if (rResourceSession != null)
                {
                    CacheService.Instance.ProcessResponse(rResourceSession, rpSession);
                }

                if (rResourceSession == null && rApiSession == null)
                {
                    rSession.ResponseBodyString = rpSession.GetResponseBodyAsString();
                }

                if (rpSession.PathAndQuery.OICEquals("/gadget/js/kcs_flash.js"))
                {
                    var rScript   = rpSession.GetResponseBodyAsString();
                    var rModified = false;

                    var rQuality = Preference.Instance.Browser.Flash.Quality;
                    if (rQuality != FlashQuality.Default)
                    {
                        rScript   = r_FlashQualityRegex.Replace(rScript, $"$1{rQuality}$2");
                        rModified = true;
                    }

                    var rRenderMode = Preference.Instance.Browser.Flash.RenderMode;
                    if (rRenderMode != FlashRenderMode.Default)
                    {
                        rScript   = r_FlashRenderModeRegex.Replace(rScript, $"$1{rRenderMode}$2");
                        rModified = true;
                    }

                    if (rModified)
                    {
                        rpSession.utilSetResponseBody(rScript);
                    }
                }

                if (rSession.FullUrl.OICEquals("http://www.dmm.com/netgame_s/kancolle/"))
                {
                    var rSource = rpSession.GetResponseBodyAsString();
                    rSource = r_RemoveGoogleAnalyticsRegex.Replace(rSource, string.Empty);

                    rpSession.utilSetResponseBody(rSource);
                }

                if (rSession.FullUrl.OICEquals(GameConstants.GamePageUrl))
                {
                    ForceOverrideStylesheet(rpSession);

                    var rSource = rpSession.GetResponseBodyAsString();
                    rSource = r_SuppressReloadConfirmation.Replace(rSource, "false");

                    rpSession.utilSetResponseBody(rSource);
                }

                rSession.StatusCode      = rpSession.responseCode;
                rSession.ResponseHeaders = rpSession.ResponseHeaders.Select(r => new SessionHeader(r.Name, r.Value)).ToArray();
            }
        }
Exemplo n.º 3
0
        internal void Process(ApiInfo rpInfo, BattleStage rpFirstStage = null)
        {
            var rData = rpInfo.Data as RawBattleBase;
            var rCombinedFleetData = rData as IRawCombinedFleet;

            FriendAndEnemy = new BattleParticipantSnapshot[rCombinedFleetData == null ? 12 : 24];

            for (var i = 1; i < rData.CurrentHPs.Length; i++)
            {
                if (rData.MaximumHPs[i] != -1)
                {
                    FriendAndEnemy[i - 1] = new BattleParticipantSnapshot(rData.MaximumHPs[i], rData.CurrentHPs[i]);
                }
            }

            FriendMain = FriendAndEnemy.Take(6).TakeWhile(r => r != null).ToArray();
            for (var i = 0; i < FriendMain.Count; i++)
            {
                FriendMain[i].Participant = Owner.Participants.FriendMain[i];
            }

            EnemyMain = FriendAndEnemy.Skip(6).TakeWhile(r => r != null).ToArray();
            for (var i = 0; i < EnemyMain.Count; i++)
            {
                EnemyMain[i].Participant = Owner.Participants.EnemyMain[i];
            }

            if (rCombinedFleetData != null)
            {
                BattleParticipantSnapshot[] rFriendAndEnemyEscort;

                if (rpFirstStage == null)
                {
                    rFriendAndEnemyEscort = rCombinedFleetData.EscortFleetCurrentHPs.Zip(rCombinedFleetData.EscortFleetMaximumHPs,
                                                                                         (rpCurrent, rpMaximum) => rpMaximum != -1 ? new BattleParticipantSnapshot(rpMaximum, rpCurrent) : null).Skip(1).ToArray();
                }
                else
                {
                    IEnumerable <BattleParticipantSnapshot> rFriendEscort = rpFirstStage.FriendEscort;
                    if (rFriendEscort == null)
                    {
                        rFriendEscort = Enumerable.Repeat <BattleParticipantSnapshot>(null, 6);
                    }

                    IEnumerable <BattleParticipantSnapshot> rEnemyEscort = rpFirstStage.EnemyEscort;
                    if (rEnemyEscort == null)
                    {
                        rEnemyEscort = Enumerable.Repeat <BattleParticipantSnapshot>(null, 6);
                    }

                    rFriendAndEnemyEscort = rFriendEscort.Concat(rEnemyEscort).Select(r => r != null ? new BattleParticipantSnapshot(r.Maximum, r.Current) : null).ToArray();
                }

                if (rFriendAndEnemyEscort[0] != null)
                {
                    FriendEscort = rFriendAndEnemyEscort.Take(6).TakeWhile(r => r != null).ToArray();

                    for (var i = 0; i < FriendEscort.Count; i++)
                    {
                        FriendEscort[i].Participant = Owner.Participants.FriendEscort[i];
                        FriendAndEnemy[i + 12]      = FriendEscort[i];
                    }
                }

                if ((rpFirstStage == null && rFriendAndEnemyEscort.Length > 6) || (rpFirstStage != null && rpFirstStage.EnemyEscort != null))
                {
                    EnemyEscort = rFriendAndEnemyEscort.Skip(6).TakeWhile(r => r != null).ToArray();

                    for (var i = 0; i < EnemyEscort.Count; i++)
                    {
                        EnemyEscort[i].Participant = Owner.Participants.EnemyEscort[i];
                        FriendAndEnemy[i + 18]     = EnemyEscort[i];
                    }
                }
            }

            if (FriendEscort == null)
            {
                Friend = FriendMain;
            }
            else
            {
                Friend = FriendMain.Concat(FriendEscort).ToArray();
            }

            if (EnemyEscort == null)
            {
                Enemy = EnemyMain;
            }
            else
            {
                Enemy = EnemyMain.Concat(EnemyEscort).ToArray();
            }

            foreach (var rPhase in Phases)
            {
                try
                {
                    rPhase.Process();
                }
                catch (Exception e)
                {
                    Logger.Write(LoggingLevel.Error, e.Message);
                    ApiParserManager.HandleException(rpInfo.Session, e);
                }
            }

            if (!Owner.IsPractice)
            {
                foreach (var rSnapshot in Friend)
                {
                    var rParticipant = (FriendShip)rSnapshot.Participant;
                    if (rSnapshot.State == BattleParticipantState.HeavilyDamaged && rParticipant.EquipedEquipment.Any(r => r.Info.Type == EquipmentType.DamageControl))
                    {
                        rParticipant.IsDamageControlConsumed = false;
                        rParticipant.IsDamageControlVisible  = true;
                    }
                }
            }
        }