Utm示例-公共部分
首先实现各个事件(登录检查、登录、退出、断线)的处理
1. 登录检查:
继承com.dc.utm.handler.login.OnUserLoginCheckHandler类,实现抽象方法:
queueFull:队列满:在该方法中给前端发送信息提示服务器繁忙不受理该请求
loginCheck:登录检查:检查用户的信息是否正确等,如果错误或者不允许登录则给用户返回错误提示并在该方法返回null(程序不会再往下执行),如果通过检查则返回相应的User对象。
logoutLocalUserWhenUserReLogin:退出在服务上的老用户:当通过登录检查后,OnUserLoginCheckHandler就会调用UserFlagBusiness的setLoginFlag方法(该方法会返回成功、用户在本服务登录、用户在其他服务登录)(具体说明可以看该类说明,该类有个简单实现SimpleLocalUserFlagBusiness(仅用于单个服务,并不建议使用,详见UserFlagBusiness说明)),如果返回用户在本服务登录则会调用这个方法;在该方法需要退出在本服务登录的用户。
logoutRemoteUserWhenUserReLogin:退出在其他服务上登录的用户:通知其他服务退出该用户。
2. 登录:
继承com.dc.utm.handler.login. OnUserLoginHandler类,实现抽象方法:
loginLinkCheck:登录连接检查(在“Utm详细实现 ->用户生命流程 -> 用户登录 -> 详细流程”中已有说明):在服务上登录成功返回 true,登录失败返回false(可以参考sfs的实现和netty的实现)。
userLogin:用户登录成功:用户登录成功后的业务处理和 给前端返回登录成功。
3. 退出:
继承com.dc.utm.handler.logout.OnUserDisconectHandler类,实现抽象方法:
注:LogoutHandler 和OnUserDisconectHandler只有一个会被触发 (LogoutHandler后用户将认为是游客,其断线将不会触发OnUserDisconectHandler)
userLogout:用户退出:用户退出的业务处理和 给前端返回退出成功。
4. 断线:
继承com.dc.utm.handler.logout.OnUserDisconectHandler类,实现抽象方法:
注:LogoutHandler 和OnUserDisconectHandler只有一个会被触发 (LogoutHandler后用户将认为是游客,其断线将不会触发OnUserDisconectHandler)
userDisconect:用户断线:用户断线的业务处理。
然后需要实现用户退出线程(UserLogoutCheckBusiness)的抽象方法:
(用户登录时,如果该用户之前已经登录到服务上,则utm会等待老的用户退出后,才执行新的登录,由这个线程在查看老的用户是否登出,utm在UserFlagBusiness的setLoginFlag方法返回不成功时会自动将用户放入到该实例的等待处理用户中)
waitLogoutTimeOut:等待时间超过maxWaitLogoutTime毫秒,用户依然未从原来的服务上退出 (该方法主要是负责通知前端说登录失败)
接着是实例化utm:(sfs和netty实例化只有细微差别,这里给出sfs的示例):
1. 创建两个cmd对应处理器的Map,在后面我们会往其中加入处理器(在sfs中cmd只能是string类型)
//游客请求cmd