482 lines
14 KiB
JavaScript
482 lines
14 KiB
JavaScript
|
|
"use strict";
|
||
|
|
cc._RF.push(module, '859a9X1XhRJLaXkg0bNqr0N', 'login.mod');
|
||
|
|
// Scripts/mod/login/login.mod.js
|
||
|
|
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
// --------------------------------------------------------------------
|
||
|
|
// @author: shiraho@syg.com(必填, 创建模块的人员)
|
||
|
|
// @description:
|
||
|
|
// 登录控制器
|
||
|
|
// <br/>Create: new Date().toISOString()
|
||
|
|
// --------------------------------------------------------------------
|
||
|
|
|
||
|
|
var BridgeController = require("bridge.controller");
|
||
|
|
var RoleController = require("role_controller");
|
||
|
|
var FFSDK = require("ff_sdk");
|
||
|
|
var FFPlugin = require("plugin_help");
|
||
|
|
var LoginMod = cc.Class({
|
||
|
|
"extends": BridgeController,
|
||
|
|
// 初始化配置数据
|
||
|
|
initConfig: function initConfig() {
|
||
|
|
// 本地化缓存
|
||
|
|
var cache = nx.storage.getObject("TKAccount");
|
||
|
|
nx.bridge.vset("curAccount", cache);
|
||
|
|
nx.bridge.login = this;
|
||
|
|
|
||
|
|
// SDK准备
|
||
|
|
this.readySDK();
|
||
|
|
},
|
||
|
|
// 注册监听事件
|
||
|
|
registerEvents: function registerEvents() {},
|
||
|
|
// 注册协议接受事件
|
||
|
|
registerProtocals: function registerProtocals() {
|
||
|
|
this.RegisterProtocal(1110, this.on1110);
|
||
|
|
this.RegisterProtocal(10310, this.on10310);
|
||
|
|
this.RegisterProtocal(10101, this.on10101);
|
||
|
|
this.RegisterProtocal(10102, this.on10102);
|
||
|
|
this.RegisterProtocal(10103, this.on10103);
|
||
|
|
},
|
||
|
|
// 账号登录
|
||
|
|
reqAccountLogin: function reqAccountLogin(_cb) {
|
||
|
|
var info = nx.bridge.vget("curAccount");
|
||
|
|
var svr = nx.bridge.vget("curServer");
|
||
|
|
var args = [{
|
||
|
|
key: "account",
|
||
|
|
val: info.account
|
||
|
|
}, {
|
||
|
|
key: "ip",
|
||
|
|
val: nx.frame.vget("Host")
|
||
|
|
}, {
|
||
|
|
key: "idfa",
|
||
|
|
val: nx.frame.vget("IDFA")
|
||
|
|
}, {
|
||
|
|
key: "language",
|
||
|
|
val: nx.frame.vget("LocalLanguage")
|
||
|
|
}, {
|
||
|
|
key: "device_id",
|
||
|
|
val: nx.frame.vget("DeviceID")
|
||
|
|
}, {
|
||
|
|
key: "device_type",
|
||
|
|
val: nx.frame.vget("Platform")
|
||
|
|
}, {
|
||
|
|
key: "package_name",
|
||
|
|
val: nx.frame.vget("ApkName")
|
||
|
|
}, {
|
||
|
|
key: "package_version",
|
||
|
|
val: nx.frame.vget("ApkVersion")
|
||
|
|
}, {
|
||
|
|
key: "os",
|
||
|
|
val: cc.sys.os
|
||
|
|
}, {
|
||
|
|
key: "os_ver",
|
||
|
|
val: cc.sys.osVersion
|
||
|
|
}, {
|
||
|
|
key: "app_name",
|
||
|
|
val: nx.bridge.vget("gname")
|
||
|
|
}, {
|
||
|
|
key: "channel",
|
||
|
|
val: nx.bridge.vget("channel")
|
||
|
|
}, {
|
||
|
|
key: "platform",
|
||
|
|
val: nx.bridge.vget("channelName")
|
||
|
|
}, {
|
||
|
|
key: "net_type",
|
||
|
|
val: nx.frame.vget("NetType")
|
||
|
|
}, {
|
||
|
|
key: "emulator",
|
||
|
|
val: nx.frame.vget("Simulator")
|
||
|
|
}, {
|
||
|
|
key: "enter_srv_id",
|
||
|
|
val: svr.srv_id
|
||
|
|
}];
|
||
|
|
|
||
|
|
// 账号登录
|
||
|
|
nx.info("$Login:账号登录..");
|
||
|
|
this.SendProtocal(1110, {
|
||
|
|
args: args
|
||
|
|
}, function (_ret, _data, _code) {
|
||
|
|
if (!_ret) {
|
||
|
|
nx.warn("$Login:账号登录失败:", _data, _code);
|
||
|
|
nx.dt.fnInvoke(_cb, false, _data, _code);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 登录成功
|
||
|
|
nx.info("$Login:账号登录成功...");
|
||
|
|
nx.dt.fnInvoke(_cb, true, _data, _code);
|
||
|
|
if (FFSDK.getInstance().isEnableSDK()) {
|
||
|
|
FFSDK.getInstance().reportOpenID(info.account);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
},
|
||
|
|
// 账号角色列表信息返回
|
||
|
|
on1110: function on1110(data) {},
|
||
|
|
// 掉线提示, 收到该协议后将不会进行重连
|
||
|
|
on10310: function on10310(data) {
|
||
|
|
client.socket.close("kicked");
|
||
|
|
nx.mbox("lab_login_controller_tip1", ["confirm"], function (_key, _box) {
|
||
|
|
_box.close();
|
||
|
|
game.enterLogin();
|
||
|
|
});
|
||
|
|
},
|
||
|
|
// 创建新角色返回
|
||
|
|
on10101: function on10101(data) {},
|
||
|
|
// 角色登录成功返回
|
||
|
|
on10102: function on10102(data) {
|
||
|
|
if (!this.isGoodData(data)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
nx.bridge.closePanel("WndServerList");
|
||
|
|
if (nx.temp_login_wnd) {
|
||
|
|
nx.temp_login_wnd.changeSubPanel(3);
|
||
|
|
}
|
||
|
|
nx.bridge.vset("logInTime", data.timestamp);
|
||
|
|
// RoleController.getInstance().getModel().setWorldLev( data.world_lev || 0 );
|
||
|
|
},
|
||
|
|
|
||
|
|
// 角色重连成功返回
|
||
|
|
on10103: function on10103(data) {
|
||
|
|
if (!this.isGoodData(data)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// nx.tbox( "reconnect success!" )
|
||
|
|
// var RoleController = require( "role_controller" )
|
||
|
|
// RoleController.getInstance().setReconnect( true )
|
||
|
|
// nx.bridge.game.gameReady();
|
||
|
|
},
|
||
|
|
|
||
|
|
// 强制下线
|
||
|
|
sender10312: function sender10312() {
|
||
|
|
this.SendProtocal(10312, {});
|
||
|
|
},
|
||
|
|
// =======================================================
|
||
|
|
// 改造
|
||
|
|
// =======================================================
|
||
|
|
|
||
|
|
// 获取服务器列表以及所有角色信息
|
||
|
|
fetchServerRoles: function fetchServerRoles(_cb) {
|
||
|
|
var _this = this;
|
||
|
|
var info = nx.bridge.vget("curAccount");
|
||
|
|
nx.bridge.remote.queryServers(info.account, "", true, function (_err, _data) {
|
||
|
|
if (_err) {
|
||
|
|
cc.error("错误未处理!");
|
||
|
|
nx.dt.fnInvoke(_cb, false, "TipFetchServersFailed");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 所有服務器
|
||
|
|
var srvs = {};
|
||
|
|
var temp = [];
|
||
|
|
if (nx.dt.arrNEmpty(_data.data.server_list)) {
|
||
|
|
// 排序
|
||
|
|
_data.data.server_list.sort(function (_a, _b) {
|
||
|
|
return _a.zone_id - _b.zone_id;
|
||
|
|
});
|
||
|
|
|
||
|
|
// 统计
|
||
|
|
_data.data.server_list.forEach(function (_svr) {
|
||
|
|
var data = _this.convertServerInfo(_svr);
|
||
|
|
var gid = data.group_id;
|
||
|
|
srvs[gid] = srvs[gid] || [];
|
||
|
|
srvs[gid].push(data);
|
||
|
|
temp.push(data);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
nx.bridge.vset("allServers", srvs);
|
||
|
|
|
||
|
|
// 取最新的5台服务器作为推荐服务器
|
||
|
|
temp.sort(function (_a, _b) {
|
||
|
|
return _b.stamp - _a.stamp;
|
||
|
|
});
|
||
|
|
nx.bridge.vset("recServers", temp.slice(0, 5));
|
||
|
|
|
||
|
|
// 所有角色
|
||
|
|
var roles = [];
|
||
|
|
if (nx.dt.arrNEmpty(_data.data.role_info.role_list)) {
|
||
|
|
_data.data.role_info.role_list.forEach(function (_role) {
|
||
|
|
roles.push(_role);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
nx.bridge.vset("allRoles", roles);
|
||
|
|
|
||
|
|
// 当前服务器
|
||
|
|
var cur = null;
|
||
|
|
if (nx.dt.objNEmpty(_data.data.default_zone)) {
|
||
|
|
cur = _this.convertServerInfo(_data.data.default_zone);
|
||
|
|
}
|
||
|
|
nx.bridge.vset("curServer", cur);
|
||
|
|
|
||
|
|
// 默认角色
|
||
|
|
var list = cur ? _this.getServerRoles(cur.srv_id) : [];
|
||
|
|
nx.bridge.vset("curRole", list[0]);
|
||
|
|
});
|
||
|
|
},
|
||
|
|
// 服务器查询
|
||
|
|
queryServer: function queryServer(_sid) {
|
||
|
|
var all = nx.bridge.vget("allServers");
|
||
|
|
for (var gid in all) {
|
||
|
|
var lst = all[gid];
|
||
|
|
for (var i in lst) {
|
||
|
|
if (lst[i].srv_id == _sid) {
|
||
|
|
return lst[i];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
nx.error("$Login:查找服务器失败 ", _sid);
|
||
|
|
return null;
|
||
|
|
},
|
||
|
|
// 统计指定服角色
|
||
|
|
getServerRoles: function getServerRoles(_sid) {
|
||
|
|
var ret = [];
|
||
|
|
var roles = nx.bridge.vget("allRoles");
|
||
|
|
roles.forEach(function (tm) {
|
||
|
|
if (tm.srv_id == _sid) {
|
||
|
|
ret.push(tm);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
return ret;
|
||
|
|
},
|
||
|
|
// 连接服务器
|
||
|
|
linkServer: function linkServer(_svr_id, _cb) {
|
||
|
|
// 服务器
|
||
|
|
var server = this.queryServer(_svr_id);
|
||
|
|
if (!server) {
|
||
|
|
nx.dt.fnInvoke(_cb, false, "TipSelectServer");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
nx.bridge.vset("curServer", server);
|
||
|
|
|
||
|
|
// 连接服务器
|
||
|
|
client.socket.connect(server.host, server.port, server.ws, _cb);
|
||
|
|
},
|
||
|
|
// 自动进入游戏
|
||
|
|
autoEnter: function autoEnter(_cb, _relog) {
|
||
|
|
if (_relog === void 0) {
|
||
|
|
_relog = false;
|
||
|
|
}
|
||
|
|
var self = this;
|
||
|
|
|
||
|
|
// STEP4:角色进入
|
||
|
|
var step4 = function step4(_rid, _sid) {
|
||
|
|
var args = {
|
||
|
|
rid: _rid,
|
||
|
|
srv_id: _sid
|
||
|
|
};
|
||
|
|
self.SendProtocal(_relog ? 10103 : 10102, args, _cb);
|
||
|
|
};
|
||
|
|
|
||
|
|
// STEP3:角色注册
|
||
|
|
var step3 = function step3() {
|
||
|
|
var args = {
|
||
|
|
sex: 0,
|
||
|
|
name: "",
|
||
|
|
career: 1,
|
||
|
|
playform: nx.frame.vget("Platform")
|
||
|
|
};
|
||
|
|
self.SendProtocal(10101, args, function (_ret, _data, _code) {
|
||
|
|
if (!_ret) {
|
||
|
|
nx.dt.fnInvoke(false, _data, _code);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
nx.bridge.vset("curRole", _data);
|
||
|
|
step4(_data.rid, _data.srv_id);
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
// STEP2:账号登录
|
||
|
|
var step2 = function step2() {
|
||
|
|
self.reqAccountLogin(function (_ret, _data, _code) {
|
||
|
|
if (!_ret) {
|
||
|
|
nx.dt.fnInvoke(false, _data, _code);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
var role = nx.bridge.vget("curRole");
|
||
|
|
if (nx.dt.objEmpty(role)) {
|
||
|
|
step3();
|
||
|
|
} else {
|
||
|
|
step4(role.rid, role.srv_id);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
// STEP1:连接服务器
|
||
|
|
var server = nx.bridge.vget("curServer");
|
||
|
|
if (nx.dt.objEmpty(server)) {
|
||
|
|
nx.dt.fnInvoke(_cb, false, "TipSelectServer");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 连接服务器
|
||
|
|
client.socket.connect(server.host, server.port, server.ws, function (_ret, _data) {
|
||
|
|
// 连接失败
|
||
|
|
if (!_ret) {
|
||
|
|
nx.dt.fnInvoke(_cb, false, _data);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// // 重复连接
|
||
|
|
// if( _data == "repeat" ) {
|
||
|
|
// return;
|
||
|
|
// }
|
||
|
|
|
||
|
|
// STEP2:账号登录
|
||
|
|
step2();
|
||
|
|
});
|
||
|
|
},
|
||
|
|
// 服务器信息数据转换
|
||
|
|
convertServerInfo: function convertServerInfo(server) {
|
||
|
|
var info = {
|
||
|
|
srv_name: server.name || server.srv_name,
|
||
|
|
srv_id: server.srv_id || server.platform + "_" + server.zone_id,
|
||
|
|
ip: server.ip || server.host,
|
||
|
|
host: server.host || server.ip,
|
||
|
|
port: server.erl_port,
|
||
|
|
ws: server.ws || "ws",
|
||
|
|
zone_id: server.zone_id,
|
||
|
|
platform: server.platform,
|
||
|
|
platform_name: server.platform_name,
|
||
|
|
main_srv_id: server.main_srv_id,
|
||
|
|
is_close: server.maintain == 1,
|
||
|
|
is_try: server.first_zone == 1,
|
||
|
|
is_new: Number(server.isnew) == 1,
|
||
|
|
is_recomed: server.recomed == 1,
|
||
|
|
open_time: server.open_time,
|
||
|
|
roles: server.roles || [],
|
||
|
|
group_num: server.group_num || 1,
|
||
|
|
group_id: server.group_id || 1
|
||
|
|
};
|
||
|
|
|
||
|
|
// 时间转换
|
||
|
|
var dt = new Date(info.open_time);
|
||
|
|
info.stamp = Math.floor(dt.getTime() / 1000);
|
||
|
|
return info;
|
||
|
|
},
|
||
|
|
// =======================================================
|
||
|
|
// SDK相关
|
||
|
|
// =======================================================
|
||
|
|
|
||
|
|
// SDK准备
|
||
|
|
readySDK: function readySDK() {
|
||
|
|
if (!FFSDK.getInstance().isEnableSDK()) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
var FP = FFPlugin.getInstance();
|
||
|
|
FP.regSdkCallBack("login", this.onSDKLoginResult, this);
|
||
|
|
FP.regSdkCallBack("logout", this.onSDKLogoutResult, this);
|
||
|
|
FP.regSdkCallBack("bindaccount", this.onSDKBindAccountResult, this);
|
||
|
|
},
|
||
|
|
// SDK登录
|
||
|
|
reqSDKLogin: function reqSDKLogin(_cb, _swap) {
|
||
|
|
if (_swap === void 0) {
|
||
|
|
_swap = false;
|
||
|
|
}
|
||
|
|
this.cbSDKLogin = _cb;
|
||
|
|
if (_swap) {
|
||
|
|
FFSDK.getInstance().switchAccount();
|
||
|
|
} else {
|
||
|
|
FFSDK.getInstance().autoLogin();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// 登录返回
|
||
|
|
onSDKLoginResult: function onSDKLoginResult(_params) {
|
||
|
|
if (nx.dt.objEmpty(_params)) {
|
||
|
|
nx.error("$Login:SDK\u767B\u5F55\u8FD4\u56DE\u7A7A!");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
var openId = _params.openId || "";
|
||
|
|
nx.dt.fnInvoke(this.cbSDKLogin, true, {
|
||
|
|
openId: openId
|
||
|
|
});
|
||
|
|
var url = nx.bridge.vget("noticeURL");
|
||
|
|
nx.web.get(url, {}, function (_err, _data) {
|
||
|
|
if (_err) {
|
||
|
|
// nx.tbox( "NoticeFetchFailed" );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (_data && _data.data) {
|
||
|
|
nx.bridge.createPanel("WndNotice");
|
||
|
|
}
|
||
|
|
}, false);
|
||
|
|
},
|
||
|
|
// SDK登出
|
||
|
|
reqSDKLogout: function reqSDKLogout(_cb) {
|
||
|
|
this.cbSDKLogout = _cb;
|
||
|
|
FFSDK.getInstance().logOut();
|
||
|
|
},
|
||
|
|
// 登出返回
|
||
|
|
onSDKLogoutResult: function onSDKLogoutResult(_params) {
|
||
|
|
if (nx.dt.objEmpty(_params)) {
|
||
|
|
nx.error("$Login:SDK\u767B\u51FA\u8FD4\u56DE\u7A7A!");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
var result = _params.result;
|
||
|
|
var ret = result && 0 != parseInt(result);
|
||
|
|
nx.dt.fnInvoke(this.cbSDKLogout, ret);
|
||
|
|
},
|
||
|
|
// 账号绑定返回
|
||
|
|
onSDKBindAccountResult: function onSDKBindAccountResult(_params) {}
|
||
|
|
|
||
|
|
// sdkLogin: function() {
|
||
|
|
// // LoginPlatform
|
||
|
|
// var protocal = {}
|
||
|
|
// var account = this.model.getLoginData().usrName || "";
|
||
|
|
// var srv_id = this.model.getLoginData().srv_id || "";
|
||
|
|
// var device_id = "nicai"
|
||
|
|
// // var device_id = device.getDeviceName()
|
||
|
|
// var timestamp = LoginPlatform.getInstance().getTimestamp();
|
||
|
|
// var token = LoginPlatform.getInstance().getToken();
|
||
|
|
// var sign = LoginPlatform.getInstance().getSign();
|
||
|
|
// var channel = LoginPlatform.getInstance().getChannel();
|
||
|
|
// account = channel + "_" + account;
|
||
|
|
// var final_channel = LoginPlatform.getInstance().getFinalChannel();
|
||
|
|
// var gettui_cid = "meiyou";
|
||
|
|
// var device_type = "";
|
||
|
|
// // var gettui_cid = device.getuiId()
|
||
|
|
// var idfa = "meiyou";
|
||
|
|
// var is_emulator = "false";
|
||
|
|
// var os_ver = "";
|
||
|
|
// var carrier_name = "";
|
||
|
|
// var net_type = "";
|
||
|
|
// var app_name = nx.bridge.vget( "gname" );
|
||
|
|
// var package_name = nx.bridge.vget( "gname" );
|
||
|
|
// var package_version = "1.0.1";
|
||
|
|
// var os = "os";
|
||
|
|
|
||
|
|
// var logsign_str = account + device_id + idfa + channel + gettui_cid + is_emulator;
|
||
|
|
// var MD5 = require( "md5.min" );
|
||
|
|
// // cc.log("value_1==>", value);
|
||
|
|
// var logsign = MD5( logsign_str );
|
||
|
|
// logsign = logsign.toLowerCase();
|
||
|
|
|
||
|
|
// protocal.args = [
|
||
|
|
// { key: "account", val: account },
|
||
|
|
// { key: "timestamp", val: timestamp },
|
||
|
|
// { key: "enter_srv_id", val: srv_id },
|
||
|
|
// { key: "platform", val: PLATFORM_NAME },
|
||
|
|
// { key: "device_id", val: device_id },
|
||
|
|
// { key: "device_type", val: device_type },
|
||
|
|
// { key: "gettui_cid", val: gettui_cid },
|
||
|
|
// { key: "idfa", val: idfa },
|
||
|
|
// { key: "token", val: token },
|
||
|
|
// { key: "channel", val: final_channel },
|
||
|
|
// { key: "sign", val: sign },
|
||
|
|
// { key: "logsign", val: logsign },
|
||
|
|
// { key: "os_ver", os_ver },
|
||
|
|
// { key: "carrier_name", val: carrier_name },
|
||
|
|
// { key: "net_type", val: net_type },
|
||
|
|
// { key: "os", val: os },
|
||
|
|
// { key: "emulator", val: is_emulator },
|
||
|
|
// { key: "app_name", val: app_name },
|
||
|
|
// { key: "package_name", val: package_name },
|
||
|
|
// { key: "package_version", val: package_version }
|
||
|
|
// ];
|
||
|
|
|
||
|
|
// this.SendProtocal( 1110, protocal );
|
||
|
|
// },
|
||
|
|
});
|
||
|
|
|
||
|
|
module.exports = LoginMod;
|
||
|
|
|
||
|
|
cc._RF.pop();
|