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