Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.04 KB | None | 0 0
  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.support.annotation.NonNull;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.WindowManager;
  9.  
  10. import com.google.android.gms.common.ConnectionResult;
  11. import com.google.android.gms.common.api.GoogleApiClient;
  12. import com.google.android.gms.games.Games;
  13. import com.google.android.gms.games.GamesActivityResultCodes;
  14. import com.google.android.gms.games.GamesStatusCodes;
  15. import com.google.android.gms.games.multiplayer.Invitation;
  16. import com.google.android.gms.games.multiplayer.Multiplayer;
  17. import com.google.android.gms.games.multiplayer.OnInvitationReceivedListener;
  18. import com.google.android.gms.games.multiplayer.Participant;
  19. import com.google.android.gms.games.multiplayer.realtime.RealTimeMessage;
  20. import com.google.android.gms.games.multiplayer.realtime.RealTimeMessageReceivedListener;
  21. import com.google.android.gms.games.multiplayer.realtime.Room;
  22. import com.google.android.gms.games.multiplayer.realtime.RoomConfig;
  23. import com.google.android.gms.games.multiplayer.realtime.RoomStatusUpdateListener;
  24. import com.google.android.gms.games.multiplayer.realtime.RoomUpdateListener;
  25.  
  26. import java.util.ArrayList;
  27. import java.util.List;
  28.  
  29. public class QuickGame extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, RoomUpdateListener, RealTimeMessageReceivedListener, RoomStatusUpdateListener {
  30.  
  31. // Variable declarations here
  32. public GoogleApiClient mGoogleApiClient;
  33. final static int RC_SELECT_PLAYERS = 10000;
  34. final static int RC_WAITING_ROOM = 10001;
  35. boolean mPlaying = false;
  36.  
  37. // at least 1 players required for our game
  38. final static int MIN_PLAYERS = 2;
  39. private String mRoomId = "PokerApp102";
  40. private Room mRoom;
  41.  
  42. boolean mWaitingRoomFinishedFromCode = false;
  43. private OnInvitationReceivedListener mListener;
  44. private String TAG = "Chips-in";
  45.  
  46. public void onStartMatchClicked(View view) {
  47. Intent intent = Games.RealTimeMultiplayer.getSelectOpponentsIntent(mGoogleApiClient, 1, 2);
  48. startActivityForResult(intent, RC_SELECT_PLAYERS);
  49. }
  50.  
  51. @Override
  52. protected void onCreate(Bundle savedInstanceState) {
  53. super.onCreate(savedInstanceState);
  54. setContentView(R.layout.activity_quick_game);
  55. mGoogleApiClient = new GoogleApiClient.Builder(this)
  56. .addConnectionCallbacks(this)
  57. .addOnConnectionFailedListener(this)
  58. .addApi(Games.API).addScope(Games.SCOPE_GAMES)
  59. .build();
  60. mGoogleApiClient.connect();
  61. }
  62.  
  63.  
  64. // returns whether there are enough players to start the game - in this case 2
  65. boolean shouldStartGame(Room room) {
  66. int connectedPlayers = 0;
  67. for (Participant p : room.getParticipants()) {
  68. if (p.isConnectedToRoom()) ++connectedPlayers;
  69. }
  70. return connectedPlayers >= MIN_PLAYERS;
  71. }
  72.  
  73. // Returns whether the room is in a state where the game should be cancelled.
  74. boolean shouldCancelGame(Room room) {
  75. mRoomId = room.getRoomId();
  76. mRoom = room;
  77. return false;
  78. }
  79.  
  80. private void startQuickGame() {
  81. // auto-matches specified range of players
  82. Bundle am = RoomConfig.createAutoMatchCriteria(1, 2, 0);
  83. // Room configuration
  84. RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
  85. roomConfigBuilder.setAutoMatchCriteria(am);
  86. RoomConfig roomConfig = roomConfigBuilder.build();
  87. // Create RTM room
  88. Games.RealTimeMultiplayer.create(mGoogleApiClient, roomConfig);
  89. // Screen stays on during handshake!
  90. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  91. // go to game screen
  92.  
  93. }
  94.  
  95. @Override
  96. public void onActivityResult(int request, int response, Intent data) {
  97. if (request == RC_SELECT_PLAYERS) {
  98. if (response == Activity.RESULT_OK) {
  99. // get the invitee list
  100. Bundle extras = data.getExtras();
  101. final ArrayList<String> invitees =
  102. data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);
  103.  
  104. // get auto-match criteria
  105. Bundle autoMatchCriteria = null;
  106. int minAutoMatchPlayers =
  107. data.getIntExtra(Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
  108. int maxAutoMatchPlayers =
  109. data.getIntExtra(Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
  110.  
  111. if (minAutoMatchPlayers > 0) {
  112. autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
  113. minAutoMatchPlayers, maxAutoMatchPlayers, 0);
  114. } else {
  115. autoMatchCriteria = null;
  116. }
  117.  
  118. // create the room and specify a variant if appropriate
  119. RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
  120. roomConfigBuilder.addPlayersToInvite(invitees);
  121. if (autoMatchCriteria != null) {
  122. roomConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
  123. }
  124. RoomConfig roomConfig = roomConfigBuilder.build();
  125. Games.RealTimeMultiplayer.create(mGoogleApiClient, roomConfig);
  126.  
  127. // prevent screen from sleeping during handshake
  128. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  129. }
  130. else if (response == Activity.RESULT_CANCELED) {
  131. // Waiting room was dismissed with the back button. The meaning of this
  132. // action is up to the game. You may choose to leave the room and cancel the
  133. // match, or do something else like minimize the waiting room and
  134. // continue to connect in the background.
  135.  
  136. // in this example, we take the simple approach and just leave the room:
  137. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  138. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  139. }
  140. else if (response == GamesActivityResultCodes.RESULT_LEFT_ROOM) {
  141. // player wants to leave the room.
  142. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  143. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  144. }
  145. }
  146. }
  147.  
  148.  
  149. // create a RoomConfigBuilder that's appropriate for your implementation
  150. private RoomConfig.Builder makeBasicRoomConfigBuilder() {
  151. return RoomConfig.builder(this).setMessageReceivedListener(this).setRoomStatusUpdateListener(this);
  152. }
  153.  
  154. public void onConnected(Bundle connectionHint) {
  155.  
  156. if (connectionHint != null) {
  157. Invitation inv = connectionHint.getParcelable(Multiplayer.EXTRA_INVITATION);
  158.  
  159. if (inv != null) {
  160. // accept invitation
  161. RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
  162. roomConfigBuilder.setInvitationIdToAccept(inv.getInvitationId());
  163. Games.RealTimeMultiplayer.join(mGoogleApiClient, roomConfigBuilder.build());
  164.  
  165. // prevent screen from sleeping during handshake
  166. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  167.  
  168. // go to game screen
  169. }
  170. }
  171.  
  172. }
  173.  
  174. @Override
  175. public void onConnectionSuspended(int i) {
  176. Log.d(TAG, "onConnectionSuspended() called. Trying to reconnect.");
  177. mGoogleApiClient.connect();
  178. }
  179.  
  180. // RoomUpdateListener methods:
  181. // this three methods overridden
  182. @Override
  183. public void onRoomCreated(int statusCode, Room room) {
  184. if (statusCode != GamesStatusCodes.STATUS_OK) {
  185. // let screen go to sleep
  186. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  187.  
  188. // show error message, return to main screen.
  189.  
  190. return;
  191. }
  192. // get waiting room intent
  193. Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, Integer.MAX_VALUE);
  194. startActivityForResult(i, RC_WAITING_ROOM);
  195. }
  196.  
  197. @Override
  198. public void onJoinedRoom(int statusCode, Room room) {
  199. if (statusCode != GamesStatusCodes.STATUS_OK) {
  200. // let screen go to sleep
  201. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  202.  
  203. // show error message, return to main screen.
  204.  
  205. return;
  206. }
  207. // get waiting room intent
  208. Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, Integer.MAX_VALUE);
  209. startActivityForResult(i, RC_WAITING_ROOM);
  210. }
  211.  
  212. @Override
  213. public void onRoomConnected(int statusCode, Room room) {
  214. if (statusCode != GamesStatusCodes.STATUS_OK) {
  215. // let screen go to sleep
  216. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  217.  
  218. // show error message, return to main screen.
  219. }
  220. }
  221.  
  222. // Players Connected overridden methods
  223. @Override
  224. public void onPeersConnected(Room room, List<String> peers) {
  225. if (mPlaying) {
  226. // add new player to an ongoing game
  227. } else if (shouldStartGame(room)) {
  228. // start game!
  229. }
  230. }
  231.  
  232. @Override
  233. public void onPeersDisconnected(Room room, List<String> peers) {
  234. if (mPlaying) {
  235. // do game-specific handling of this -- remove player's avatar
  236. // from the screen, etc. If not enough players are left for
  237. // the game to go on, end the game and leave the room.
  238. } else if (shouldCancelGame(room)) {
  239. // cancel the game
  240. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  241. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  242. }
  243. }
  244.  
  245. @Override
  246. public void onPeerLeft(Room room, List<String> peers) {
  247. // peer left -- see if game should be canceled
  248. if (!mPlaying && shouldCancelGame(room)) {
  249. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  250. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  251. }
  252. }
  253.  
  254. @Override
  255. public void onPeerDeclined(Room room, List<String> peers) {
  256. // peer declined invitation -- see if game should be canceled
  257. if (!mPlaying && shouldCancelGame(room)) {
  258. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  259. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  260. }
  261. }
  262.  
  263. @Override
  264. public void onLeftRoom(int statusCode, String roomId) {
  265. // we have left the room; return to main screen.
  266. Log.d(TAG, "onLeftRoom, code " + statusCode);
  267. switchToMainScreen();
  268. }
  269.  
  270. private void switchToMainScreen() {
  271.  
  272. }
  273.  
  274. // RealTimeMessage methods
  275. @Override
  276. public void onRealTimeMessageReceived(RealTimeMessage realTimeMessage) {
  277.  
  278. }
  279.  
  280. // RoomStatusUpdateListenerMethods
  281. @Override
  282. public void onRoomConnecting(Room room) {
  283.  
  284. }
  285.  
  286. @Override
  287. public void onRoomAutoMatching(Room room) {
  288.  
  289. }
  290.  
  291. @Override
  292. public void onPeerInvitedToRoom(Room room, List<String> list) {
  293.  
  294. }
  295.  
  296.  
  297.  
  298. @Override
  299. public void onPeerJoined(Room room, List<String> list) {
  300.  
  301. }
  302.  
  303. @Override
  304. public void onConnectedToRoom(Room room) {
  305.  
  306. }
  307.  
  308. // overridden code
  309. @Override
  310. public void onDisconnectedFromRoom(Room room) {
  311. // leave the room
  312. Games.RealTimeMultiplayer.leave(mGoogleApiClient, null, mRoomId);
  313.  
  314. // clear the flag that keeps the screen on
  315. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  316.  
  317. // show error message and return to main screen
  318. }
  319.  
  320. @Override
  321. public void onP2PConnected(String s) {
  322.  
  323. }
  324.  
  325. @Override
  326. public void onP2PDisconnected(String s) {
  327.  
  328. }
  329.  
  330. @Override
  331. public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  332.  
  333. }
  334. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement