(long sender, @NotNull String actionName, @NotNull Iterable<Long> roleIds, @Nullable Binary parameter, boolean processNotOnline)
| 1630 | } |
| 1631 | |
| 1632 | public void transmitEmbed(long sender, @NotNull String actionName, @NotNull Iterable<Long> roleIds, |
| 1633 | @Nullable Binary parameter, boolean processNotOnline) { |
| 1634 | if (providerApp.zeze.getConfig().getGlobalCacheManagerHostNameOrAddress().isEmpty()) { |
| 1635 | // 没有启用cache-sync,马上触发本地任务。 |
| 1636 | processTransmit(sender, actionName, roleIds, parameter); |
| 1637 | return; |
| 1638 | } |
| 1639 | |
| 1640 | var groups = groupByServerId(roleIds); |
| 1641 | RoleOnServer groupLocal = null; |
| 1642 | for (var it = groups.iterator(); it.moveToNext(); ) { |
| 1643 | var group = it.value(); |
| 1644 | if (group.serverId == -1) { |
| 1645 | // not online |
| 1646 | if (processNotOnline) |
| 1647 | groupLocal = merge(groupLocal, group); |
| 1648 | else |
| 1649 | logger.info("transmit not online roles={}", group); |
| 1650 | continue; |
| 1651 | } |
| 1652 | if (group.serverId == providerApp.zeze.getConfig().getServerId()) { |
| 1653 | // loopback 就是当前gs. |
| 1654 | groupLocal = merge(groupLocal, group); |
| 1655 | continue; |
| 1656 | } |
| 1657 | var transmit = new Transmit(); |
| 1658 | transmit.Argument.setActionName(actionName); |
| 1659 | transmit.Argument.setSender(sender); |
| 1660 | transmit.Argument.getRoles().addAll(group.roles); |
| 1661 | transmit.Argument.setOnlineSetName(multiInstanceName); |
| 1662 | if (parameter != null) |
| 1663 | transmit.Argument.setParameter(parameter); |
| 1664 | var ps = providerApp.providerDirectService.providerByServerId.get(group.serverId); |
| 1665 | if (ps == null) { |
| 1666 | assert groupLocal != null; |
| 1667 | groupLocal.roles.addAll(group.roles); |
| 1668 | continue; |
| 1669 | } |
| 1670 | var socket = providerApp.providerDirectService.GetSocket(ps.getSessionId()); |
| 1671 | if (socket == null) { |
| 1672 | assert groupLocal != null; |
| 1673 | groupLocal.roles.addAll(group.roles); |
| 1674 | continue; |
| 1675 | } |
| 1676 | Transaction.whileCommit(() -> transmit.Send(socket)); |
| 1677 | } |
| 1678 | if (groupLocal != null && !groupLocal.roles.isEmpty()) |
| 1679 | processTransmit(sender, actionName, groupLocal.roles, parameter); |
| 1680 | } |
| 1681 | |
| 1682 | public void transmit(long sender, @NotNull String actionName, @NotNull Iterable<Long> roleIds) { |
| 1683 | transmit(sender, actionName, roleIds, null); |
no test coverage detected