Agent and SDK#

Overview#

该项目本身是一个可安装的 Python 库. 里面包含两个重要模块 Agent 和 SDK.

Agent 是一个需要再 EC2 游戏服务器上安装的 CLI 程序. 它对 SOAP 的 HTTP Request 和 XML input / output 进行了封装, 提供了一套 CLI 接口用于在服务器上执行 GM 命令. 它是所有需要远程执行 GM 命令的外部程序的代理. 有了它, 我们就可以通过 AWS SSM Run Command 这个服务安全地在 EC2 执行任何远程命令. 强调一下, Agent 必须要在 EC2 游戏服务器上安装.

SDK 则是一套开发者工具. 它对用 Run Command Service 远程执行 CLI 的业务逻辑进行了封装, 并且做出了很多优化, 例如利用 AWS S3 储存输入和输出结果, 以应对批量执行大量命令的情况, 还例如非常高级的异常处理. 基于这套 SDK, 开发者可以很容易地开发出远程执行 GM 命令的应用程序, 将其嵌入到魔兽世界服务器管理后台中.

Agent#

下面列出了部分常用 Agent 的 CLI 命令的功能和语法. 至于详细的命令和参数列表, 请参考 main 模块的文档.

查看服务器状态:

/home/ubuntu/git_repos/acore_soap_app-project/.venv/bin/acsoap gm ".server info"

创建新账号:

/home/ubuntu/git_repos/acore_soap_app-project/.venv/bin/acsoap gm ".account create myusername mypassword"

SDK#

下面这个例子展示了如何用 SOAPRequest() 函数来在服务器上编写基于 SOAP 的自动化脚本.

 1# -*- coding: utf-8 -*-
 2
 3"""
 4这个脚本用于测试在 EC2 实例上运行 Soap 命令. (只能在 EC2 上运行, 不能在本地电脑上运行)
 5"""
 6
 7from acore_soap_app.agent.api import SOAPRequest
 8
 9command = "server info"
10# command = ".account onlinelist"
11
12response = SOAPRequest(command=command).send()
13response.print()

下面这个例子展示了如何用 run_remote_command() 函数来在任何地方远程执行 GM 命令.

 1# -*- coding: utf-8 -*-
 2
 3"""
 4这个模块用来测试运行封装好的命令.
 5"""
 6
 7from boto_session_manager import BotoSesManager
 8from acore_soap_app.sdk.api import run_soap_command
 9
10bsm = BotoSesManager(profile_name="bmt_app_dev_us_east_1")
11server_id = "sbx-blue"
12
13commands = [
14    ".account delete test1",
15    ".account create test1 1234",
16    ".account set gmlevel test1 3 -1",
17    ".account set password test1 123456 123456",
18]
19
20command_id = run_soap_command(
21    bsm=bsm,
22    server_id=server_id,
23    request_like=commands,
24    sync=False,
25)

canned 模块 还提供了许多对具体的 GM 命令业务逻辑高度封装后的接口. 更加的 Pythonic.

 1# -*- coding: utf-8 -*-
 2
 3"""
 4这个模块用来测试运行封装好的命令.
 5"""
 6
 7from boto_session_manager import BotoSesManager
 8from acore_soap_app.sdk.api import canned
 9
10bsm = BotoSesManager(profile_name="bmt_app_dev_us_east_1")
11server_id = "sbx-blue"
12
13print(canned.get_online_players(bsm, server_id))
14print(canned.is_server_online(bsm, server_id))
15
16print(canned.create_account(bsm, server_id, "test1", "1234"))
17print(canned.set_gm_level(bsm, server_id, "test1", 3, -1))
18print(canned.set_password(bsm, server_id, "test1", "123456"))
19print(canned.delete_account(bsm, server_id, "test1"))
20
21print(canned.gm_list(bsm, server_id))

What’s Next#

了解了 Agent 和 SDK 两个组件以后, 我们可以进入下一篇文档, 来看看一些小工具吧.