Beispiel #1
0
        private async void OnConnectBttn(object sender, RoutedEventArgs e)
        {
            string username = await(Application.Current.MainWindow as MainWindow).ShowInputAsync("Connect", "You clicked connect");

            this.NetworkConnection.Write(new DrawniteCore.Networking.Data.Message("player/join", new
            {
                LobbyId = Guid.Parse(txtLobbyId.Text)
            }));

            DrawniteCore.Networking.Data.Message returnMessage = null;
            ManualResetEvent receivedSignal = new ManualResetEvent(false);

            this.NetworkConnection.OnReceived += async(client, message) =>
            {
                returnMessage = message;
                receivedSignal.Set();
            };
            receivedSignal.WaitOne();

            int  lobbyPort = returnMessage.Data.LobbyInfo.LobbyPort;
            bool result    = this.NetworkClient.Forward(new System.Net.IPEndPoint(IPAddress.Parse(Constants.SERVER_IP), lobbyPort));

            if (result)
            {
                this.NetworkConnection.Write(new Message("player/join", new
                {
                    Username = username,
                    GUID     = returnMessage.Data.PlayerGuid
                }));
            }

            LobbyStatus gameState   = returnMessage.Data.LobbyInfo.LobbyStatus;
            Guid        lobbyId     = returnMessage.Data.LobbyInfo.LobbyId;
            Guid        playerId    = returnMessage.Data.PlayerGuid;
            Guid        lobbyLeader = returnMessage.Data.LobbyInfo.LobbyLeader;

            switch (gameState)
            {
            case LobbyStatus.AWAITING_START:
                this.NavigationService.Navigate(new LobbyPage(lobbyId, playerId, playerId == lobbyLeader));
                break;

            case LobbyStatus.PLAYING:
                this.NavigationService.Navigate(new GamePage(lobbyId, playerId));
                break;

            case LobbyStatus.AWAITING_RESTART:

                break;

            default:

                break;
            }
        }
Beispiel #2
0
        private void Receive()
        {
            try
            {
                while (active)
                {
                    byte[] lengthBuffer = new byte[4];
                    networkStream.Read(lengthBuffer, 0, lengthBuffer.Length);
                    int receivingByteSize = BitConverter.ToInt32(lengthBuffer, 0);

                    if (receivingByteSize <= 0)
                    {
                        break;
                    }

                    byte[] networkMessage = new byte[receivingByteSize];
                    networkStream.Read(networkMessage, 0, networkMessage.Length);

                    try
                    {
                        Data.Message receivedMessage = Newtonsoft.Json.JsonConvert.DeserializeObject <Data.Message>(Encoding.ASCII.GetString(networkMessage));
                        LastMessage = receivedMessage;
                        OnReceived?.Invoke(this, receivedMessage);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }
            catch (Exception e)
            {
                OnError?.Invoke(this, e);
            }
            finally
            {
                OnDisconnected?.Invoke(this, null);
            }
        }
Beispiel #3
0
        private async void OnHostBttn(object sender, RoutedEventArgs e)
        {
            LoginDialogData data = await(Application.Current.MainWindow as MainWindow).ShowLoginAsync("Host", "Enter username");

            this.NetworkConnection.Write(new DrawniteCore.Networking.Data.Message("player/host", new
            {
                Username = data.Username,
                Password = data.Password
            }));

            DrawniteCore.Networking.Data.Message returnMessage = null;
            ManualResetEvent receivedSignal = new ManualResetEvent(false);

            this.NetworkConnection.OnReceived += async(client, message) =>
            {
                returnMessage = message;
                receivedSignal.Set();
            };
            receivedSignal.WaitOne();

            int  lobbyPort = returnMessage.Data.LobbyInfo.LobbyPort;
            bool result    = this.NetworkClient.Forward(new System.Net.IPEndPoint(IPAddress.Parse(Constants.SERVER_IP), lobbyPort));

            if (result)
            {
                this.NetworkConnection.Write(new Message("player/join", new
                {
                    Username = data.Username,
                    GUID     = returnMessage.Data.PlayerGuid
                }));
            }

            Guid lobbyId     = returnMessage.Data.LobbyInfo.LobbyId;
            Guid playerId    = returnMessage.Data.PlayerGuid;
            Guid lobbyLeader = returnMessage.Data.LobbyInfo.LobbyLeader;

            this.NavigationService.Navigate(new LobbyPage(lobbyId, playerId, playerId == lobbyLeader));
        }