FreeKill/doc/dev/package.md

3.2 KiB
Raw Blame History

FreeKill 的包管理策略

dev > 包管理


FreeKill使用git进行包管理具体而言是使用libgit2库进行管理。

包的组织

所有拓展包都位于packages/目录下。其中standard标包、standard_cards标包卡牌和manuvering_cards军争卡牌 TODO 属于基础拓展其直接处于FreeKill的项目仓库之下。其他所有的拓展均处于项目之外。

每个拓展包都是一个单独的文件夹内含代码文件init.lua以及诸如其他lua文件和fkp文件等等和音图等资源文件。关于具体如何组织各种文件请参照已有的拓展包。

包的管理

包管理使用git以下使用类似git命令行的方式解说。

首先packages中除了基本的三个包之外其他的包都要从仓库中排除掉。这方面由一个.gitignore文件控制。

然后在packages目录下有一个名为packages.db的文件统领所有拓展包。这是个sqlite数据库结构详见数据库

下面从连接过程中简要分析这个文件的作用:

  1. 当一个客户端尝试对服务端发起连接请求的时候首先它们之间会先比较MD5值。
  2. 如果MD5通过则无事发生否则服务端会把自己的packages.db中的关键信息发送给客户端。
  3. 客户端根据文件内容检查自己的拓展包。如果那个文件夹存在那么就git fetch -> git checkout <hash>。
  4. 如果文件夹不存在那么先git clone然后再checkout。
  5. 做完这些后,客户端再次发起请求。若仍不通过,则向用户通知错误信息。

在这个过程中如果出现任何一个文件夹内有未提交的更改拓展包开发者有时候可能因为疏忽而未通过MD5检查或者出现根本不是git仓库的文件夹那么都会直接进入报错环节。

有时候客户端会包含服务端所没有的拓展包这时候比起直接删除之更加明智的选择是将其标记为禁用。将拓展包文件夹的名字设为xxx.disabled即可将拓展包标记为禁用的拓展包。禁用的拓展包不会被游戏加载也不会被MD5检测计入。

包的托管

一般来说都是推荐将项目放在github上面的但由于FreeKill暂且不考虑国际化且必须照顾广大玩家的体验因此将拓展包托管到github可能不是一个明智的选择。推荐将拓展包托管到gitee平台或者其他的好办法也行。

总之有一点要注意的是packages.db中的url需要是国内访问比较方便的网站才行。

包的部署

此处不讨论具体如何编写代码,单论在这个管理框架下如何进行开发。

一般来说在对一个仓库进行开发时由于目前各托管平台都用SSH Key认证而非用户名密码因此仓库的URL通常为git@gitxxx.com:xxxx/xxxx.git。这样的URL有一个问题就在于只有认证过的用户可以clone而非所有人。

因此在部署的时候一定要保证所有url都是https://xxxx。这一点FreeKill是不会进行检测的

包的下载与更新TODO

客户端使用GUI服务端使用Fk shell或者直接编辑packages.db。