public override void RefreshPlayer(PlayerViewModel viewModel)
        {
            base.RefreshPlayer(viewModel);

            if (viewModel.IsSelf == false)
            {
                // ready 按钮
                bool is_ready = false;
                if (viewModel.LBPlayer.CustomProperties.ContainsKey("is_ready"))
                {
                    is_ready = Convert.ToBoolean(viewModel.LBPlayer.CustomProperties ["is_ready"]);
                }
                if (is_ready && viewModel.Status is Ready == false)
                {
                    viewModel.ExecutePlayerReady();
                }
                else if (is_ready == false && viewModel.Status is Wait == false)
                {
                    viewModel.ExecutePlayerCancel();
                }
            }

            // turn
            object my_turn = false;

            if (viewModel.LBPlayer.CustomProperties.TryGetValue("my_turn", out my_turn))
            {
                if (viewModel.Status is MatchDeal && Convert.ToBoolean(my_turn) == false)
                {
                    object is_win = false;
                    if (viewModel.LBPlayer.CustomProperties.TryGetValue("is_win", out is_win))
                    {
                        if (Convert.ToBoolean(is_win))
                        {
                            viewModel.ExecuteWin();
                            CoreGameRoot.ExecuteRefreshSummaryPlayersList();
                        }
                        else
                        {
                            viewModel.ExecuteTurnOff();
                        }
                    }
                }
                else if (viewModel.Status is MatchIdle && Convert.ToBoolean(my_turn))
                {
                    viewModel.ExecuteTurnOn();
                }
            }
        }
        public override void ButtonReadyClicked(PlayerViewModel viewModel)
        {
            base.ButtonReadyClicked(viewModel);

            if (viewModel.Status is Wait || viewModel.Status is Init || viewModel.Status is MatchOver)
            {
                viewModel.ExecutePlayerReady();
            }
            else if (viewModel.Status is Ready)
            {
                viewModel.ExecutePlayerCancel();
            }

            viewModel.ExecuteRefreshPlayer();
        }