()
| 93 | } |
| 94 | |
| 95 | private static int mainRun() { |
| 96 | while (true) { |
| 97 | try { |
| 98 | // 轮询:等待Global配置以及等待子进程退出。 |
| 99 | try { |
| 100 | var cmd = receiveCommand(udpSocket); |
| 101 | switch (cmd.command()) { |
| 102 | case Register.Command: |
| 103 | var reg = (Register)cmd; |
| 104 | var code = 0; |
| 105 | if (monitors.containsKey(reg.serverId)) |
| 106 | code = 1; |
| 107 | else { |
| 108 | var monitor = new Monitor(reg); |
| 109 | monitors.put(reg.serverId, monitor); |
| 110 | monitor.start(); |
| 111 | } |
| 112 | sendCommand(udpSocket, cmd.peer, new CommonResult(reg.reliableSerialNo, code)); |
| 113 | logger.info("Register! Server={} code={}", reg.serverId, code); |
| 114 | break; |
| 115 | |
| 116 | case GlobalOn.Command: |
| 117 | var on = (GlobalOn)cmd; |
| 118 | code = 0; |
| 119 | var monitor = monitors.get(on.serverId); |
| 120 | if (monitor != null) { |
| 121 | monitor.setConfig(on.globalIndex, on.globalConfig); |
| 122 | logger.info("GlobalOn! Server={} ServerDaemonTimeout={} ServerReleaseTimeout={}", |
| 123 | on.serverId, on.globalConfig.serverDaemonTimeout, on.globalConfig.serverReleaseTimeout); |
| 124 | } else { |
| 125 | logger.warn("GlobalOn! not found serverId={} ServerDaemonTimeout={} ServerReleaseTimeout={}", |
| 126 | on.serverId, on.globalConfig.serverDaemonTimeout, on.globalConfig.serverReleaseTimeout); |
| 127 | code = 1; |
| 128 | } |
| 129 | sendCommand(udpSocket, cmd.peer, new CommonResult(on.reliableSerialNo, code)); |
| 130 | break; |
| 131 | |
| 132 | case DeadlockReport.Command: |
| 133 | logger.warn("deadlock report"); |
| 134 | destroySubprocess(); |
| 135 | break; |
| 136 | } |
| 137 | } catch (SocketTimeoutException ex) { |
| 138 | // skip |
| 139 | } |
| 140 | if (subprocess.waitFor(0, TimeUnit.MILLISECONDS)) |
| 141 | return subprocess.exitValue(); |
| 142 | } catch (Throwable ex) { // print stacktrace. |
| 143 | logger.fatal("Daemon.mainRun", ex); |
| 144 | fatalExit(); |
| 145 | return -1; // never run here |
| 146 | } |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | private static void fatalExit() { |
| 151 | subprocess.destroy(); |
no test coverage detected