コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: MlbGame.cs プロジェクト: reashore/ConcurrentGames
        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
            }
        }
コード例 #3
0
ファイル: MlbGame.cs プロジェクト: reashore/ConcurrentGames
        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);
            }
        }
コード例 #4
0
ファイル: MlbGame.cs プロジェクト: reashore/ConcurrentGames
        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);
            }
        }