#wayland #cognitive #proxy #client #engine #client-connection #front-end

cognitive-wayland-frontend

cognitive提供的Wayland前端

2个不稳定版本

使用旧的Rust 2015

0.1.0 2017年6月10日
0.0.1 2017年5月31日

#16 in #cognitive

MPL-2.0 许可证

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