// -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 登录控制器 //
Create: new Date().toISOString() // -------------------------------------------------------------------- // var MainSceneController = require("mainscene_controller"); var LoginEvent = require("login_event"); var RoleController = require("role_controller") var LoginPlatform = require("login_platform"); var LoginController = cc.Class({ extends: BaseController, ctor: function () { }, // 初始化配置数据 initConfig: function () { this.finish_loading = false; var LoginModel = require("login_model"); this.model = new LoginModel(); this.model.initConfig(); this.enable_relogin = true; // 是否允许重连 }, // 注册监听事件 registerEvents: function () { gcore.GlobalEvent.bind(LoginEvent.LOGIN_EVENT_ACCOUNT_LOGIN_SUCCESS, (function () { this.model.requestDefaultServer(); }).bind(this)); gcore.GlobalEvent.bind(LoginEvent.LOGIN_EVENT_DEFSERVER_SUCCESS, (function () { }).bind(this)); gcore.GlobalEvent.bind(gcore.GlobalEvent.EVT_SOCKET_CONNECT, (function () { this.enable_relogin = true; if (this.reconnect_timer) { gcore.Timer.del(this.reconnect_timer); this.reconnect_timer = null; game.updateWaitingStatus(); } if (USE_SDK) { SDK.loginGame(); } else { this.login(); } }).bind(this)); gcore.GlobalEvent.bind(gcore.GlobalEvent.EVT_SOCKET_DISCONNECT, (function () { this.reconnectServer(); }).bind(this)); }, // 注册协议接受事件 registerProtocals: function () { 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); }, // 获取模块 getModel: function () { return this.model; }, // 打开登录加载 openLoginWindow: function (data) { if (data && data.status) { var LoginWindow = require("login_window"); if (this.login_window == null) { this.login_window = new LoginWindow() } this.login_window.open(data); } else { if (this.login_window) { this.finish_loading = false; game.updateLoadingStatus(true); gcore.GlobalEvent.fire(EventId.LOADING_FINISH) this.login_window.close(); this.login_window = null; } } }, getTestAccount: function () { if (this.login_window) return this.login_window.getTestAccount(); }, // 切换登录窗体的面板状态 changeLoginWindowIndex: function (index) { if (this.login_window) { this.login_window.changeSubPanel(index); } }, // 连接服务器 connectServer: function (host, port, ws) { if (NO_SOCKET) { this.openLoginWindow(false); return; } var loginInfo = this.model.getLoginInfo(); host = host || loginInfo.host; port = port || loginInfo.port; ws = ws || loginInfo.ws; cc.log("建立socket链接"); cc.log(loginInfo); if (host && port) { gcore.SmartSocket.connect(host, port, ws); // gcore.SmartSocket.connect("localhost", "9001"); } else { message("服务器地址信息错误"); } }, // 断线重线处理 reconnectServer: function () { if (!this.reconnect_timer && this.enable_relogin) { this.reconnect_timer = gcore.Timer.set(this.connectServer.bind(this), 3000, -1); game.updateWaitingStatus(WaitingStaus.CONNECT); } }, // 登录服务器 login: function () { var loginInfo = this.model.getLoginInfo(); var data = [ { key: "account", val: loginInfo.account } , { key: "channel", val: CHANNEL } , { key: "idfa", val: "windows" } ]; this.SendProtocal(1110, { args: data }); }, 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 = GAME_NAME; var package_name = GAME_NAME; 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); }, //自定义参数的SDKLogin cusSDKLogin: function (data) { if (!data) return; var srv_id = this.model.getLoginData().srv_id || ""; var account = data.account; var rawData = data.rawData; var signature = data.signature; var channel = data.channel; var device_id = ""; var idfa = ""; var gettui_cid = ""; var is_emulator = ""; var package_name = data.package_name; var package_version = data.package_version; var app_name = ""; var platform = data.platform; var token = data.token ||""; var timestamp = data.timestamp || ""; var sign = data.sign || ""; var logsign_str = account + device_id + idfa + channel + gettui_cid + is_emulator; var MD5 = require("md5.min"); var logsign = MD5(logsign_str); logsign = logsign.toLowerCase(); var protocal = {} protocal.args = [ { key: "account", val: account }, { key: "enter_srv_id", val: srv_id }, { key: "platform", val: platform }, { key: "device_id", val: device_id }, { key: "gettui_cid", val: gettui_cid }, { key: "idfa", val: idfa }, { key: "channel", val: channel }, { key: "logsign", val: logsign }, { key: "emulator", val: is_emulator }, { key: "app_name", val: app_name }, { key: "package_name", val: package_name }, { key: "package_version", val: package_version }, { key: "rawData", val: rawData }, { key: "signature", val: signature }, { key: "token", val: token }, { key: "timestamp", val: timestamp }, { key: "sign", val: sign } ]; cc.log(protocal); this.SendProtocal(1110, protocal); }, //自定义参数的SDKLogin //data:[] 看不同平台包传入不同的内容; cusSDKLogin_2: function (data) { if (!data) return var srv_id = this.model.getLoginData().srv_id || ""; var device_id = ""; var idfa = ""; var gettui_cid = ""; var is_emulator = ""; var app_name = ""; var logsign_str = data.account + device_id + idfa + data.channel + gettui_cid + is_emulator; var MD5 = require("md5.min"); var logsign = MD5(logsign_str); logsign = logsign.toLowerCase(); var args = [ { key: "enter_srv_id", val: srv_id }, { key: "device_id", val: device_id }, { key: "gettui_cid", val: gettui_cid }, { key: "idfa", val: idfa }, { key: "logsign", val: logsign }, { key: "emulator", val: is_emulator }, { key: "app_name", val: app_name }, ]; var protocal = {}; protocal.args = data.concat(args) cc.log("1110--protocal==>", protocal); this.SendProtocal(1110, protocal); }, // 账号角色列表信息返回 on1110: function (data) { cc.log("1110登录游戏返回"); cc.log(data); // 1110返回错误则不需要重连 if (data.code == 1) { if (this.model.auto_login == false) {//不需要主动进入服务器 比如在服务器列表中选择服 return; } if (this.model.isSocket) { gcore.GlobalEvent.fire(LoginEvent.LOGIN_EVENT_PLAYER_INFO, data) return } if (data.roles.length == 0) { this.reqCreateRole(); } else { var role = this.role = data.roles[0]; this.reqLoginRole(role.rid, role.srv_id); } // 提交服务器信息 if ((PLATFORM_TYPR == "WX_SDK" || PLATFORM_TYPR == "QQ_SDK") && USE_SDK) { var loginInfo = this.model.getLoginInfo(); SDK.submitLogin(loginInfo.host); } } else if (data.code == 4) { //服务器维护或者被封或者未开服 this.enable_relogin = false; require("notice_controller").getInstance().openNocticeWindow(true); } else { this.enable_relogin = false; message(data.msg); } }, getCurRoleInfo: function() { return this.role; }, // 掉线提示, 收到该协议后将不会进行重连 on10310: function (data) { this.enable_relogin = false; gcore.SmartSocket.stopHeart(); if (this.reconnect_timer) { gcore.Timer.del(this.reconnect_timer); this.reconnect_timer = null; game.updateWaitingStatus(); } if (data.is_show == 1) { message(data.msg); } var GuideController = require("guide_controller"); GuideController.getInstance().setGuideMainRootWnd(false); var CommonAlert = require("commonalert"); CommonAlert.showItemApply(Utils.TI18N("该账号已在其他地方登录"),null,function(){ game.relogin(); if(PLATFORM_TYPR == "SH_RH"){ SDK.logout(); } }.bind(this),Utils.TI18N("确定"),null,null,Utils.TI18N("提示"),null,null,true,null, null,null,null,{off_y:-18,close_off:true}) // game.relogin(); }, // 请求创建新角色 reqCreateRole: function () { if(PLATFORM_TYPR == "SH_RH" || PLATFORM_TYPR == "SH_SDK"){ this.SendProtocal(10101, { sex: 0, name: "", career: 1, playform: CHANNEL}); }else{ this.SendProtocal(10101, { sex: 0, name: "", career: 1, playform: PLATFORM }); } }, // 创建新角色返回 on10101: function (data) { if (data.code == 1) { if (IS_SUBMIT) { SDK.sdkSubmitUserData(2, data) } if (PLATFORM_TYPR == "SH_RH" && PLATFORM_NAME == "sh"){ SDK.createRole(data); } if (PLATFORM_TYPR == "SH_SDK"){ SDK.createRole(data); } this.model.setFirstRoleData(data); this.reqLoginRole(data.rid, data.srv_id); } else { message(data.msg); } }, // 请求登录角色 reqLoginRole: function (rid, srv_id) { var loginInfo = this.model.getLoginInfo(); loginInfo.login_rid = rid; loginInfo.login_srv_id = srv_id; cc.log(RoleController.getInstance().init_role); if (RoleController.getInstance().init_role) {// 角色已登录 断线重连处理 this.SendProtocal(10103, { rid: rid, srv_id: srv_id }); } else { this.SendProtocal(10102, { rid: rid, srv_id: srv_id }); } }, // 角色登录成功返回 on10102: function (data) { if (data.code == 1) { if (this.login_window) this.login_window.showLoading(); game.initConfigs(function () { this.SendProtocal(10300, {}); }.bind(this)); RoleController.getInstance().getModel().setWorldLev(data.world_lev || 0) } else { message(data.msg); } if (this.serverListWindow) { this.openServerList(false) } }, sender10300: function() { this.SendProtocal(10300, {}); }, // 角色重连成功返回 on10103: function (data) { if (data.code == 1) { var RoleController = require("role_controller") RoleController.getInstance().setReconnect(true) this.SendProtocal(10300, {}); } else { message(data.msg); } }, //打开选区列表 openServerList(bool, data, callFunc) { if (bool) { if (!this.serverListWindow) { let serverListWindow = require("server_list_window") this.serverListWindow = new serverListWindow() } this.serverListWindow.open(data) this.serverListWindow.addCallBack(callFunc) } else { if (this.serverListWindow) { this.serverListWindow.close(); this.serverListWindow = null } } }, updateLoading: function (progerss) { if (this.login_window) this.login_window.updateLoading(progerss); }, updateSeconLoading: function (progerss, isinit) { if (this.login_window) this.login_window.updateSeconLoading(progerss, isinit); }, loginPlatformRequest: function (data) { var login_data = this.model.getLoginData(); if (data.usrName != login_data.usrName) { gcore.SysEnv.set("user_name", data.usrName); gcore.SysEnv.set("password", data.password); login_data.usrName = data.usrName; login_data.password = data.password; } this.loginNewUserRequest(data) }, loginNewUserRequest: function (data) { var info = {} info.code = 1; info.accName = data.usrName; info.platform = PLATFORM_NAME; info.msg = ""; this.loginPlatformResult(info); }, loginPlatformResult: function (data) { if (data.code == 1) { this.model.requestDefaultServerList(data.accName, data.platform) } else { } }, //强制下线 sender10312: function() { this.SendProtocal(10312, {}); }, }); module.exports = LoginController;