// TODO: part of this could be moved to NetworkGameClient. Setting UID for example void JoinRequestedHandler(object sender, GameJoinRequestedEventArgs args) { if (args.Message.UID != ParentViewModel.JoiningGame?.UID) { return; } ParentViewModel.JoiningGame = null; if (args.Message.Request == JoinRequestType.Accept) { ParentViewModel.Game.Client.ConfirmJoin(args.Message.UID, true); // TODO: Work with SynchronizationContext Application.Current.Dispatcher.Invoke(() => { ParentViewModel.Game.IsPlayerHost = false; }); ParentViewModel.Game.UID = args.Message.UID; ParentViewModel.CurrentMenu = MenuType.Deployment; //MessageBox.Show("TODO: INIT GAME (p2)"); } else if (args.Message.Request == JoinRequestType.Decline) // Declined { ParentViewModel.JoiningGame = null; ParentViewModel.CurrentMenu = MenuType.NetworkGame; } else { // TODO MessageBox.Show("TODO: UNHANDLED JOIN REQUEST"); } }
void JoinRequestedHandler(object sender, GameJoinRequestedEventArgs args) { // Might be in network menu and creating a new game if (ParentViewModel.CurrentMenu != MenuType.WaitForJoin) { return; } ParentViewModel.CurrentMenu = MenuType.AcceptJoin; }
void ConfirmJoinCalledHandler(object sender, GameJoinRequestedEventArgs args) { if (args.Message.UID != ParentViewModel.JoiningGame?.UID) { return; } // Player pressed the cancel button while waiting for accept if (args.Message.Request == JoinRequestType.Decline && ParentViewModel.CurrentMenu == MenuType.WaitForAccept) { ParentViewModel.JoiningGame = null; ParentViewModel.CurrentMenu = MenuType.NetworkGame; } }
void JoinRequestedHandler(object sender, GameJoinRequestedEventArgs args) { // Special case: Accepted connection but a decline is incoming! if (ParentViewModel.CurrentMenu == MenuType.Deployment && ParentViewModel.Game.Phase == GamePhase.PlayerJoining) { lock (_joinMessages) { if (CurrentJoinMessage?.JoiningUser == args.Message.JoiningUser && args.Message.Request == JoinRequestType.Decline) { _joinMessages.Clear(); ParentViewModel.CurrentMenu = MenuType.WaitForJoin; } } } // Might be in network menu and creating a new game if (ParentViewModel.CurrentMenu != MenuType.WaitForJoin && ParentViewModel.CurrentMenu != MenuType.AcceptJoin) { return; } // Wrong game (TODO: test if this can happen) if (args.Message.UID != ParentViewModel.Game.UID) { ParentViewModel.Game.Client.ConfirmJoin(args.Message.UID, false); return; } // Handle decline lock (_joinMessages) { if (args.Message.Request == JoinRequestType.Decline) { _joinMessages.RemoveAll(o => o.JoiningUser == args.Message.JoiningUser); } else { _joinMessages.Add(args.Message); } } OnPropertyChanged(nameof(CurrentJoiningPlayer)); OnPropertyChanged(nameof(CurrentJoinMessage)); if (_joinMessages.Count == 0) { ParentViewModel.CurrentMenu = MenuType.WaitForJoin; } }