通道

客户端和服务器通过通道来通信。每种通道类型只用于一种特定类型的数据。每个通道使用一个专用的TCP套接字,并且可以是加密(使用SSL)或者不加密的。在客户端上,每个通道有一个专用的线程,所以不同的QoS(服务质量)策略能在不同优先级的线程上使用。

RedClient 是一个主要的通道。它拥有其他所有实例化通道并且控制它们(使用它们的工厂类创建通道,连接,断开连接等),并且处理控制,配置和迁移(使用Migrate class)。

所有通道的父类:

  • RedPeer-封装加密和不加密的套接字连接,提供基础功能如连接,断开连接,关闭,发送,接收和用于迁移的套接字交换。它定义了通用消息类:InMessages, CompoundInMessage, OutMessage。所有消息包括类型,大小和数据。
  • RedChannelBase-继承RedPeer,提供建立服务器通道连接的功能和服务器通道交换容量的支持。
  • RedChannel-继承RedChannelBase,这个类是所有实例化类的父类。处理发送消息和分发收到的消息。RedChannel线程运行一个事件循环使用不同的事件源(发送和终止触发器等)。通道套接字被添加作为一个事件源来触发Spice消息的发送和接收。

可用的通道包括:

  • Main-RedClient的实现
  • DisplayChannel-处理图像命令,图片和视频流
  • InputsChannel-键盘和鼠标输入
  • CursorChannel-指针设备位置,可见性和指针形状
  • PlaybackChannel-来自服务器的声音,被客户端播放
  • RecordChannel-从客户端捕获的声音

ChannelFactory 是所有通道工厂的基类。每个通道都是通过RedClient使用其相应工厂类根据通道类型创建的。