VCC:给 UNIX 程序员的酷炫命令行聊天软件

2022-04-03 10:07


VCC 是一个 UNIX/Linux 上的命令行聊天软件。

VCC 简介

我热爱 UNIX/Linux 和 C 语言,VCC(very cool chat)是我和其他人开发的一个业余(课余)作品。它是用 C 编写的,是一个运行在 UNIX/Linux 上的命令行聊天软件。VCC 目前还处于相当早期的阶段。这次将它介绍给大家是希望引来一些关注,无论是建议还是 bug 报告。当然,要是你对这个项目感兴趣,也非常欢迎你参与到开发当中。

我们开发它一方面是为了在命令行上更好的进行聊天对话,另一方面纯粹为了提升技术以及为了好玩。使用 VCC,你可以在写代码的时候快速切换到它所在终端标签聊天,这一直是我的一个梦想。

当前版本的 vcc 1.5.2/vccd 1.6.1 支持用户登录、广播消息、创建 / 加入会话,以及在会话中聊天。

VCC 采用 GPLv3 许可证,目前贡献者有我(intirain)以及 3swordman。

安装 VCC

VCC 分为客户端(即 vcc)以及服务端(即 vccd),托管在码云上:

将上述代码仓库克隆到本地后,进入该目录并且运行 make 来编译。你会得到一个可执行文件 vcc 或者 vccd

运行 vcc 客户端

不提供参数直接运行客户端,会连接到我建立的默认服务器(124.223.105.230):

vcc $ ./vcc 

它将会提示你输入用户名以及密码。如果你是游客,则可使用游客账户(用户名和密码都是 guest)。而如果你想要获得一个账号,请向我发邮件( mailto:intirain@163.com )联系我。

如果你想要连接到自己那有着 128 个核心、1 TB 内存、SSD 1 YB 的小型服务器,请运行:

vcc $ ./vcc [服务器 IP 地址] # 当前还不支持域名

登录成功之后即可开始聊天,只需要输入消息并且回车即可。过长的信息(大约 200 字节以上)会被截断。

运行自己的 vccd 服务器端

你可以在 46 端口上运行自己的 vccd 服务。

以下命令需要 root 权限。

如果你是第一次运行 vccd,首先请执行安装脚本:

vccd $ sudo scripts/install

该脚本会创建文件 /etc/vccd-runtime,并且在其中记录了 vccd 的运行时目录的位置($HOME/.vccd-runtime)。该目录中保存着用户信息(当前还没有加入聊天记录功能),具体的位置是 users/用户名,每个文件都是一个采用本机字节序的结构体。

vccd $ sudo ./vccd

上列命令只是启动了 vccd 守护进程(严格来说,它只能算一个运行于后台的程序,并不是“守护进程”),而没有创建任何用户。运行如下命令可以创建用户(不需要重启 vccd):

vccd $ sudo scripts/adduser <用户名> <密码>

vcc 命令

vcc (客户端)支持命令,它的命令都以 - 开头。以下是当前 vcc (1.5.2)支持的所有命令,可以在连接到服务器的 vcc 客户端里输入 -help 命令查看:

#000 intirain$: -help
-help:	Show information about every message. 
-quit:	Disconnect to server and exit vcc. 
-ls:	List all users online now. 
-rate:	Change message refresh rate. 
-newse:	Create a new session. 
-currs:	Get current session id. 
-swtch:	Switch to another session. 
-lsse:	List all sessions created. 
#000 intirain$: 

以下是对每一条命令的详细描述:

命令名称 描述
-help 显示所有命令的帮助信息
-quit 退出 vcc(相当于杀掉它)
-ls 查看当前在线的所有用户
-rate 设置刷新率
-newse 新建一个会话
-currs 查看当前会话 id(sid)
-swtch 加入另一个会话
-lsse 查看服务器上所有已经创建了的会话

说明:

  • 刷新率:vcc 需要时序性的请求服务器来获取新消息。刷新率以赫兹为单位,默认为 1 Hz (即每秒刷新一次)。刷新率不得超过 1000 Hz (即每一毫秒刷新一次)。
  • 会话:vcc 中的群聊叫做“会话”。会话是由一或多个用户组成的聊天室,0 号会话为大厅,所有人都在其中。会话无法退出。现在还不支持销毁一个会话,只能通过杀掉 vccd 来手动完成。
  • 会话不会退出,因此在加入另一会话后你仍在原先的会话中,仍会收到原先会话中的消息。但是你在加入另一会话后发送的消息,并不会被原先会话中的人收到。会话的创建者在会话创建后就移植在会话中。

vcc 还没有加入命令行参数的支持,也就是说所有的参数都需要你在键入该命令交互式输入。

VCC 的输出信息

VCC 使用了 ANSI 的 CSI 转义,但没有检查当前终端对该标准的支持。如果你在类似串口的终端上运行 vcc,将会直接得到没有渲染的转义字符。vcc 的配色是可更改的,默认的配色主题在 pretty.c中定义,是一个 C 语言结构体,该结构体在 include/vcc/pretty.h 中定义。

如果你觉得当前默认的配色不甚好看,完全可以在 pretty.c 中新建自己的配色,也可以复制并更改默认配色。我们也鼓励大家将自己认为好看的配色 PR 到码云仓库,我们在看到后会第一时间合并。

参与 VCC 的开发

vcc 以及 vccd 是以 GPL 许可证发布的,属于我们的 “inti 计划”旗下项目之一。我们鼓励你参与开发改进它,抱歉,我们无力为此支付报酬,参与开发是无偿的。

“inti 计划”是我们(其实也就俩人)创建的一个计划,目的是为了将优秀的自由软件(Linux 以及 GNU 计划)推向社会。我们计划开发的项目是 GNU 计划中所不包含的软件或者库,采用的编程语言为 C/C++。非常欢迎大家的加入。

VCC 还处于非常早期的开发阶段,但它应该已经具备了一个基本聊天软件的功能。我们当然希望你能够使用它、改进它,并且将它推广给身边使用 UNIX/Linux 的人们。目前,我们正在稳定当前的版本。将来,它也许会成为一个不错的社交软件,动态之类的高级功能也会实现。

顺便说一句,VCC 的 Windows 移植版本正在开发中,预计还需要几周的时间(毕竟我们只有周末才能编程 :( )。移植之后的 VCC 应该不会保留配色(因为 Windows 并不支持 CSI 转义)。


作者简介:intirain,喜欢 UNIX、x86、RISC-V 上的 C。


via: https://github.com/LCTT/Articles/pull/13

作者:intirain 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出