基岩版服务器进程操控器
| 144 | |
| 145 | |
| 146 | class _BedrockServerProcessBridge(_ServerProcessBridge): |
| 147 | """基岩版服务器进程操控器""" |
| 148 | |
| 149 | def __init__(self, v): |
| 150 | """ |
| 151 | 初始化基岩版服务器处理器 |
| 152 | """ |
| 153 | # 基岩版服务器不使用 Java,直接运行可执行文件 |
| 154 | self.config: ServerVariables = v |
| 155 | self.workingDirectory: str = str(osp.realpath(f"./Servers/{self.config.serverName}")) |
| 156 | self.partialData: str = b"" |
| 157 | self.handledServer = None |
| 158 | |
| 159 | # 确定基岩版服务器可执行文件路径 |
| 160 | self.executablePath = self._getBedrockExecutable() |
| 161 | QObject.__init__(self) |
| 162 | self.serverProcess = self.createServerProcess() |
| 163 | |
| 164 | def _getBedrockExecutable(self) -> str: |
| 165 | """ |
| 166 | 根据操作系统获取基岩版服务器可执行文件路径 |
| 167 | """ |
| 168 | system = platform.system().lower() |
| 169 | server_dir = self.workingDirectory |
| 170 | |
| 171 | if system == "windows": |
| 172 | executable = osp.join(server_dir, "bedrock_server.exe") |
| 173 | elif system == "darwin": # macOS |
| 174 | executable = osp.join(server_dir, "bedrock_server") |
| 175 | elif system == "linux": |
| 176 | executable = osp.join(server_dir, "bedrock_server") |
| 177 | else: |
| 178 | MCSL2Logger.error(f"不支持的操作系统: {system}") |
| 179 | executable = osp.join(server_dir, self.config.coreFileName) |
| 180 | |
| 181 | # 如果默认路径不存在,尝试使用配置中的文件名 |
| 182 | if not osp.exists(executable): |
| 183 | alt_executable = osp.join(server_dir, self.config.coreFileName) |
| 184 | if osp.exists(alt_executable): |
| 185 | executable = alt_executable |
| 186 | else: |
| 187 | MCSL2Logger.warning(f"基岩版服务器可执行文件不存在: {executable}") |
| 188 | MCSL2Logger.warning(f"备选路径也不存在: {alt_executable}") |
| 189 | |
| 190 | MCSL2Logger.info(f"基岩版服务器可执行文件: {executable}") |
| 191 | return executable |
| 192 | |
| 193 | def createServerProcess(self) -> _Server: |
| 194 | """ |
| 195 | 创建基岩版服务器进程对象 |
| 196 | """ |
| 197 | self.handledServer = _Server() |
| 198 | self.handledServer.process = QProcess() |
| 199 | |
| 200 | # 基岩版服务器直接运行可执行文件,不需要 Java |
| 201 | self.handledServer.process.setProgram(self.executablePath) |
| 202 | self.handledServer.process.setArguments([]) # 基岩版通常不需要额外参数 |
| 203 | self.handledServer.process.setWorkingDirectory(self.workingDirectory) |