/// <summary> /// 发送验证结果 /// </summary> private void SendLoginResult(ClientUID client_uid, eLoginResult result, long account_idx, ushort spid) { ws2gs.ClientLogin msg = PacketPools.Get(ws2gs.msg.CLIENT_LOGIN) as ws2gs.ClientLogin; msg.client_uid = client_uid; msg.login_result = result; if (result == eLoginResult.E_SUCCESS) { msg.account_idx = account_idx; msg.spid = spid; msg.ss_uid = ServerNetManager.Instance.AllocSSForClient(); } ServerNetManager.Instance.Send(client_uid.srv_uid, msg); }
/// <summary> /// 登录 /// </summary> private void OnClientLogin(PacketBase packet) { ws2gs.ClientLogin msg = packet as ws2gs.ClientLogin; ///1.查询完成,确认这个过程中是否已经退出 ClientSession session = ClientSessionManager.Instance.GetSession(msg.client_uid.conn_idx); if (session == null) { return; } ///2.修改状态 if (msg.login_result == eLoginResult.E_SUCCESS) { //更新数据 session.account_idx = msg.account_idx; session.spid = msg.spid; session.ss_uid = msg.ss_uid; session.session_status = eSessionStatus.ALREADY_LOGIN; ClientSessionManager.Instance.AddSessionByAccount(session.account_idx, session.conn_idx); } else { session.session_status = eSessionStatus.LOGIN_FAILED; //是否超过验证次数:是的话直接踢号 session.login_error_count += 1; if (session.login_error_count >= 5) { ClientSessionManager.Instance.KickoutSession(session.conn_idx); return; } } ///3.告诉客户端 gs2c.ClientLogin rep_msg = PacketPools.Get(gs2c.msg.CLIENT_LOGIN) as gs2c.ClientLogin; rep_msg.login_result = msg.login_result; session.Send(rep_msg); }