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); });
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(); } }
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; } } } }