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; } }
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); })); } } }
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(); } }