实际上是通过setattr DEPENDENCIES动态设置的,
以federation_client为例.
get_federation_client 是在初始化的时候通过_make_dependency_method
构造的.
_make_dependency_method最终会调用build_federation_client来构造实例,
至于为什么这么做,我猜可能是为了延迟实例初始化.避免不避免的构建.
SynapseHomeServer的_listener_http关联到SynapseSite SynapseSite是按照twisted框架导出真实服务接口的地方.
SynapseHomeServer的_configure_named_resource是加载相应的resource的入口 在这里可以看到配置文件如何影响加载
ClientRestResource这是目前client-server api的总入口. TransportLayerServer这是fedoration 服务的总入口
client-server ,fedoration,admin等等服务端最终的handler都在这里. 其中最复杂的莫过于sync.py中负责/sync的api
txn_ctrl--> _TransactionController txn AppServiceTransaction
LoginType.APPLICATION_SERVICE 通过他可以跟踪到 application service 如何新注册用户
v1_only/register.py
1. on_POST 就算是禁止注册,也可以通过application service注册用户
2. _do_app_service 进行注册
3. appservice_register url中的access_token以及userId传进去.
storage/appservice.py:
1. 如果这个access_token能够找到对应的service,则允许注册,否则不允许
我觉得这里的service应该是在配置文件homeserver.yaml app_service_config_files
2. application_service提供了一一系列验证,如果可以将此用户写入数据库中
3. 问题是如何登陆呢?这种方式也没法控制用户注册, 因为他并不会转到application service,让他们来处理这个事情.