Exemple #1
0
        // 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");
            }
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
            }
        }