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; }
public void InvitePlayer(FoosPlayerListItem player) { if (!m_IsOrganisingGame) { GameCreationInProgress = true; StatusMessage = c_CustomGame; AddSelf(); } lock (m_PlayerLineUp) { if (m_PlayerLineUp.Count >= c_PlayersPerGame) throw new InvalidOperationException("Cannot add another player, max players reached"); player.GameState = GameState.Pending; if (!m_PlayerLineUp.Contains(player)) m_PlayerLineUp.Add(player); } m_NetworkService.Challenge(player); Task.Factory.StartNew(() => PlayerTimeOutWatcher(player, CancellationToken)); }