Appservice 代码在 src/github.com/matrix-org/dendrite/appservice 下,原版matrix的appservice主要起到外部应用和homeserver交互的作用,一个应用相当于是一个appservice,appservice也同时提供各种复杂协议接口对外。 但是我们的机器人框架是目前是基于 as-go 之外独立开发的部分,同时homeserver支持的接口不足以实现复杂功能,目前appservice的主要功能就是将收到的消息进行不丢失的转发。
据了解目前appservice需要支持的外部程序只有as-go。
appservice 中每个worker负责处理一个挂载过来的时间,当事件发生后,appservice 会判断该事件是否是注册过来的服务感兴趣的事件,如果是会对该事件进行发送,同时会把事件放到数据库中,如果收到下游服务接受的信号再从数据库中删除这个事件。
appservice 可以同时支持挂载多个服务。
appservice 加载了roomserver的db 造成了耦合(但是只使用了查询),原因在于roomserver接口实现不完全。