AVSConnectionManager 类为客户端无缝地管理与AVS的连接

功能简介

  • 失败时连接重试
  • 允许后续重新连接
  • ping管理
  • AVS服务器断开时周期重连服务器
  • 允许客户端完全启用或禁用连接管理器
  • 允许客户端重置AVSConnectionManager的内部逻辑

UML 图集

  • 完整类图

  • 精简类图

  • 对象调用

依赖接口

  • AVSConnectionManagerInterface

    • 该类反映了客户端与AVS之间的连接以及如何观测它

    • virtual void enable() = 0

      • 启用AVSConnectionManager对象与AVS建立连接
      • 调用此函数后尝试创建一个与AVS之间的连接
      • 如果对象已连接则什么也不做
    • virtual void disable() = 0

      • 禁用AVSConnectionManager对象与AVS之间的连接
      • 如果与AVS的连接已建立调用此函数将断开连接
      • 如果未连接则什么也不做
    • virtual bool isEnabled() = 0

      • 返回是否启用AVSConnectionManager建立与AVS之间的连接
    • virtual void reconnect() = 0

      • 创建与AVS之间的一个新连接
      • 如果已建立连接则断开当前连接并重新建立一个新的连接
      • 如果未连接但处于尝试等待下一个连接的过程中,内部将采用重置策略并立刻尝试建立一个新的连接
      • 如果enable未启用则什么也不做
    • virtual bool isConnected() const = 0;

      • 返回与AVS连接是否已建立,如果连接处于pending状态也会返回false
    • virtual void addMessageObserver(std::shared_ptr(avsCommon::sdkInterfaces::MessageObserverInterface) observer) = 0

      • 添加接收消息通知的观察者
    • virtual void removeMessageObserver(

      std::shared_ptr(avsCommon::sdkInterfaces::MessageObserverInterface) observer) = 0

      • 移除一个接收消息通知的观察者
    • virtual void addConnectionStatusObserver(std::shared_ptr(ConnectionStatusObserverInterface) observer) = 0

      • 添加连接状态变更通知的观察者
      • 状态通知在更改函数返回前通知
    • virtual void removeConnectionStatusObserver(std::shared_ptr(ConnectionStatusObserverInterface) observer) = 0

      • 移除连接状态
  • AbstractAVSConnectionManager

    • 该类实现了AVSConnectionManagerInterface接口中添加和移除观察者及通知移除所有观察者的功能

    • 实现 addConnectionStatusObserver 接口

      • 添加新的连接状态观察者
      • 将当前连接状态及更改原因通知给新增的观察者
    • 实现 removeConnectionStatusObserver(std::shared_ptr(ConnectionStatusObserverInterface) observer) 接口

      • 删除该连接状态观察者
    • 构造函数 AbstractAVSConnectionManager(std::unordered_set(std::shared_ptr(ConnectionStatusObserverInterface)) observers))

      • 观察对象集合赋值
      • 默认状态为Status::DISCONNECTED
      • 默认原因为ChangedReason::ACL_CLIENT_REQUEST
    • void updateConnectionStatus(ConnectionStatusObserverInterface::Status status, ConnectionStatusObserverInterface::ChangedReason reason)

      • 更新链接状态
      • status 连接状态
      • reason 更新原因
    • void notifyObservers()

      • 通知所有观察者当前连接状态及更新原因
    • void clearObservers()

      • 清空所有已注册连接状态通知的观察者
  • MessageSenderInterface

    • 指定一个发送消息的接口

    • void sendMessage(std::shared_ptr(avs::MessageRequest) request) = 0

      • 发送消息
      • 该消息必须是异步实现的
      • 内部先存储此消息直至连接可用才发送
      • MessageRequest::onSendCompleted 回调函数处理发送结果
      • 如果连接处于连接状态回调函数返回值合适的值,否则返回NOT_CONNECTED。
  • MessageRouterObserverInterface

    • 该类通过友元的方式允许MessageRouter及其继承类发送通知至此类,而不用通过公有方法中的注册观察者的方式。可接收连接状态通知和接收来自AVS的消息。

    • virtual void onConnectionStatusChanged(ConnectionStatusObserverInterface::Status status, ConnectionStatusObserverInterface::ChangedReason reason) = 0

      • 连接状态变更时该函数被调用
    • virtual void receive(const std::string& contextId, const std::string& message) = 0

      • 接收到AVS消息时该函数被调用

