#status-bar #server-status #i3 #命令行工具 #星际迷航在线 #sto

app stostatus

检查星际迷航在线服务器是否因维护而宕机,适用于您的状态栏。无需依赖其他crate。

2个版本

0.1.1 2023年12月13日
0.1.0 2023年12月13日

#174配置

自定义许可

93KB
376

STO服务器状态(适用于Linux状态栏)


这是一个命令行工具,通过查询游戏启动器相同的API,简单报告星际迷航在线游戏服务器是否因维护而宕机。旨在与i3blocks、i3status、xmobar、conky等状态栏集成,以便您可以跟踪服务器何时重新上线,或者它们目前是否因维护而宕机。

用法

只需运行它。实际上没有其他的事情要做。至于将其集成到您的状态栏中,这完全取决于状态栏。它所做的只是将服务器状态作为普通纯文本输出到标准输出。通常您只需在状态栏的配置文件中添加一个部分,告诉它运行此二进制文件,给它一个合理的间隔(120秒),然后您的状态栏就会每120秒更新一次,显示游戏服务器的状态。代码的大部分是获取数据。

无crate依赖

此工具无需依赖单个crate即可完成其功能。考虑到需求的基本性,将像reqwestserdeserde_json以及所有它们的依赖项附加到本质上只是一个简单的HTTP GET请求,并检查响应体中是否存在子串,这感觉就像是牺牲了懒惰,增加了二进制的大小,减慢了构建时间,并使得没有这些crate在您的缓存中就无法离线编译。

从编译器的角度考虑过度设计的代码的概念;编译器不关心谁编写了代码或它从哪里来。在一个场景中,它必须编译四倍的源代码,而在另一个场景中,它则不需要。您编写的源代码,或者它来自依赖树,本身在编译器面临将其转换为机器代码的复杂性方面并没有意义。机器代码可以过度设计,或者这个概念仅限于存在于它创建的依赖树某一层的源代码吗?

在处理这个项目的过程中,我开始编写自己的JSON解析器,直到我意识到,即使这样也不过是冗余,因为我只是为了从响应数据中提取一个唯一可识别的键的值。也许我只需要……搜索它?提取子串是编程中最简单的问题之一,我究竟为什么要写JSON解析器?接下来,我难道还要拉出一个正则表达式RFC?够了。

话虽如此,我并不是疯子。发送HTTP请求通过TCP套接字和提取子串都是微不足道的事情,但是解压缩GZip压缩的响应数据并不是。幸运的是,编写FFI绑定到zlib(一个几乎存在于每一个Linux安装上的库)是非常简单的。这意味着这个工具在技术上确实有一个“依赖”,就像cat可能是shellscript的依赖一样;zlib无处不在。然而,与crate不同,你甚至无法知晓

如果我说是为了“好玩”的因素,那我就撒谎了,但我确实认为一些程序员太急于高估某些任务的复杂性,并默认使用库(*咳嗽*,leftpad),这种心态可能会阻止你了解整个过程其实很简单。说真的,发送HTTP GET请求……只是将明文写入TCP套接字。如果你能够格式化字符串并写入文件,你就可以格式化字符串并写入套接字。这里没有魔法。

无运行时依赖