Ejemplo n.º 1
0
    private void Start()
    {
        reConnectHandle = new ReConnectHandle();
        NetCore.Instance.registHandle(reConnectHandle);
        // 设置断开连接的回调方法
        NetCore.Instance.DisConnectAction = DisConnect;
        // 设置重连成功的回调方法(只有在没有登录的情况调用)
        NetCore.Instance.ReConnectSuccessAction = ReconnectSuccess;
        // 设置重连失败的回调方法
        NetCore.Instance.ReConnectFailAction = ReconnectFail;

        // 玩家断线重连 牌桌信息回复
        NetCore.Instance.setActionForever(NetProto.Api.ENetMsgId.room_player_reconnect_ack);
        NetCore.Instance.RegisterAction(NetProto.Api.ENetMsgId.room_player_reconnect_ack, (roomPlayerReconnectAck) =>
        {
            NetProto.RoomPlayerReconnectAck roomPlayerReconnectAction = (NetProto.RoomPlayerReconnectAck)roomPlayerReconnectAck;
            // 表示玩家不在牌桌上,留在当前界面
            if (roomPlayerReconnectAction.BaseAck.Ret == 0)
            {
                this.isShow = false;
                if (gameObject.scene.name.Equals("dynamic_room"))
                {
                    // 表示玩家不在牌桌上,返回首页
                    Application.LoadLevel("main");
                }
            }
            else
            {
                MainData.Instance().tableInfo = roomPlayerReconnectAction.Table;
                bool isUpdateSelfInfo         = false;
                for (int i = 0; i < roomPlayerReconnectAction.Table.Players.Count; i++)
                {
                    NetProto.PlayerInfo info = roomPlayerReconnectAction.Table.Players[i];
                    if (UserManager.Instance().authModel.user_id == info.Id)
                    {
                        isUpdateSelfInfo             = true;
                        MainData.Instance().selfInfo = info;
                        break;
                    }
                }
                if (isUpdateSelfInfo)
                {
                    Application.LoadLevel("dynamic_room");
                }
                else
                {
                    // 表示玩家不在牌桌上,返回首页
                    Application.LoadLevel("main");
                }
            }
        });
    }
Ejemplo n.º 2
0
 protected void ReConnect()
 {
     Close();
     if (reConnCount > 0 && reConnCount <= Config.RECONN_COUNT)
     {
         reConnCount++;
         Connect(Config.address, Config.port);
         ReConnectHandle reConnectHandle = new ReConnectHandle();
         NetCore.Instance.registHandle(reConnectHandle);
         reConnectHandle.ReConnect(reConnectSuccessAction);
     }
     else
     {
         Debug.LogError("多次连接失败!请检查你的网络是否正常");
         //todo show MessageBos and Exit
         if (reConnectFailAction != null)
         {
             reConnectFailAction();
         }
     }
 }