(@NotNull String account, long roleId, @NotNull String linkName, long linkSid)
| 840 | } |
| 841 | |
| 842 | public long sendError(@NotNull String account, long roleId, |
| 843 | @NotNull String linkName, long linkSid) throws Exception { |
| 844 | var onlineShared = getOrAddOnlineShared(roleId); |
| 845 | |
| 846 | var local = _tlocal.get(roleId); |
| 847 | if (local != null && local.getLoginVersion() != onlineShared.getLoginVersion()) { // 本机数据已经过时,马上删除。 |
| 848 | var ret = removeLocalAndTrigger(roleId); |
| 849 | if (ret != 0) { |
| 850 | logger.info("sendError({}): account={}, roleId={}, linkName={}, linkSid={}, removeLocalAndTrigger={}", |
| 851 | multiInstanceName, account, roleId, linkName, linkSid, ret); |
| 852 | return ret; |
| 853 | } |
| 854 | } |
| 855 | |
| 856 | // skip not owner: 仅仅检查LinkSid是不充分的。后面继续检查LoginVersion。 |
| 857 | var link = onlineShared.getLink(); |
| 858 | if (!link.getLinkName().equals(linkName) || link.getLinkSid() != linkSid) { |
| 859 | logger.info("sendError({}): account={}, roleId={}, linkName={}, linkSid={} != linkName={}, linkSid={}", |
| 860 | multiInstanceName, account, roleId, linkName, linkSid, link.getLinkName(), link.getLinkSid()); |
| 861 | return 0; |
| 862 | } |
| 863 | |
| 864 | onlineShared.setLink(new BLink(link.getLinkName(), link.getLinkSid(), eLinkBroken)); |
| 865 | // local 在这个流程里面不需要setLink,如果是这个登录的,那么扇面已经删除(removeLocalAndTrigger),否则不需要修改。 |
| 866 | |
| 867 | var ret = linkBrokenTrigger(account, roleId); |
| 868 | // for shorter use |
| 869 | logger.info("sendError({}): account={}, roleId={}, linkName={}, linkSid={}, triggerEmbed={}", |
| 870 | multiInstanceName, account, roleId, linkName, linkSid, ret); |
| 871 | |
| 872 | // see tryLogout |
| 873 | // 如果玩家在延迟期间建立了新的登录,下面版本号判断会失败。 |
| 874 | if (onlineShared.getLink().getState() != eOffline && assignLogoutVersion(onlineShared)) { |
| 875 | var ret2 = logoutTrigger(roleId, LogoutReason.LOGOUT); |
| 876 | logger.info("sendError: roleId={}, state={}, logoutTrigger={}", |
| 877 | roleId, onlineShared.getLink().getState(), ret2); |
| 878 | return ret2; |
| 879 | } |
| 880 | logger.info("sendError: roleId={}, state={}, version.login/logoutVersion={}", |
| 881 | roleId, onlineShared.getLink().getState(), onlineShared.getLoginVersion()); |
| 882 | return 0; |
| 883 | } |
| 884 | |
| 885 | public long linkBroken(@NotNull String account, long roleId, |
| 886 | @NotNull String linkName, long linkSid) throws Exception { |
no test coverage detected