成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發(fā)多玩家 Android 游戲時如何處理連接問題

移動開發(fā) Android
我們開發(fā)了一款A(yù)ndroid聊天室應(yīng)用演示,使用了AppWarp(譯注:Appwarp 是創(chuàng)建實時多用戶游戲的跨平臺網(wǎng)絡(luò)引擎),而AppWarp引擎闡明了怎樣處理間歇性的網(wǎng)絡(luò)鏈接故障。這個演示用到了AppWarp的具有網(wǎng)絡(luò)彈性的API。

我們開發(fā)了一款A(yù)ndroid聊天室應(yīng)用演示,使用了AppWarp(譯注:Appwarp 是創(chuàng)建實時多用戶游戲的跨平臺網(wǎng)絡(luò)引擎),而AppWarp引擎闡明了怎樣處理間歇性的網(wǎng)絡(luò)鏈接故障。這個演示用到了AppWarp的具有網(wǎng)絡(luò)彈性的API。

為什么需要網(wǎng)絡(luò)彈性: 在移動設(shè)備中,數(shù)據(jù)連接一直是一個問題。 當(dāng)用戶在移動中,數(shù)據(jù)源將經(jīng)常切換基站,或者在2G和3G之間降級/升級,或切換WiFi,或由于屏幕鎖定或用戶按下home鍵使得應(yīng)用程序切換到后臺運行。 這對依賴持續(xù)數(shù)據(jù)連接的應(yīng)用程序/游戲帶來影響。AppWarp 提供了 強(qiáng)大的功能 來處理 網(wǎng)絡(luò)彈性 問題, 用戶可以通過它 連接丟失的 情況下,保持 應(yīng)用 之前的 狀態(tài)

想知道更多有關(guān)appwarp彈性:點擊這里

包含兩個 Activities 的應(yīng)用

Resilient Chat MainActivity How to handle Connection issues in Android devices while developing Multiplayer Games   AppWarp Resilient Chat ChatActivity How to handle Connection issues in Android devices while developing Multiplayer Games   AppWarp


MainActivity: Main Activity 允許用戶連接到AppWarp服務(wù)端。用戶輸入他們的名字然后連接到AppWarp服務(wù)器。為了啟用彈性特性(Resiliency Feature),你應(yīng)該在初始化WarpClient之后設(shè)置默認(rèn)恢復(fù)間隔(Recovery Allowance interval):

 

  1. private void init(){   
  2.  
  3.    WarpClient.initialize(Constants.apiKey, Constants.secretKey);   
  4.  
  5.     WarpClient.setRecoveryAllowance(120);   
  6.  
  7.    try {   
  8.  
  9.         theClient = WarpClient.getInstance();   
  10.  
  11.     } catch (Exception ex) {   
  12.  
  13.       Toast.makeText(this"Exception in Initilization", Toast.LENGTH_LONG).show();   
  14.  
  15.    }   
  16.  
  17. }  

這會告訴服務(wù)器默認(rèn)恢復(fù)時間間隔,在這個時間內(nèi),即使在連接丟失的情況下,服務(wù)端也不會銷毀用戶session。我們用AppHq 控制臺創(chuàng)建了一個靜態(tài)變量room。一旦連接并注冊到這個room,我們就轉(zhuǎn)向ChatActivity。

  1. public static final String roomId = "1469583531"// static room id defined in Constant.java   
  2.  
  3.     
  4.  
  5.  @Override  
  6.  
  7.  public void onSubscribeRoomDone(RoomEvent event) {   
  8.  
  9.      if(event.getResult()==WarpResponseResultCode.SUCCESS){   
  10.  
  11.         Intent intent = new Intent(this, ChatActivity.class);   
  12.  
  13.          startActivity(intent);   
  14.  
  15.      }else{   
  16.  
  17.         showToastOnUIThread("onSubscribeRoomDone Failed with ErrorCode: "+event.getResult());   
  18.  
  19.     }   
  20.  
  21.  }  

ChatActivity.java 這個 Activity 包含了發(fā)送/接收聊天邏輯,并且也管理聊天日志。上半部分包含了同一個room中參與用戶的列表。綠色的狀態(tài)指示意思是用戶在線,灰色的意思是暫停(臨時連接錯誤)。屏幕下半部分包含了用戶發(fā)送的聊天記錄。在這個activity的啟動后,要想獲取房間中的在線用戶,我們可以調(diào)用

  1. theClient.getLiveRoomInfo(Constants.roomId); 

