日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
開發(fā)多玩家Android游戲時(shí)如何處理連接問題

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

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、廣陵網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為廣陵等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

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

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

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

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

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

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

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

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

 
 
 
 
  1. theClient.getLiveRoomInfo(Constants.roomId);

隨著onGetLiveRoomInfoDone的響應(yīng)動(dòng)作, 我們?cè)谟脩袅斜磉m配器中加入?yún)⑴c用戶。

 
 
 
 
  1. public void onGetLiveRoomInfoDone(final LiveRoomInfoEvent event) {  
  2.      if(event.getResult()==WarpResponseResultCode.SUCCESS){  
  3.          onlineUserList.clear();  
  4.          if(event.getJoinedUsers().length>1){// if more than one user is online  
  5.             final String onlineUser[] = Utils.removeLocalUserNameFromArray(event.getJoinedUsers());  
  6.              for(int i=0;i
  7.                  User user = new User(onlineUser[i].toString(), true);  
  8.                  Log.d(onlineUser[i].toString(), onlineUser[i].toString());  
  9.                 onlineUserList.add(user);  
  10.              }  
  11.         resetAdapter();  
  12.     }else{  
  13.         showToastOnUIThread("No online user found");  
  14.      }  
  15.     }else{  
  16.        showToastOnUIThread("onGetLiveRoomInfoDone Failed with ErrorCode: "+event.getResult());  
  17.     }  

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

 
 
 
 
  1. @Override 
  2. public void onUserPaused(String locid, boolean isLobby, String userName) {  
  3.    for(int i=0;i
  4.         User user = onlineUserList.get(i);  
  5.         if(user.getName().equals(userName)){  
  6.            user.setStatus(false);  
  7.         }  
  8.    }  
  9.     resetAdapter();  
  10. }  
  11.      
  12.  @Override 
  13.    
  14.  public void onUserResumed(String locid, boolean isLobby, String userName) {  
  15.      for(int i=0;i
  16.         User user = onlineUserList.get(i);  
  17.          if(user.getName().equals(userName)){  
  18.            user.setStatus(true);  
  19.          }  
  20.      }  
  21.    resetAdapter();  

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

 
 
 
 
  1. theClient.RecoverConnection();  
  2.     
  3. @Override 
  4. public void onConnectDone(final ConnectEvent event) {  
  5.    if(event.getResult() == WarpResponseResultCode.SUCCESS){  
  6.         showToastOnUIThread("Connection success");  
  7.   }  
  8.    else if(event.getResult() == WarpResponseResultCode.SUCCESS_RECOVERED){  
  9.         showToastOnUIThread("Connection recovered");  
  10.         runOnUiThread(new Runnable() {  
  11.         @Override 
  12.          public void run() {  
  13.         if(progressDialog!=null){  
  14.              progressDialog.dismiss();  
  15.         }  
  16.         progressDialog = ProgressDialog.show(ChatActivity.this, "", "Please wait..");  
  17.      }  
  18.    });  
  19.     theClient.getLiveRoomInfo(Constants.roomId);  
  20.     }  
  21.     else if(event.getResult() == WarpResponseResultCode.CONNECTION_ERROR_RECOVERABLE){  
  22.         runOnUiThread(new Runnable() {  
  23.         @Override 
  24.         public void run() {  
  25.            progressDialog = ProgressDialog.show(ChatActivity.this, "", "Recoverable connection error. Recovering session after 5 seconds");  
  26.         }  
  27.     });  
  28.      handler.postDelayed(new Runnable() {  
  29.      @Override 
  30.     public void run() {  
  31.          progressDialog.setMessage("Recovering...");  
  32.          theClient.RecoverConnection();  
  33.     }  
  34.     }, 5000);  
  35.      }  
  36.      else{  
  37.        showToastOnUIThread("Non-recoverable connection error."+event.getResult());  
  38.         handleLeaveRoom();  
  39.        this.finish();  
  40.      }  
  41.     
  42.  } 

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


本文題目:開發(fā)多玩家Android游戲時(shí)如何處理連接問題
本文地址:http://www.dlmjj.cn/article/cosopgg.html