Show / Hide Table of Contents

Kift

坎巴拉太空计划(Kerbal Space Program, v1.8.1)的Thrift(v0.12.0)插件.

在线文档: https://vaporz.github.io/Kift/index.html

一开始打算用GRPC,但GRPC要求.NET Framework的版本在4.5以上,而KSP是基于3.5版本的,很老的版本。

Kift是什么?

Kift受启发自 kRPC —— 一个由@djungelorm开发的很棒的Mod。

Kift是位于你的程序和游戏程序之间的桥梁,让你能够在运行于游戏外的程序中,控制游戏内内容。

软件架构

Kift在KSP进程里启动一个Thrift Server线程。 这个Server接收请求,并发送到一个消息队列(MQ)。KSP中有一个Addon会从MQ中消费消息,并运行对应的Executor。 对每一个Request,Server在接收到Response之前,会一直阻塞等待,直到收到Response,或者超时。

支持的编程语言

理论上,只要是Thrift v0.12.0支持的语言,Kift都支持。

Thrift v0.12.0支持的语言有:

C, C++, Go, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml 和 Delphi, 等等.

入门指南

1, 安装Kift

下载Kift.zip,将压缩包中的Kift文件夹复制到"Kerbal Space Programe/GameData"内。

现在服务端就准备好了。当你的游戏载入完成,显示出主菜单是,Thrift server应该已经启动,并准备好接收请求了。

2, 连接Server端,调用Kift API

为了跟Thrift Server端互动,你需要自己写Client端的代码。

下面的示例代码,展示了如何获取当前游戏中的飞行器相关的数据:

 // 游戏已经启动,并且必须在Flight场景下

 // 导入"Kift.ThriftGen.dll"(编译自"Kift/thrift-gen/gen-csharp"),
 // 或者你可以自己生成桩代码,然后编译并导入你的DLL文件。
 using Kift;

 // 导入"Thrift.dll": https://cwiki.apache.org/confluence/display/thrift/ThriftUsageCSharp
 using Thrift.Protocol;
 using Thrift.Transport;

 ...

 // 监听端口是可配置的,配置文件是"Kerbal Space Program/GameData/Kift/server.cfg"
 TTransport transport = new TFramedTransport(new TSocket("localhost", 9090));
 TProtocol protocol = new TCompactProtocol(transport);
 KiftService.Client client = new KiftService.Client(protocol);
 transport.Open(); // 连接Server

 Vessel v = client.currentVessel(); // 请求 API "currentVessel"
 Console.WriteLine(v.Name);

 ...

 transport.Close(); // 最后关闭连接

Kift APIs

Kift提供两大类API:“数据同步API”和“指令API”。

“数据同步API”从游戏中接收数据,而“指令API”则向游戏发送指令,以便控制载具,部件以及游戏本身。

“指令API”又根据目标不用,分成三个小类。

  • 数据同步API
    • 实时快照
      实时读取数据(几乎实时),方便你监控一些指标数据,比如高度,速度等。
    • 数据读取
      从当前游戏中读取数据,比如当前载具数据,获取载具不见列表等。
  • 指令API
    • 载具控制
      用于控制一个载具的API,比如控制俯仰/偏航/桶滚,开启/关闭RCS,部署/收起着陆器,等等。
    • 部件控制
      用于控制单个部件的API,比如打开/收起太阳能帆板,打开/关闭货舱,等等。
    • 游戏控制
      用于控制游戏本身的API,比如时间加速,改变视角模式,增加/删除机动点,等等。

更多细节请查看在线文档: https://vaporz.github.io/Kift/api/index.html

为其他编程语言生成Thrift桩代码

在"Kift/thrift-gen"文件夹内有一些现成的Thrift生成代码,涵盖的语言有:
C, C++, C#, Go, Java, JavaScript, Node.js, Lua, PHP, Ruby 和 Rust。

只需要向你的项目中导入这些代码,然后你就可以创建Client来连接Server,并请求Kift API了。

如果你使用的语言不在列表中,你可以自己生成。

Thrift是一个软件框架,用来开发可扩展,跨语言的程序。通过Thrift的帮助,你可以用任何语言写Client端代码,只要Thrift支持。

Kift提供的API都定义在“Kift”文件夹内的IDL文件“service.thrift”中。

下载 Thrift v0.12.0,然后用下面的命令生成桩代码:

thrift --gen <language> <Thrift filename>

例如,如果你用C#开发,那就运行:

$thrift -r --gen csharp service.thrift

如果你用Golang,那就运行:

$thrift -r --gen go service.thrift

一些备注

  • 致Kift开发者:复制"Kerbal Space Program"文件夹,粘贴到"Kift"文件夹内。
  • 凡是通过现有API能够实现的功能,一般都不会考虑加入到Kift API列表中,比如,自动驾驶。
  • 高级功能应当在Client端实现,代码放在目录"Kift/client/[Language]"中。
  • Improve this Doc
Back to top Copyright © 2019 Zhang Xiao