隨著onGetLiveRoomInfoDone的響應(yīng)動作, 我們在用戶列表適配器中加入?yún)⑴c用戶。

  1. public void onGetLiveRoomInfoDone(final LiveRoomInfoEvent event) {   
  2.  
  3.      if(event.getResult()==WarpResponseResultCode.SUCCESS){   
  4.  
  5.          onlineUserList.clear();   
  6.  
  7.          if(event.getJoinedUsers().length>1){// if more than one user is online   
  8.  
  9.             final String onlineUser[] = Utils.removeLocalUserNameFromArray(event.getJoinedUsers());   
  10.  
  11.              for(int i=0;i<onlineUser.length;i++){   
  12.  
  13.                  User user = new User(onlineUser[i].toString(), true);   
  14.  
  15.                  Log.d(onlineUser[i].toString(), onlineUser[i].toString());   
  16.  
  17.                 onlineUserList.add(user);   
  18.  
  19.              }   
  20.  
  21.         resetAdapter();   
  22.  
  23.     }else{   
  24.  
  25.         showToastOnUIThread("No online user found");   
  26.  
  27.      }   
  28.  
  29.     }else{   
  30.  
  31.        showToastOnUIThread("onGetLiveRoomInfoDone Failed with ErrorCode: "+event.getResult());   
  32.  
  33.     }   
  34.  
  35. }  

處理連接彈性:在任何原因任何用戶與AppWarp服務(wù)器連接中斷的情形下,服務(wù)端將維持連接直到預(yù)定義的恢復(fù)時間,不過它會給房間中的其他用戶發(fā)送一個通知,告知某用戶當(dāng)前處于暫停狀態(tài)。如果用戶在定義的彈性時間內(nèi)恢復(fù)連接狀態(tài),那么其他用戶將獲得該用戶狀態(tài)繼續(xù)的通知。否則用戶將收到OnUserLeftRoom通知,并且將該用戶從OnlineUser列表中刪除。維護(hù)暫停/繼續(xù)狀態(tài):如果我們使用AppWarp彈性特性,在任何用戶與AppWarp服務(wù)器中斷連接時,我們將收到一個通知。

  1. @Override  
  2.  
  3. public void onUserPaused(String locid, boolean isLobby, String userName) {   
  4.  
  5.    for(int i=0;i<onlineUserList.size();i++){   
  6.  
  7.         User user = onlineUserList.get(i);   
  8.  
  9.         if(user.getName().equals(userName)){   
  10.  
  11.            user.setStatus(false);   
  12.  
  13.         }   
  14.  
  15.    }   
  16.  
  17.     resetAdapter();   
  18.  
  19. }   
  20.  
  21.       
  22.  
  23.  @Override  
  24.  
  25.     
  26.  
  27.  public void onUserResumed(String locid, boolean isLobby, String userName) {   
  28.  
  29.      for(int i=0;i<onlineUserList.size();i++){   
  30.  
  31.         User user = onlineUserList.get(i);   
  32.  
  33.          if(user.getName().equals(userName)){   
  34.  
  35.            user.setStatus(true);   
  36.  
  37.          }   
  38.  
  39.      }   
  40.  
  41.    resetAdapter();   
  42.  
  43. }  

