AVS 通信模块之AVSConnectionManager
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和端口号)已改变
- Status 连接状态
AVS 通信模块之AVSConnectionManager的更多相关文章
- AVS 端能力之蓝牙模块
该类为蓝牙端能力处理类,主要负责蓝牙设备配对和蓝牙音频播放功能. 功能简介 实现蓝牙设备的启动发现模式.扫描蓝牙设备.建立蓝牙连接功能 实现蓝牙设备音频播放.停止.上一首.下一首功能 其它细节参考&l ...
- 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】
转自:http://blog.csdn.net/hellolwl/article/details/6164449 目录(?)[-] 协议介绍 模块协议介绍 1 命令包格式 2 ...
- 如何为编程爱好者设计一款好玩的智能硬件(十)——无线2.4G通信模块研究·一篇说完
六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...
- [转帖]AVS音视频编解码技术了解
AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...
- AVS、MPEG-2、H264标准文档
联合信源对AVS解码源码和相应的AVS码流.AVS码流太大,可以从http://cosoft.org.cn/projects/avsdec下载.解压avsdec_source.zip后,用VC6编译a ...
- 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 ...
- 基于FPGA的1553B通信模块的设计(转)
reference:http://www.21ic.com/app/eda/201808/798483.htm https://www.milstd1553.com/ [导读] 摘 要: 提出一种将F ...
- 4G通信模块在ARM平台下的应用
4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...
- 4G 通信模块在ARM 平台下的应用
收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...
随机推荐
- "排序二叉树"之探幽
/*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值: (2)所有右节点的数值都大于此节点的数值. */ 1 /*************** ...
- 由struts2中配置使用servlet引发的思考和复习
Struts2拦截器到底拦截了什么? 关于struts2中的拦截器,首先再次理解其实只能过滤其中访问的action的映射!再者,因为struts中的action其实就是起到替代servlet作用的,所 ...
- Linux基础——用户和用户组
Linux基础--用户和用户组 一.用户和用户组 用户在/etc/passwd中 用户组在/etc/group/中注意:在创建用户时,系统默认生成一个用户组(组名和用户名一致) 1.用户 1.1查看用 ...
- Win7/Win10+VS2017+OpenCV3.4.2安装、测试
安装VS2017 在微软官网https://www.microsoft.com,下载Visual Studio 2017安装包 用管理员权限运行vs2017 enterprise安装包,安装过程会持续 ...
- win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑
本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...
- Dapper同时操作任意多张表的实现
1:Dapper的查询帮助类,部分代码,其它新增更新删除可以自行扩展 using Microsoft.Extensions.Configuration; using System; using Sys ...
- Linux centos7 find 命令
2021-08-13 1. 命令简介 find 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子 ...
- IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
在之前的学习笔记(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter与FileReader的Demo使用的中 ...
- Nginx反向代理之巨坑underscores_in_headers
一.背景 因为项目需求,在做Windows的相关的事情:基本架构就是Nginx--> Nginx --> IIS,在Linux机器上通过Nginx做反向代理到Windows的IIS:然后遇 ...
- MySQL——SQL语句入门
1.DDL: 数据库定义语言 定义对象:库.表 何为定义: 库的定义: 创建 删除 修改---->修改本身以及库中的对象(表.视图.函数.触发器...) 表的定义: 创建---->定义表的 ...