public JoiningPlayerDelegates(Game.Lobby.JoiningPlayer joiningPlayer)
        {
            _joiningPlayer = joiningPlayer;

            _joiningPlayer.SetMyPlayerId  += OnSetMyPlayerId;
            _joiningPlayer.LobbyException += OnLobbyException;
            _joiningPlayer.Disconnected   += OnDisconnected;
        }
예제 #2
0
        public void JoinGameClick()
        {
            if (string.IsNullOrWhiteSpace(_view.GetPlayerName()))
            {
                _view.ShowNameRequired();
                return;
            }

            var result                 = 0; // 0 = no result yet, 1 = success, 2 = fail
            var joiningPlayer          = new Game.Lobby.JoiningPlayer();
            var joiningPlayerDelegates = new Helpers.JoiningPlayerDelegates(joiningPlayer);

            joiningPlayerDelegates.SetMyPlayerId  += i => result = 1;
            joiningPlayerDelegates.LobbyException += s => _view.ShowException(new Exception(s));
            joiningPlayerDelegates.Disconnected   += () => result = 2;

            _view.SetLoading(true);
            try
            {
                joiningPlayer.Join(_view.GetPlayerName(), _view.GetJoinIp(), _view.GetJoinPort());
            }
            catch (Exception exception)
            {
                result = 2;
                _view.ShowException(exception);
            }

            // Počkat na výsledek
            while (result == 0)
            {
                System.Threading.Thread.Sleep(200);
            }

            _view.SetLoading(false);
            joiningPlayerDelegates.Unsubsribe();

            if (result == 1)
            {
                var networkLobbyView = new NetworkLobby.FormNetworkLobby();
                var networkLobbyGui  = networkLobbyView.GetNetworkLobbyGui();
                networkLobbyGui.SetJoiningPlayer(joiningPlayer);
                networkLobbyView.ShowDialog();

                if (networkLobbyGui.OpenGameWindow && networkLobbyGui.RemoteGame != null)
                {
                    OpenRemoteGame(networkLobbyGui.RemoteGame);
                }
            }
        }
예제 #3
0
        public void SetJoiningPlayer(Game.Lobby.JoiningPlayer joiningPlayer)
        {
            _joiningPlayer = joiningPlayer;
            _joiningPlayer.Disconnected += () =>
            {
                if (_lobbyIsClosed)
                {
                    return;
                }
                _view.ShowLobbyException("Odpojeno ze serveru.");
                _view.CloseLobby();
            };
            _joiningPlayer.LobbyException      += message => _view.ShowLobbyException(message);
            _joiningPlayer.SetMyPlayerId       += OnSetMyPlayerId;
            _joiningPlayer.LobbyPlayersUpdated += OnLobbyPlayersUpdated;
            _joiningPlayer.ChatServerMessage   += OnChatServerMessage;
            _joiningPlayer.ChatPlayerMessage   += OnChatPlayerMessage;
            _joiningPlayer.GameStarting        += OnRemoteGameStarting;

            OnSetMyPlayerId(_joiningPlayer.GetMyPlayerId());

            var lobbyPlayers = _joiningPlayer.GetLobbyPlayers();

            OnLobbyPlayersUpdated(lobbyPlayers);

            foreach (var chatMessage in _joiningPlayer.GetStoredChatMessages())
            {
                if (chatMessage is VsadilNestihl.Networking.Messages.Chat.ChatServerMessage chatServerMessage)
                {
                    OnChatServerMessage(chatServerMessage.Message);
                }

                if (chatMessage is VsadilNestihl.Networking.Messages.Chat.ChatPlayerMessage chatPlayerMessage)
                {
                    var lobbyPlayer = lobbyPlayers.Find(x => x.PlayerId == chatPlayerMessage.PlayerId);
                    if (lobbyPlayer == null)
                    {
                        continue;
                    }

                    OnChatPlayerMessage(lobbyPlayer, chatPlayerMessage.Message);
                }
            }
        }