2KB项目,专业的源码交易网站 帮助 收藏 每日签到

开发多玩家 Android 游戏时怎样处理连接问题

  • 时间:2019-05-20 15:54 编辑:2KB 来源:2KB.COM 阅读:660
  • 扫一扫,手机访问
  • 分享
摘要:
Android 英文原文:How to handle Connection issues in Android devices while developing Multiplayer Games – AppWarp

我们开发了一款Android聊天室运用演示,应用了AppWarp(译注:Appwarp 是创建实时多用户游戏的跨平台搜集引擎),而AppWarp引擎阐明了怎么处理间歇性的搜集链接缺点。这个演示用到了AppWarp的具有搜集弹性的API。

为什么需求搜集弹性: 在Mobile配备中,数据连接不时是一个问题。 当用户在Mobile中,数据源将经常切换基站,也许在2G和3G之间晋级/升级,或切换WiFi,或由于屏幕锁定或用户按下home键使得运用次序切换到后台运转。 这对依托不时数据连接的运用次序/游戏带来影响。AppWarp 供应了 弱小的功用 来处理 搜集弹性 问题, 用户可以颠末它 连接损失的 情况下,保持 运用 之前的 形状

想知道更多有关appwarp弹性:点击这里

其它翻译版本 (1) 加载中 包含两个 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处事端。用户输出他们的名字然后连接到AppWarpServer。为了启用弹性特点(Resiliency Feature),你该当在初始化WarpClient当前设置默许恢复间隔(Recovery Allowance interval):

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

这会告诉Server默许恢停工夫间隔,在这个时间内,即使在连接损失的情况下,处事端也不会销毁用户session。我们用AppHq 操纵台创建了一个静态变量room。一旦连接并注册到这个room,我们就转向ChatActivity。

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

ChatActivity.java 这个 Activity 包含了发送/采取聊天逻辑,并且也管理聊天日志。上半部分包含了一致个room中参与用户的列表。绿色的形状教唆意思是用户在线,灰色的意思是暂停(临时连接错误)。屏幕下半部分包含了用户发送的聊天记录。在这个activity的启动后,要想取得房间中的在线用户,我们可以调用

theClient.getLiveRoomInfo(Constants.roomId);
随着onGetLiveRoomInfoDone的照应举动, 我们在用户列表适配器中参与参与用户。
public void onGetLiveRoomInfoDone(final LiveRoomInfoEvent event) {
    if(event.getResult()==WarpResponseResultCode.SUCCESS){
        onlineUserList.clear();
        if(event.getJoinedUsers().length>1){// if more than one user is online
            final String onlineUser[] = Utils.removeLocalUserNameFromArray(event.getJoinedUsers());
            for(int i=0;i<onlineUser.length;i++){
                User user = new User(onlineUser[i].toString(), true);
                Log.d(onlineUser[i].toString(), onlineUser[i].toString());
                onlineUserList.add(user);
            }
        resetAdapter();
    }else{
        showToastOnUIThread("No online user found");
    }
    }else{
        showToastOnUIThread("onGetLiveRoomInfoDone Failed with ErrorCode: "+event.getResult());
    }
}
其它翻译版本 (1) 加载中

处理连接弹性:在任何启事任何用户与AppWarpServer连接中断的状况下,处事端将坚持连接直到预定义的恢停工夫,不过它会给房间中的其他用户发送一个通知,通知某用户当前处于暂停形状。假设用户在定义的弹性时间内恢复连接形状,那么其他用户将获得该用户形状继续的通知。否则用户将收到OnUserLeftRoom通知,并且将该用户从OnlineUser列表中删除。维护暂停/继续形状:假设我们应用AppWarp弹性特点,在任何用户与AppWarpServer中断连接时,我们将收到一个通知。

@Override
public void onUserPaused(String locid, boolean isLobby, String userName) {
    for(int i=0;i<onlineUserList.size();i++){
        User user = onlineUserList.get(i);
        if(user.getName().equals(userName)){
            user.setStatus(false);
        }
    }
    resetAdapter();
}
 
@Override
 
public void onUserResumed(String locid, boolean isLobby, String userName) {
    for(int i=0;i<onlineUserList.size();i++){
        User user = onlineUserList.get(i);
        if(user.getName().equals(userName)){
            user.setStatus(true);
        }
    }
    resetAdapter();
}
其它翻译版本 (1) 加载中 恢复连接:假设用户的搜集连接由于某些启事中断了,比如在2G/3G/WiFi/towers之间履行切换,也许其它启事,我们会在ConnectonRequestListener中失掉一个连接错误,其错误代码为WarpResponseResultCode.CONNECTION_ERROR_RECOVERABLE,颠末检测该错误代码我们可以调用恢复连接的API来恢复我们之间的session。我们建议每隔5秒钟检验测验履行一次重新连接。 
theClient.RecoverConnection();
 
@Override
public void onConnectDone(final ConnectEvent event) {
    if(event.getResult() == WarpResponseResultCode.SUCCESS){
        showToastOnUIThread("Connection success");
    }
    else if(event.getResult() == WarpResponseResultCode.SUCCESS_RECOVERED){
        showToastOnUIThread("Connection recovered");
        runOnUiThread(new Runnable() {
        @Override
        public void run() {
        if(progressDialog!=null){
            progressDialog.dismiss();
        }
        progressDialog = ProgressDialog.show(ChatActivity.this, "", "Please wait..");
    }
    });
    theClient.getLiveRoomInfo(Constants.roomId);
    }
    else if(event.getResult() == WarpResponseResultCode.CONNECTION_ERROR_RECOVERABLE){
        runOnUiThread(new Runnable() {
        @Override
        public void run() {
            progressDialog = ProgressDialog.show(ChatActivity.this, "", "Recoverable connection error. Recovering session after 5 seconds");
        }
    });
    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        progressDialog.setMessage("Recovering...");
        theClient.RecoverConnection();
    }
    }, 5000);
    }
    else{
       showToastOnUIThread("Non-recoverable connection error."+event.getResult());
        handleLeaveRoom();
        this.finish();
    }
 
}
源代码可以从我们的 git库出息行下载或反省。假设你有什么问题也许需求进一步的协助,请随时跟我们联系: support@shephertz.com。 本文中的一切译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译Task依照 CC 协议,假设我们的Task有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部