Exemple #1
0
        public GameManager(IFoosNetworkService networkService, IFoosAlerterProvider alerter, ObservableCollection<FoosPlayerListItem> playerList, FoosPlayerListItem self)
        {
            m_NetworkService = networkService;
            m_Alerter = alerter;
            m_PlayerList = playerList;
            m_Self = self;

            m_NetworkService.ChallengeReceived += NetworkServiceOnChallengeReceived;
            m_NetworkService.ChallengeResponse += NetworkServiceOnChallengeResponse;
            m_NetworkService.CancelGameReceived += NetworkServiceOnCancelGameReceived;
        }
        public NotifyWindowViewModel()
        {
            // Load settings
            var endpoint = ConfigurationManager.AppSettings["networkServiceEndpoint"];
            var savedPriorities = Settings.Default.Priorities ?? new StringCollection();
            m_DesiredPlayerOrder = savedPriorities.Cast<string>().ToList();
            UseMinimalAlerts = Settings.Default.UseMinimalAlerts;

            m_PlayerProcessors = new List<IPlayerTransformation>();
            m_PlayerProcessors.Add(new DefaultNameTransformation());

            var localEmail = (Environment.UserName + "@" + Environment.UserDomainName + ".com").ToLowerInvariant();
            m_Self = new FoosPlayerListItem(localEmail, Status.Available, 1) { DisplayName = "You" };

            try
            {
                m_Communicator = new CommunicatorIntegration.CommunicatorIntegration();
                m_PlayerProcessors.Add(new CommunicatorPlayerFilter(m_Communicator));
                m_Communicator.StatusChanged += CommunicatorOnStatusChanged;
                localEmail = m_Communicator.GetLocalUserEmail();
            }
            catch
            {
                // If Communicator isn't working, process player names as best we can from email address
                m_PlayerProcessors.Add(new StatusToUnknownTransformation());
                m_Communicator = null;
                var samurai = new Thread(HonourableSamurai);
                samurai.Start();
            }

            // nasty hack to support WPF designer
            if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
            {
                m_NetworkService = new TestFoosNetworkService();
            }
            else
            {
                m_NetworkService = new FoosNetworkService(endpoint, localEmail, TimeSpan.FromMinutes(1));
            }

            m_FoosPlayers.CollectionChanged += FoosPlayersOnCollectionChanged;
            m_NetworkService.PlayersDiscovered += NetworkServiceOnPlayersDiscovered;
            m_NetworkService.GameStarting += NetworkServiceOnGameStarting;
            m_NetworkService.TableStatusChanged += NetworkServiceOnTableStatusChanged;

            GameManager = new GameManager(m_NetworkService, this, m_FoosPlayers, m_Self);
            GameManager.PropertyChanged += GameManagerOnPropertyChanged;
            GameManager.OnError += GameManagerOnOnError;
        }