等候室活动没有找到其他用户

时间:2016-08-22 19:04:25

标签: android android-studio google-play-games multiplayer

我尝试开发多人游戏。但是,当它显示等候室活动时,与其他玩家没有任何联系。我和朋友的手机一起试试,两人都被困在等候室。我忘记了代码中的内容吗?请告诉我。 id和Developer Console设置正常。

public class ActivityLogin extends Activity implements
    View.OnClickListener,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    RoomUpdateListener,
    RealTimeMessageReceivedListener,
    RoomStatusUpdateListener {

(game variables)

private byte[] my_send_msg = new byte[2];
private final static int[] SCREENS = {R.id.login_screen, R.id.wait_screen, R.id.game_screen};
private final static int[] CLICKABLES = {
        R.id.start_game, R.id.sign_out_button, R.id.sign_in_button};

private GoogleApiClient mGoogleApiClient;
private final static int RC_SIGN_IN = 9001;
private final static int RC_WAITING_ROOM = 10002;
private boolean mResolvingConnectionFailure = false;
private boolean mAutoStartSignInFlow = true;
private boolean mSignInClicked = false;
private String mRoomId = null;
private ArrayList<Participant> mParticipants = null;
private String mMyId = null;
private int mCurScreen = -1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    for (int id : CLICKABLES) {
        findViewById(id).setOnClickListener(this);
    }

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Games.API).addScope(Games.SCOPE_GAMES)
            .build();
}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == RC_SIGN_IN) {
        mSignInClicked = false;
        mResolvingConnectionFailure = false;
        if (resultCode == RESULT_OK) {
            mGoogleApiClient.connect();
        } else {
            BaseGameUtils.showActivityResultError(this, requestCode, resultCode, R.string.signin_failure);
        }
    }

    if (requestCode == RC_WAITING_ROOM) {
        if (resultCode == Activity.RESULT_OK) {
            switchToScreen(R.id.game_screen);
        } else if (resultCode == GamesActivityResultCodes.RESULT_LEFT_ROOM) {
            switchToScreen(R.id.login_screen);
        } else if (resultCode == Activity.RESULT_CANCELED) {
            switchToScreen(R.id.login_screen);
        }
    }
    super.onActivityResult(requestCode, resultCode, intent);
}

public void startQuickGame() {
    Bundle am = RoomConfig.createAutoMatchCriteria(1, 1, 0);
    RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this);
    rtmConfigBuilder.setMessageReceivedListener(this);
    rtmConfigBuilder.setRoomStatusUpdateListener(this);
    rtmConfigBuilder.setAutoMatchCriteria(am);
    Games.RealTimeMultiplayer.create(mGoogleApiClient, rtmConfigBuilder.build());
    switchToScreen(R.id.wait_screen);

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent e) {
    if (keyCode == KeyEvent.KEYCODE_BACK && mCurScreen == R.id.game_screen) {
        leaveRoom();
        return true;
    }
    return super.onKeyDown(keyCode, e);
}

public void leaveRoom() {
    if (mRoomId != null) {
        Games.RealTimeMultiplayer.leave(mGoogleApiClient, this, mRoomId);
        mRoomId = null;
        switchToScreen(R.id.wait_screen);
    } else {
        switchToScreen(R.id.login_screen);
    }
}

public void showWaitingRoom(Room room) {
    Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, Integer.MAX_VALUE);
    startActivityForResult(i, RC_WAITING_ROOM);
}

@Override
public void onConnected(@Nullable Bundle connectionHint) {
    switchToScreen(R.id.login_screen);
}

@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    if (mResolvingConnectionFailure) {
        return;
    }

    if (mSignInClicked || mAutoStartSignInFlow) {
        mAutoStartSignInFlow = false;
        mSignInClicked = false;
        mResolvingConnectionFailure = BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, connectionResult,
                RC_SIGN_IN, getResources().getString(R.string.signin_other_error));
    }
    switchToScreen(R.id.login_screen);
}

public void showGameError() {
    BaseGameUtils.makeSimpleDialog(this, getString(R.string.game_problem));
    switchToScreen(R.id.login_screen);
}

@Override
public void onRoomCreated(int statusCode, Room room) {
    if (statusCode != GamesStatusCodes.STATUS_OK) {
        showGameError();
        return;
    }
    mRoomId = room.getRoomId();
    showWaitingRoom(room);
}

