private Dictionary <string, OthelloPiece> StoreState(JsonCarrier data)
        {
            var result = new Dictionary <string, OthelloPiece>();

            foreach (var pieceState in data.PieacesState)
            {
                //log.Debug(pieceState);
                var index1 = pieceState.IndexOf("\t");
                var index2 = pieceState.IndexOf("\t", index1 + 1);

                var position          = pieceState.Substring(0, index1);
                var color             = pieceState.Substring(index1 + 1, (index2 - index1 - 1));
                var isColliderEnabled = pieceState.Substring(index2 + 1);

                var piece = new OthelloPiece(position, color, isColliderEnabled);
                result.Add(position, piece);
            }
            return(result);
        }
        public JsonCarrier UpdateStatus(JsonCarrier data)
        {
            log.Info("Start UpdateStatus ");
            var res = data;

            try {
                var initPieces   = StoreState(data);
                var lastPosition = data.LastPosition;
                Dictionary <string, OthelloPiece> changePieces = null;

                if (data.RoomNumber == null || data.RoomNumber.Length < 1)
                {
                    // demo mode

                    /*
                     * デモ画面は固定positionに配置する
                     * pieceの色変化に応じたUnity側エフェクトのデバッグ用
                     */
                    log.Debug("roomNumber is empty ");
                    var tempPieces0 = ChangeState(demoPieces, initPieces);
                    lastPosition = GetLastPosition(tempPieces0, initPieces);
                    var tempPieces1 = CheckReverse(lastPosition, tempPieces0);
                    changePieces = SetIsColliderEnabled(tempPieces1);
                    res.IsMyTurn = false.ToString();
                }
                else
                {
                    // play mode
                    log.Debug("roomNumber is  " + data.RoomNumber);
                    if (data.RoomNumber.Contains("temp"))
                    {
                        res.RoomNumber = CreateRoomNumber();
                        res.IsMyTurn   = true.ToString();
                    }
                    if (bool.Parse(data.IsMyTurn))
                    {
                        var tempPieces = CheckReverse(lastPosition, initPieces);
                        changePieces = SetIsColliderEnabled(tempPieces);
                        res.IsMyTurn = SetNextTurn(lastPosition, changePieces);
                    }
                    else
                    {
                        var compPlay    = new CompPlay();
                        var tempPieces0 = compPlay.ChangeStateComp(lastPosition, initPieces);
                        lastPosition = GetLastPosition(tempPieces0, initPieces);
                        var tempPieces1 = CheckReverse(lastPosition, tempPieces0);
                        changePieces = SetIsColliderEnabled(tempPieces1);
                        res.IsMyTurn = true.ToString();
                    }
                }

                //othelloPieces = SetIsColliderEnabled(othelloPieces);

                res.PieacesState = PiecesStateToList(changePieces);
            } catch (Exception ex) {
                log.Warn("fail UpdateStatus " + ex.StackTrace.ToString());
                res.ErrorMessage = ex.StackTrace.ToString();
            }

            log.Info("End UpdateStatus ");
            return(res);
        }