(@NotNull BDelayLogoutCustom custom)
| 784 | } |
| 785 | |
| 786 | private long tryLogout(@NotNull BDelayLogoutCustom custom) throws Exception { |
| 787 | var roleId = custom.getRoleId(); |
| 788 | var currentLoginVersion = custom.getLoginVersion(); |
| 789 | // local online 独立判断version分别尝试删除。 |
| 790 | var local = _tlocal.get(roleId); |
| 791 | if (local != null && local.getLoginVersion() == currentLoginVersion) { |
| 792 | var ret = removeLocalAndTrigger(roleId); |
| 793 | logger.info("tryLogout: roleId={}, currentLoginVersion={}, removeLocalAndTrigger={}", |
| 794 | roleId, currentLoginVersion, ret); |
| 795 | if (ret != 0) |
| 796 | return ret; |
| 797 | } |
| 798 | // 如果玩家在延迟期间建立了新的登录,下面版本号判断会失败。 |
| 799 | var onlineShared = getOnlineShared(roleId); |
| 800 | var logoutVersion = onlineShared != null ? onlineShared.getLogoutVersion() : -1; |
| 801 | if (onlineShared != null && onlineShared.getLink().getState() != eOffline |
| 802 | && onlineShared.getLoginVersion() == currentLoginVersion |
| 803 | && assignLogoutVersion(onlineShared)) { |
| 804 | var ret = logoutTrigger(roleId, LogoutReason.LOGOUT); |
| 805 | logger.info("tryLogout: roleId={}, state={}, currentLoginVersion={}, logoutVersion={}, logoutTrigger={}", |
| 806 | roleId, onlineShared.getLink().getState(), currentLoginVersion, logoutVersion, ret); |
| 807 | if (ret != 0) |
| 808 | return ret; |
| 809 | } else { |
| 810 | logger.info("tryLogout: roleId={}, state={}, version.login/logoutVersion={}/{}, currentLoginVersion={}", |
| 811 | roleId, onlineShared != null ? onlineShared.getLink().getState() : -1, |
| 812 | onlineShared != null ? onlineShared.getLoginVersion() : -1, logoutVersion, currentLoginVersion); |
| 813 | } |
| 814 | return Procedure.Success; |
| 815 | } |
| 816 | |
| 817 | public static class DelayLogout implements TimerHandle { |
| 818 | @Override |
no test coverage detected