恢復(fù)連接:如果用戶的網(wǎng)絡(luò)連接由于某些原因中斷了,比如在2G/3G/WiFi/towers之間進(jìn)行切換,或者其它原因,我們會在ConnectonRequestListener中得到一個連接錯誤,其錯誤代碼為WarpResponseResultCode.CONNECTION_ERROR_RECOVERABLE,通過檢測該錯誤代碼我們可以調(diào)用恢復(fù)連接的API來恢復(fù)我們之間的session。我們建議每隔5秒鐘嘗試進(jìn)行一次重新連接。 

  1. theClient.RecoverConnection();   
  2.  
  3.      
  4.  
  5. @Override  
  6.  
  7. public void onConnectDone(final ConnectEvent event) {   
  8.  
  9.    if(event.getResult() == WarpResponseResultCode.SUCCESS){   
  10.  
  11.         showToastOnUIThread("Connection success");   
  12.  
  13.   }   
  14.  
  15.    else if(event.getResult() == WarpResponseResultCode.SUCCESS_RECOVERED){   
  16.  
  17.         showToastOnUIThread("Connection recovered");   
  18.  
  19.         runOnUiThread(new Runnable() {   
  20.  
  21.         @Override  
  22.  
  23.          public void run() {   
  24.  
  25.         if(progressDialog!=null){   
  26.  
  27.              progressDialog.dismiss();   
  28.  
  29.         }   
  30.  
  31.         progressDialog = ProgressDialog.show(ChatActivity.this"""Please wait..");   
  32.  
  33.      }   
  34.  
  35.    });   
  36.  
  37.     theClient.getLiveRoomInfo(Constants.roomId);   
  38.  
  39.     }   
  40.  
  41.     else if(event.getResult() == WarpResponseResultCode.CONNECTION_ERROR_RECOVERABLE){   
  42.  
  43.         runOnUiThread(new Runnable() {   
  44.  
  45.         @Override  
  46.  
  47.         public void run() {   
  48.  
  49.            progressDialog = ProgressDialog.show(ChatActivity.this"""Recoverable connection error. Recovering session after 5 seconds");   
  50.  
  51.         }   
  52.  
  53.     });   
  54.  
  55.      handler.postDelayed(new Runnable() {   
  56.  
  57.      @Override  
  58.  
  59.     public void run() {   
  60.  
  61.          progressDialog.setMessage("Recovering...");   
  62.  
  63.          theClient.RecoverConnection();   
  64.  
  65.     }   
  66.  
  67.     }, 5000);   
  68.  
  69.      }   
  70.  
  71.      else{   
  72.  
  73.        showToastOnUIThread("Non-recoverable connection error."+event.getResult());   
  74.         handleLeaveRoom();   
  75.  
  76.        this.finish();   
  77.  
  78.      }   
  79.  
  80.      
  81.  
  82.  }  

源代碼可以從我們的 git庫上進(jìn)行下載或查看。如果你有什么問題或者需要進(jìn)一步的幫助,請隨時跟我們聯(lián)系: support@shephertz.com

責(zé)任編輯:張葉青 來源: 開源社區(qū)
相關(guān)推薦

2014-06-03 09:35:19

Javalibgdx

2010-05-17 10:04:45

2011-12-15 12:32:19

JavaNIO

2011-12-08 09:23:26

2011-12-24 21:59:02

iPhone

2022-09-06 10:26:38

前后端分離Vue跨域

2014-09-01 10:56:52

WP8

2010-09-01 15:40:10

DHCP服務(wù)器

2023-04-06 15:19:51

2012-08-29 10:12:13

人才創(chuàng)業(yè)硅谷

2021-08-11 16:57:03

數(shù)據(jù)中心光纖布線電纜管理

2025-03-31 09:59:11

2012-12-28 15:53:53

面試應(yīng)屆畢業(yè)生

2020-04-06 11:56:04

黑客網(wǎng)絡(luò)威脅網(wǎng)絡(luò)攻擊

2017-06-08 20:56:37

2023-07-04 10:16:36

IT員工IT團(tuán)隊主管

2013-03-20 11:01:37

Redis客戶端連接

2019-08-15 10:20:19

云計算技術(shù)安全

2010-03-17 16:35:11

2014-08-28 10:21:37

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩av一区二区在线观看 | 精品国产乱码久久久久久果冻传媒 | 欧美日韩久 | 久久爆操 | 日韩高清一区 | 中文一区二区 | 精品国产精品三级精品av网址 | 免费观看国产视频在线 | 操人视频在线观看 | 在线观看亚洲欧美 | 中文字幕日韩欧美 | 我要看免费一级毛片 | 电影午夜精品一区二区三区 | 亚洲视频精品在线 | 亚洲三区在线播放 | 一区二区在线 | 中文字幕久久久 | av网站免费看 | 精品亚洲一区二区三区四区五区 | 国产午夜视频 | 欧美v免费| 中文字幕日韩欧美 | 二区久久 | 日本在线看片 | 午夜三级在线观看 | 日韩av一区二区在线观看 | 日本成人中文字幕在线观看 | 精品国产免费一区二区三区演员表 | 成人精品在线观看 | 一级片av| 精品乱人伦一区二区三区 | 午夜国产一级片 | 国产一区二区三区四区五区加勒比 | 一级毛片大全免费播放 | 在线激情视频 | 交专区videossex农村 | 亚洲人成人一区二区在线观看 | 国产精品99久久久久久久久久久久 | 婷婷五月色综合香五月 | 精品91久久| 久久久网 |