private static async Task <Player> ReadPlayerInfoAsync(DataReader reader)
        {
            var json = await ReadStringFromStreamAsync(reader).ConfigureAwait(true);

            var player = JsonConvert.DeserializeObject <Player>(json);

            MultiPlayerData.OtherPlayers[player.NickName] = player;

            var eventArgs = new PlayerInfoReceivedEventArguments(player);

            // Tracking number is available, raise the event.
            if (player.Instrument >= 0)
            {
                OnPlayerInstrumentInfoReceived?.Invoke(eventArgs);
            }
            else if (player.ReadyToStart)
            {
                OnPlayerReadyInfoReceived?.Invoke(eventArgs);
            }
            else
            {
                OnPlayerInfoReceived?.Invoke(eventArgs);
            }

            return(player);
        }
 /// <summary>
 /// NewPlayerJoined.
 /// </summary>
 /// <param name="args">PlayerInfoReceivedEventArguments.</param>
 private async void NewPlayerJoined(PlayerInfoReceivedEventArguments args) => await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
     CoreDispatcherPriority.Normal,
     () =>
 {
     this.pnlOtherPlayers.Visibility = Visibility.Visible;
     var otherPlayerNumber           = 0;
     this.lblOtherPlayerNames.Text   = string.Join(Environment.NewLine, MultiPlayerData.OtherPlayers.Values
                                                   .Select(x => (++otherPlayerNumber).ToString(CultureInfo.InvariantCulture) + ". " + x.NickName).ToArray());
 });
        /// <summary>
        /// PlayerReadyInfoRecieved.
        /// </summary>
        /// <param name="args">PlayerInfoReceivedEventArguments.</param>
        private async void PlayerReadyInfoRecieved(PlayerInfoReceivedEventArguments args) => await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
            CoreDispatcherPriority.Normal,
            () =>
        {
            var otherPlayerNumber         = 0;
            this.lblOtherPlayerNames.Text =
                string.Join(
                    Environment.NewLine,
                    MultiPlayerData.OtherPlayers.Values.Select(x => (++otherPlayerNumber).ToString(CultureInfo.InvariantCulture) + ". " + x.NickName + (x.ReadyToStart ? " - Ready" : string.Empty))
                    .ToArray());

            if (MultiPlayerData.OtherPlayers.Values.All(x => x.ReadyToStart))
            {
                this.pnlAllPlayersAreReady.Visibility = Visibility.Visible;
                this.NextButton.IsEnabled             = true;
            }
        });
 /// <summary>
 /// PlayerInstrumentInfoRecieved.
 /// </summary>
 /// <param name="args">PlayerInfoReceivedEventArguments.</param>
 private async void PlayerInstrumentInfoRecieved(PlayerInfoReceivedEventArguments args) => await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
     CoreDispatcherPriority.Normal,
     this.ShowPlayersInstrumentInfo);