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

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

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

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

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

想知道更多有關appwarp彈性:點擊這里

包含兩個 Activities 的應用

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服務端。用戶輸入他們的名字然后連接到AppWarp服務器。為了啟用彈性特性(Resiliency Feature),你應該在初始化WarpClient之后設置默認恢復間隔(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. }  

這會告訴服務器默認恢復時間間隔,在這個時間內,即使在連接丟失的情況下,服務端也不會銷毀用戶session。我們用AppHq 控制臺創建了一個靜態變量room。一旦連接并注冊到這個room,我們就轉向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 包含了發送/接收聊天邏輯,并且也管理聊天日志。上半部分包含了同一個room中參與用戶的列表。綠色的狀態指示意思是用戶在線,灰色的意思是暫停(臨時連接錯誤)。屏幕下半部分包含了用戶發送的聊天記錄。在這個activity的啟動后,要想獲取房間中的在線用戶,我們可以調用

  1. theClient.getLiveRoomInfo(Constants.roomId); 

隨著onGetLiveRoomInfoDone的響應動作, 我們在用戶列表適配器中加入參與用戶。

  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服務器連接中斷的情形下,服務端將維持連接直到預定義的恢復時間,不過它會給房間中的其他用戶發送一個通知,告知某用戶當前處于暫停狀態。如果用戶在定義的彈性時間內恢復連接狀態,那么其他用戶將獲得該用戶狀態繼續的通知。否則用戶將收到OnUserLeftRoom通知,并且將該用戶從OnlineUser列表中刪除。維護暫停/繼續狀態:如果我們使用AppWarp彈性特性,在任何用戶與AppWarp服務器中斷連接時,我們將收到一個通知。

  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. }  

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

  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庫上進行下載或查看。如果你有什么問題或者需要進一步的幫助,請隨時跟我們聯系: support@shephertz.com。

責任編輯:張葉青 來源: 開源社區
相關推薦

2014-06-03 09:35:19

Javalibgdx

2011-12-24 21:59:02

iPhone

2023-04-06 15:19:51

2010-05-17 10:04:45

2012-08-29 10:12:13

人才創業硅谷

2011-12-15 12:32:19

JavaNIO

2011-12-08 09:23:26

2025-03-31 09:59:11

2014-09-01 10:56:52

WP8

2022-09-06 10:26:38

前后端分離Vue跨域

2010-09-01 15:40:10

DHCP服務器

2012-12-28 15:53:53

面試應屆畢業生

2013-03-20 11:01:37

Redis客戶端連接

2020-04-06 11:56:04

黑客網絡威脅網絡攻擊

2021-08-11 16:57:03

數據中心光纖布線電纜管理

2019-08-15 10:20:19

云計算技術安全

2017-06-08 20:56:37

2023-07-04 10:16:36

IT員工IT團隊主管

2014-08-28 10:21:37

2015-10-27 10:48:19

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品成人久久久 | 亚洲a视频 | 国产精品99久久久久久www | 性色的免费视频 | 男人天堂网址 | 亚洲精品18| 性欧美精品一区二区三区在线播放 | 精品视频一区二区三区 | 中文字幕亚洲精品 | 亚洲国产免费 | www.久久| 日韩二三区 | 一本大道久久a久久精二百 国产成人免费在线 | 亚洲一区日韩 | 俺去俺来也www色官网cms | 99精品视频在线 | 久久久久网站 | 欧美精品v| 亚洲一区二区免费 | 亚洲一区 中文字幕 | 亚洲www| 欧美一区2区三区4区公司 | 国产目拍亚洲精品99久久精品 | 日本欧美国产在线 | 天堂色网| 激情一区二区三区 | 91大神在线资源观看无广告 | 综合第一页| 一区二区精品电影 | 九九热在线观看视频 | 91一区二区| 久久99久久98精品免观看软件 | 午夜精品视频 | 午夜精品 | 日日干日日色 | 日韩欧美手机在线 | 夜夜夜夜夜夜曰天天天 | 欧美一区在线视频 | 91久久精品 | 操操日| 欧美国产免费 |