2个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年6月10日 |
---|---|
0.0.1 | 2017年5月31日 |
#16 in #cognitive
405KB
7.5K SLoC
此包实现了Wayland功能。
架构草图
运行所有业务逻辑的代码是 Engine
。它设置一切并处理来自客户端以及其他应用程序的请求。在客户端连接时,Engine
创建新的
skylane::Client
,结构注册处理程序(代表Wayland对象)并将客户端请求分发到它们,以及wayland_frontend::Proxy
,用于在处理程序之间共享信息,客户端的状态。
Proxy
作为 RefCell
在处理程序之间共享。
引入了两个接口
Facade
,用于来自客户端的请求(向下?),由Proxy
实现,以及Gateway
,用于来自应用程序的请求(向上?),由Engine
(将请求分发给正确的Proxy
)和Proxy
(向客户端发出实际请求)实现。
因此,一个 Engine
拥有多个 Client
,每个 Client
拥有多个对 Proxy
的(cell)引用,但某个时候 Engine
必须被告知客户端创建了表面。为此,Engine
和所有 Proxy
持有单个 Mediator
的(cell)引用。
线程的细节留给应用程序。wayland_frontend
可以配置为在一个线程中接收并在另一个线程中发送,或者在一个线程中完成所有操作。但是,接受新的客户端不能在 DisplayEventHandler
中完成,处理请求也不能在 ClientEventHandler
中完成,因为这可能需要修改 dharma::Dispatcher
,因此处理与处理解耦,使用 dharma::DirectSender
进行。
依赖关系
~9.5MB
~192K SLoC