博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AVS 通信模块之AVSConnectionManager
阅读量:5739 次
发布时间:2019-06-18

本文共 3149 字,大约阅读时间需要 10 分钟。

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

功能简介

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

UML 图集

  • 完整类图

    1497698-20181107180327010-579423785.png

  • 精简类图

    1497698-20181107180343453-833593331.png

  • 对象调用

    1497698-20181107180357701-1076976097.png

依赖接口

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

      1497698-20181107205526313-1527793694.png

    • 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接口中添加和移除观察者及通知移除所有观察者的功能

      1497698-20181108092636462-1913723066.png

    • 实现 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
    • 指定一个发送消息的接口

      1497698-20181108102843843-63973640.png

    • 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和端口号)已改变

转载于:https://www.cnblogs.com/clxye/p/9924204.html

你可能感兴趣的文章
如果一切即服务,为什么需要数据中心?
查看>>
RSA总裁预测2016年网络安全趋势
查看>>
Spark架构在大数据环境的核心位置找到用武之地
查看>>
《游戏开发物理学(第2版)》一导读
查看>>
Erlang简史(翻译)
查看>>
《代码整洁之道》—第13章13.6节警惕同步方法之间的依赖
查看>>
深入实践Spring Boot2.4.2 节点和关系实体建模
查看>>
信息可视化的经典案例:伦敦地铁线路图
查看>>
10个巨大的科学难题需要大数据解决方案
查看>>
Setting Up a Kerberos server (with Debian/Ubuntu)
查看>>
Node.js Undocumented(1)
查看>>
《R语言数据挖掘》----1.16 练习
查看>>
《树莓派渗透测试实战》——2.7 设置SSH服务
查看>>
用 ThreadLocal 管理用户session
查看>>
C语言及程序设计进阶例程-28 动态规划法问题求解
查看>>
setprecision后是要四舍五入吗?
查看>>
shiro初步 shiro授权
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
韵达:首家物流云企业的大规模云上调度实践
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>