public synchronized void registerClientDevices(BluetoothDevice[] clientDevices) {
    Log.i(TAG, "클라이언트 배열 등록");
    if (initialized == false) {
      Log.e(TAG, "초기화되지 않았습니다.");
      return;
    }

    if (clientDevices == null) {
      Log.e(TAG, "클라이언트 장치 목록은 null이 될 수 없습니다.");
      return;
    }

    if (clientDevices.length >= minPlayers && clientDevices.length <= maxPlayers
        || Mediator.getInstance().getMode() == Mode.CLIENT) {
      this.clientDevices = clientDevices;

      this.players = new Player[clientDevices.length];

      for (int i = 0; i < clientDevices.length; i++) {
        this.players[i] = new Player();
      }

      // 이 등록으로부터 맵퍼가 사용가능하면 중재자의 정보에 반영
      checkIsAvaiableAndCommit();

    } else {
      Log.e(TAG, "서로 맞지않는 길이 에러 : 클라이언트목록");
    }
  }
  // 등록될 때마다 모두 등록되엇는지 확인 후 완료 보고
  private void checkIsAvaiableAndCommit() {
    Log.i(TAG, "checkIsAvaiableAndCommit() 진입");
    if (isAvailable() == true) {
      Log.i(TAG, "checkIsAvaiableAndCommit() : 시작가능함!");
      Log.i(TAG, "맵퍼 결과 반영 - 최종 연결구성 완료");
      Log.i(TAG, "총 클라이언트(호스트 수) :" + players.length);
      Log.i(TAG, "총 윷 수 :" + yutGameTools.length);
      Log.i(TAG, "총 주사위 수 :" + dicePlusGameTools.length);

      // 완료 보고 // 사실 중재자가 하는게 맞는거같에.. 나중에 바꾸자, 상태 매니저의 핸들러도..
      if (Mediator.getInstance().getMode() == Mode.HOST) {
        Log.i(TAG, "GAME_IS_STARTABLE 핸들러 메시지 전송 직전 모드는 : " + Mediator.getInstance().getMode());
        Message message =
            Mediator.getInstance().getHandler().obtainMessage(AssistanceActivity.GAME_IS_STARTABLE);
        message.sendToTarget();
      }
    }
  }
  public synchronized void registerDice(Die[] dice) {
    Log.i(TAG, "주사위 배열 등록");
    if (initialized == false) Log.e(TAG, "초기화되지 않았습니다.");

    if (dice == null) Log.e(TAG, "주사위 배열은 null이 될 수 없습니다.");

    if (dice.length == exactDicePluses
        || Mediator.getInstance().getMode() == Mode.CLIENT) { // 중요한 태크닉
      this.dice = dice;
      this.dicePlusGameTools = new DicePlusGameTool[dice.length];

      for (int i = 0; i < dice.length; i++) {
        this.dicePlusGameTools[i] = new DicePlusGameTool();
      }

      checkIsAvaiableAndCommit();

    } else {
      Log.e(TAG, "서로 맞지않는 길이 에러 : dice+");
    }
  }
  public synchronized void registerYutDevices(BluetoothDevice[] yutDevices) {

    Log.i(TAG, "윷 배열 등록");

    if (initialized == false) Log.e(TAG, "초기화되지 않았습니다.");

    if (yutDevices == null) Log.e(TAG, "윷 장치목록은 null이 될 수 없습니다.");

    if (yutDevices.length == exactYutGameTools || Mediator.getInstance().getMode() == Mode.CLIENT) {
      this.yutDevices = yutDevices;

      this.yutGameTools = new YutGameTool[yutDevices.length];

      for (int i = 0; i < yutDevices.length; i++) {
        this.yutGameTools[i] = new YutGameTool();
      }

      checkIsAvaiableAndCommit();

    } else {
      Log.e(TAG, "서로 맞지 않는 길이 에러 : yut");
    }
  }