@Override
public void onRoomConnected(int statusCode, Room room) {
    if (statusCode != GamesStatusCodes.STATUS_OK) {
        showGameError();
        return;
    }
    updateRoom(room);
}

@Override
public void onLeftRoom(int i, String s) {
    switchToScreen(R.id.login_screen);
}

@Override
public void onJoinedRoom(int statusCode, Room room) {
    if (statusCode != GamesStatusCodes.STATUS_OK) {
        return;
    }
    showWaitingRoom(room);
}

@Override
public void onPeerDeclined(Room room, List<String> arg1) {
    updateRoom(room);
}

@Override
public void onPeerInvitedToRoom(Room room, List<String> arg1) {
    updateRoom(room);
}

@Override
public void onP2PDisconnected(String participant) {
}

@Override
public void onP2PConnected(String participant) {
}

@Override
public void onPeerJoined(Room room, List<String> arg1) {
    updateRoom(room);
}

@Override
public void onPeerLeft(Room room, List<String> peersWhoLeft) {
    updateRoom(room);
}

@Override
public void onRoomAutoMatching(Room room) {
    updateRoom(room);
}

@Override
public void onRoomConnecting(Room room) {
    updateRoom(room);
}

@Override
public void onPeersConnected(Room room, List<String> peers) {
    updateRoom(room);
}

@Override
public void onPeersDisconnected(Room room, List<String> peers) {
    updateRoom(room);
}

public void updateRoom(Room room) {
    if (room != null) {
        mParticipants = room.getParticipants();
    }
}

@Override
public void onConnectedToRoom(Room room) {
    mParticipants = room.getParticipants();
    mMyId = room.getParticipantId(Games.Players.getCurrentPlayerId(mGoogleApiClient));

    if (mRoomId == null) {
        mRoomId = room.getRoomId();
    }
}

@Override
public void onDisconnectedFromRoom(Room room) {
    mRoomId = null;
    showGameError();
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.sign_in_button:
            mSignInClicked = true;
            mGoogleApiClient.connect();
            break;

        case R.id.sign_out_button:
            if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
                Games.signOut(mGoogleApiClient);
                mGoogleApiClient.disconnect();
            }
            mSignInClicked = false;
            break;

        case R.id.start_game:
            startQuickGame();
            break;
  }

@Override
public void onStop() {
    leaveRoom();
    if (mGoogleApiClient == null || !mGoogleApiClient.isConnected()) {
        switchToScreen(R.id.login_screen);
    } else {
        switchToScreen(R.id.wait_screen);
    }
    super.onStop();
    mGoogleApiClient.disconnect();
}

@Override
public void onStart() {
    switchToScreen(R.id.wait_screen);
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
        Toast.makeText(this, "client was already connected", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "Connecting client", Toast.LENGTH_SHORT).show();
        mGoogleApiClient.connect();
    }
    super.onStart();
}

void switchToScreen(int screenId) {
    for (int id : SCREENS) {
        findViewById(id).setVisibility(screenId == id ? View.VISIBLE : View.GONE);
    }
    mCurScreen = screenId;
}

public void broadcastData(String s, int x) {
    if (s.equals("S")) {
        my_send_msg[0] = (int) -1;
    } else if (s.equals("O")) {
        my_send_msg[0] = (int) -2;
    }
    my_send_msg[1] = (byte) x;

    for (Participant p : mParticipants) {
        if (p.getParticipantId().equals(mMyId))
            continue;
        if (p.getStatus() != Participant.STATUS_JOINED)
            continue;
        Games.RealTimeMultiplayer.sendUnreliableMessage(mGoogleApiClient, my_send_msg, mRoomId, p.getParticipantId());
    }
}

@Override
public void onRealTimeMessageReceived(RealTimeMessage rtm) {
    byte[] b = rtm.getMessageData();
    int temp_GRAMMA = (int) b[0];
    String GRAMMA = "";
    if (temp_GRAMMA == -1) {
        GRAMMA = "S";
    } else if (temp_GRAMMA == -2) {
        GRAMMA = "O";
    }
    int KOUMPI = (int) b[1];

    ......................(other code)
}


................................(game code and methods)

0 个答案:

没有答案