//用户DB登录返回 func (this UserModule) UserLoginHandle(session *link.Session, userName string, userID uint64) { if userID == 0 { gameProxy.SendLoginResult(session, 0) } else { //登录成功处理 success := this.LoginSuccess(session, userName, userID, 0) if success { //登录成功后处理 this.dealLoginSuccess(session, userName, userID) } else { gameProxy.SendLoginResult(session, 0) } } }
//登录成功后处理 func (this UserModule) dealLoginSuccess(session *link.Session, userName string, userID uint64) { //通知GameServer登录成功 transferProxy.SetClientLoginSuccess(userName, userID, session) //发送登录成功消息 gameProxy.SendLoginResult(session, userID) //用户下线时处理 session.AddCloseCallback(session, func() { //记录用户下线Log logProxy.UserOffLine(userID) }) //记录用户登录Log logProxy.UserLogin(userID) }
//登录 func (this UserModule) Login(userName string, session *link.Session) { onlineUser := module.Cache.GetOnlineUserByUserName(userName) if onlineUser != nil { if onlineUser.Session.Id() != session.Id() { //当前在线,但是连接不同,其他客户端连接,需通知当前客户端下线 gameProxy.SendOtherLogin(onlineUser.Session) //替换Session module.Cache.RemoveOnlineUser(onlineUser.Session.Id()) //登录成功处理 success := this.LoginSuccess(session, onlineUser.UserName, onlineUser.UserID, 0) if success { //登录成功后处理 this.dealLoginSuccess(session, userName, onlineUser.UserID) } else { gameProxy.SendLoginResult(session, 0) } } } else { dbProxy.UserLogin(session.Id(), userName) } }