Files
fc/dev/project/library/imports/85/859a95f5-5e14-492d-a5e4-8346cdaabd0d.js
2026-05-24 10:21:26 +08:00

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();