private void RaiseRadarGameEvent(string jsonString) { TimeOfLastRadarGameEventOrHeartbeat = DateTime.Now; bool isHeartbeat = jsonString.Contains("heartbeat"); MlbGameEvent mlbGameEvent = null; if (isHeartbeat) { #if DEBUG Logger.Info("Radar heartbeat"); #endif } if (!isHeartbeat) { mlbGameEvent = MlbGameEvent.FromJson(jsonString); } bool isGameEvent = mlbGameEvent != null; if (isGameEvent) { MlbGameEventEventArgs mlbGameEventEventArgs = new MlbGameEventEventArgs { GameEvent = mlbGameEvent }; OnRadarGameEvent(mlbGameEventEventArgs); } }
private void HandleRadarGameEvent(object sender, MlbGameEventEventArgs mlbGameEventEventArgs) { MlbGameEvent mlbGameEvent = mlbGameEventEventArgs.GameEvent; Guid gameId = mlbGameEvent.Payload.Game.Id; if (gameId == GameId) { string eventType = mlbGameEvent.Payload.Event.Type; switch (eventType) { case "event_over": GameOver = true; Logger.Info($"{GameId} ({Description}) Game over"); break; default: Logger.Info($"{GameId} ({Description}) Radar Event type = {eventType}"); break; } // what radar events trigger these calls ProcessRadarGameEvent1(mlbGameEvent); ProcessRadarGameEvent2(mlbGameEvent); ModelUpdateRequired = true; //move into the handler to choose when to update } }
private void ProcessRadarGameEvent2(MlbGameEvent mlbGameEvent) { try { Event gameEvent = mlbGameEvent.Payload.Event; string pitcher = ""; string batter = ""; if (gameEvent.Pitcher != null) { pitcher = $"{gameEvent.Pitcher.FirstName} {gameEvent.Pitcher.LastName}"; } if (gameEvent.Hitter != null) { batter = $"{gameEvent.Hitter.FirstName} {gameEvent.Hitter.LastName}"; } IReadOnlyCollection <Runner> runnerList = new List <Runner>(); if (gameEvent.Runners != null) { runnerList = gameEvent.Runners; } string hkey = $"H,I{MlbGameState.Inning}"; string akey = $"V,I{MlbGameState.Inning}"; double home = 0; if (MlbGameState.Inning <= 9) { if (ModelData[MlbModelDataKeys.Evs].ContainsKey(hkey)) { home = ModelData[MlbModelDataKeys.Evs][hkey]; } } double away = 0; if (MlbGameState.Inning <= 9) { if (ModelData[MlbModelDataKeys.Evs].ContainsKey(akey)) { away = ModelData[MlbModelDataKeys.Evs][akey]; } } string messageJson = $@"{{ ""game"": ""{GameId}"", ""away_runs"": {MlbGameState.Away}, ""away_score"": {away}, ""away_hits"": {MlbGameState.AwayHits}, ""home_score"": {home}, ""home_runs"": {MlbGameState.Home}, ""home_hits"": {MlbGameState.HomeHits}, ""inning"": {MlbGameState.Inning}, ""top_btm"": ""{MlbGameState.InningHalf}"", ""outs"": {MlbGameState.Outs}, ""balls"": {MlbGameState.Balls}, ""strikes"": {MlbGameState.Strikes}, ""bases"": {GetBasesSituation(runnerList)}, ""pitcher"": ""{pitcher}"", ""batter"": ""{batter}"" }}"; if (!Utils.IsValidJson(messageJson)) { throw new Exception($"JSON is invalid: {messageJson}"); } const string eventName = "MLB"; _pusherUtil.SendScoreMessage(messageJson, eventName, GameId.ToString()); } catch (Exception exception) { Logger.Error(exception); } }
private void ProcessRadarGameEvent1(MlbGameEvent mlbGameEvent) { try { if (mlbGameEvent.Metadata == null) { return; } MlbGameState.Status = mlbGameEvent.Metadata.Status; MlbGameState.Inning = mlbGameEvent.Metadata.Inning; MlbGameState.InningHalf = mlbGameEvent.Metadata.InningHalf; Event payloadEvent = mlbGameEvent.Payload.Event; // check to make sure its moving forward int sequence = payloadEvent.SequenceNumber; if (sequence <= MlbGameState.Sequence) { return; } MlbGameState.Sequence = sequence; bool isHit = false; if (mlbGameEvent.Payload.Event.Flags != null) { isHit = mlbGameEvent.Payload.Event.Flags.IsHit; } if (isHit && MlbGameState.InningHalf == "T") { MlbGameState.AwayHits += 1; } if (isHit && MlbGameState.InningHalf == "B") { MlbGameState.HomeHits += 1; } List <Runner> payloadEventRunners = payloadEvent.Runners; MlbGameState.BaseSit = GetBasesSituation(payloadEventRunners); if (payloadEvent.Count != null) { MlbGameState.Balls = payloadEvent.Count.Balls; MlbGameState.Strikes = payloadEvent.Count.Strikes; MlbGameState.Outs = payloadEvent.Count.Outs; if (MlbGameState.Outs >= 3) { //move ahead MlbGameState.Balls = 0; MlbGameState.Strikes = 0; MlbGameState.Outs = 0; MlbGameState.BaseSit = 0; if (MlbGameState.InningHalf == "T") { MlbGameState.InningHalf = "B"; } else if (MlbGameState.InningHalf == "B") { MlbGameState.InningHalf = "T"; MlbGameState.Inning += 1; } } } Event gameEvent = mlbGameEvent.Payload.Event; if (gameEvent.Type == "atbat") { MlbGameState.Balls = 0; MlbGameState.Strikes = 0; } Dictionary <string, double> egtDictionary = ModelData[MlbModelDataKeys.Egt]; egtDictionary["I"] = MlbGameState.Inning; egtDictionary["T"] = MlbGameState.InningHalf == "T" ? 1 : 0; egtDictionary["O"] = MlbGameState.Outs; egtDictionary["B"] = MlbGameState.Balls; egtDictionary["S"] = MlbGameState.Strikes; egtDictionary["RS"] = MlbGameState.BaseSit; // update evs int totalAway = mlbGameEvent.Payload.Game.Away.Runs; int totalHome = mlbGameEvent.Payload.Game.Home.Runs; MlbGameState.Away = totalAway; MlbGameState.Home = totalHome; double awayscore = 0; double homescore = 0; Dictionary <string, double> evsDictionary = ModelData[MlbModelDataKeys.Evs]; if (totalAway != 0) { foreach (KeyValuePair <string, double> scoreItem in evsDictionary) { if (scoreItem.Key.Contains("V")) { if (!scoreItem.Key.Contains($"I{MlbGameState.Inning}")) { awayscore += scoreItem.Value; } } } } if (Utils.AreNotEqual(awayscore, totalAway)) { string key = $"V,I{MlbGameState.Inning}"; evsDictionary[key] = totalAway - awayscore; } if (mlbGameEvent.Payload.Game.Home.Runs != 0) { foreach (KeyValuePair <string, double> scoreItem in evsDictionary) { if (scoreItem.Key.Contains("H")) { if (!scoreItem.Key.Contains($"I{MlbGameState.Inning}")) { homescore += scoreItem.Value; } } } } if (Utils.AreNotEqual(homescore, totalHome)) { string key = $"H,I{MlbGameState.Inning}"; evsDictionary[key] = totalHome - homescore; } } catch (Exception exception) { Logger.Error(exception); } }