Exemplo n.º 1
0
        private void ThreadRun()
        {
            _lastMessage = DateTime.Now;
            PushMessage("Worker starting");
            try
            {
                var client = new AdminServiceClient();

                int observerId = client.CreateObserver(new CreateObserverReq().Prepare()).ObserverId;
                PushMessage($"Created observer: {observerId}");

                while (true)
                {
                    Thread.Sleep(1000);

                    EnGameInfo[] games   = client.ListGames(new ListGamesReq().Prepare()).Games;
                    EnGameInfo   running = games.FirstOrDefault(g => g.State == "Play" || g.State == "Pause");
                    if (running == null)
                    {
                        continue;
                    }

                    PushMessage($"Connecting game {running.GameId} / {running.Label}");

                    string status = client.StartObserving(new StartObservingReq
                    {
                        ObserverId = observerId,
                        GameId     = running.GameId
                    }.Prepare()).Status;

                    PushMessage($"StartObserving: {status}");

                    while (true)
                    {
                        var obs = client.ObserveNextTurn(new ObserveNextTurnReq
                        {
                            ObserverId = observerId,
                            GameId     = running.GameId
                        }.Prepare());

                        PushMessage($"ObserveNextTurn: {obs.Status} {obs.TurnInfo?.Turn}");

                        if (obs.GameInfo.GameState == "Finish")
                        {
                            break;
                        }
                    }

                    PushMessage($"Game finished");
                }
            }
            catch (Exception ex)
            {
                PushMessage($"Exception {ex.GetType().FullName}: {ex.Message}");
            }
        }