Пример #1
0
 private void AlertOnChallengeResponseReceived(IFoosPlayer challenger, bool accepted)
 {
     try
     {
         if (HasAcceptedRemoteGame || m_IsOrganisingGame) return;
         if (accepted)
         {
             HasAcceptedRemoteGame = true;
             OnPropertyChanged("CanCreateGameAuto");
             OnPropertyChanged("CanAddPlayer");
             StatusMessage = c_Accepted;
             var ch = m_PlayerList.FirstOrDefault(p => p.Email.Equals(m_CurrentChallenger.Email, StringComparison.OrdinalIgnoreCase));
             if (ch != null) ch.GameState = GameState.Challenger;
         }
         m_NetworkService.Respond(new ChallengeResponse(challenger, accepted));
     }
     catch (Exception ex)
     {
         if (OnError != null) OnError(this, new ErrorEventArgs(ex));
     }
     finally
     {
         m_CurrentAlert = null;
     }
 }
Пример #2
0
 private void NetworkServiceOnChallengeReceived(ChallengeRequest challengeRequest)
 {
     if (m_IsOrganisingGame)
     {
         m_NetworkService.Respond(new ChallengeResponse(challengeRequest.Challenger, false));
     }
     else if (m_HasAcceptedRemoteGame)
     {
         var sameChallenger = m_CurrentChallenger.Email.Equals(challengeRequest.Challenger.Email, StringComparison.InvariantCultureIgnoreCase);
         m_NetworkService.Respond(new ChallengeResponse(challengeRequest.Challenger, sameChallenger));
     }
     else
     {
         var challenger = m_PlayerList.FirstOrDefault(p => p.Email.Equals(challengeRequest.Challenger.Email, StringComparison.OrdinalIgnoreCase));
         if (challenger != null)
         {
             m_CurrentChallenger = challengeRequest.Challenger;
             Application.Current.Dispatcher.BeginInvoke(new Action(() =>
             {
                 m_CurrentAlert = m_Alerter.GetAlerter();
                 m_CurrentAlert.ChallengeResponseReceived += AlertOnChallengeResponseReceived;
                 m_CurrentAlert.ShowChallengeAlert(challenger);
             }));
         }
     }
 }
Пример #3
0
        public void Reset(bool sendCancel)
        {
            lock (m_PlayerLineUp)
            {
                StatusMessage = c_Idle;
                m_Self.GameState = GameState.None;

                if (m_CurrentAlert != null)
                {
                    m_CurrentAlert.CloseChallengeAlert();
                    m_CurrentAlert = null;
                }
                if (m_HasAcceptedRemoteGame && m_CurrentChallenger != null)
                {
                    if (sendCancel) m_NetworkService.Respond(new ChallengeResponse(m_CurrentChallenger, false));
                    m_CurrentChallenger = null;
                }
                else if (m_IsOrganisingGame && sendCancel)
                {
                    m_NetworkService.CancelGame(m_PlayerLineUp.Where(p => p != m_Self).ToArray());
                }

                m_PlayerLineUp.Clear();
                GameCreationInProgress = false;
                HasAcceptedRemoteGame = false;
                m_Cts.Cancel();

                foreach (var item in m_PlayerList)
                {
                    item.GameState = GameState.None;
                }

                m_Cts.Dispose();
                m_Cts = new CancellationTokenSource();
            }
        }