枚举值和常量

  • ConnectionStatusObserverInterface

    • Status 连接状态

      • DISCONNECTED 客户端未与AVS服务器建立连接
      • PENDING 客户端正尝试与AVS服务器建立连接
      • CONNECTED 客户端与AVS服务器已建立连接
    • ChangedReason 连接状态改变原因
      • ACL_CLIENT_REQUEST 客户端通过公有API调用
      • ACL_DISABLED 因为调用了AVSConnectionManagerInterface::disable()函数
      • DNS_TIMEDOUT DNS解析超时
      • CONNECTION_TIMEDOUT 连接超时
      • CONNECTION_THROTTLED 服务器满负荷
      • INVALID_AUTH LWA认证无效
      • PING_TIMEDOUT PING超时
      • WRITE_TIMEDOUT 往AVS服务器写数据超时
      • READ_TIMEDOUT 从AVS服务器读数据超时
      • FAILURE_PROTOCOL_ERROR 发生潜在的协议错误
      • INTERNAL_ERROR ACL内部错误(ACL为AVS网络通信库)
      • SERVER_INTERNAL_ERROR AVS服务器内部错误
      • SERVER_SIDE_DISCONNECT AVS服务器请求客户端重连
      • SERVER_ENDPOINT_CHANGED AVS服务器端点(IP和端口号)已改变

AVS 通信模块之AVSConnectionManager的更多相关文章

  1. AVS 端能力之蓝牙模块

    该类为蓝牙端能力处理类,主要负责蓝牙设备配对和蓝牙音频播放功能. 功能简介 实现蓝牙设备的启动发现模式.扫描蓝牙设备.建立蓝牙连接功能 实现蓝牙设备音频播放.停止.上一首.下一首功能 其它细节参考&l ...

  2. 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】

    转自:http://blog.csdn.net/hellolwl/article/details/6164449 目录(?)[-] 协议介绍 模块协议介绍 1            命令包格式 2   ...

  3. 如何为编程爱好者设计一款好玩的智能硬件(十)——无线2.4G通信模块研究·一篇说完

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  4. [转帖]AVS音视频编解码技术了解

    AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...

  5. AVS、MPEG-2、H264标准文档

    联合信源对AVS解码源码和相应的AVS码流.AVS码流太大,可以从http://cosoft.org.cn/projects/avsdec下载.解压avsdec_source.zip后,用VC6编译a ...

  6. AviSynth AVS Importer Plugin for Adobe Premiere Pro CC 2015 x64

    Premiere CS AVS Importer x64.prm copy to Adobe\Adobe Premiere Pro CC 2015\Plug-Ins\Common\ VSFilterM ...

  7. 基于FPGA的1553B通信模块的设计(转)

    reference:http://www.21ic.com/app/eda/201808/798483.htm https://www.milstd1553.com/ [导读] 摘 要: 提出一种将F ...

  8. 4G通信模块在ARM平台下的应用

    4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...

  9. 4G 通信模块在ARM 平台下的应用

    收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...

随机推荐

  1. redis的过期策略和淘汰策略

    过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...

  2. Windows莫名内存到百分之百,需要修改虚拟内存

    借鉴别人的操作: https://blog.csdn.net/xjpdf10/article/details/82849112

  3. cad转换成png,svg

    1.设置仓库可以在setting.xml中设置(也可以在pom中设置,设置项即可) <mirror> <id>AsposeJavaAPI</id> <name ...

  4. 十二:Servlet3.0的注解

    1.@WebListener注解 表示的就是我们之前的在xml中配置的 <listener> <listener-class>ListenerClass</listene ...

  5. Java中的比较器(排序)

    "顺序"在任何一个领域里都是非常重要的一个概念,程序也不例外.不同的执行顺序,能对你的执行结果产生直接影响. 既然涉及到顺序,那就要求排序.所以本文讨论的就是排序中使用到的比较器C ...

  6. opencv入门系列教学(七)改变颜色空间、提取彩色对象

    ​ 0.序言 之前的博客里我们介绍了opencv在图像上的基本操作,下面我们来进行稍微深入一点的介绍,从这里开始我们可以发现opencv库能给我们带来的更多更有趣的功能.从现在开始,我们将逐步深入了解 ...

  7. Spring Boot +Vue 项目实战笔记(一):使用 CLI 搭建 Vue.js 项目

    前言 从这篇文章开始,就进入真正的实践了. 在前端项目开发中,我们可以根据实际情况不同程度地使用 Vue.利用 Vue CLI(或写成 vue-cli,即 Vue 脚手架)搭建出来的项目,是最能体现 ...

  8. centos7 误用 cat 打开了一个很大的文件

    2021-09-01 1. 问题描述 刚才看到一个文件,出于好奇我就直接用 cat 命令查看了一下,结果文件巨大,一直刷屏停不下来 2. 解决方法 克隆一个窗口,抓一下这个 cat 进程,再使用 ki ...

  9. 为开源项目 go-gin-api 增加后台任务模块

    目录 任务管理界面 (WEB) 任务调度器 任务执行器 小结 推荐阅读 任务管理界面 (WEB) 支持在 WEB 界面 中对任务进行管理,例如:新增任务.编辑任务.启用/禁用任务.手动执行任务 等. ...

  10. 20210821 打表,蛇,购物,ants

    考场 T1 没看懂 T4 一眼回滚莫队,但忘记怎么写了,小慌 模拟 T1 题意的时候教练让 zsy 澄清了一下,确定了我不会做... T2 一看就是毒瘤题,T3 感觉比较可做 T4 确定了回滚的细节, ...