数据写入流程

本文详细介绍了CyberRT中数据写入的步骤,包括初始化cyber、创建Node、创建Writer以及Writer如何发送数据。重点讲解了CreateWriter函数的实现,通信方式的选择,如IntraWriter和shm_transmitter,以及数据发送后的通知机制。通过对shm_transmitter的分析,揭示了数据如何在共享内存中传输并通知接收方。

重要!!!

先看这三篇

segment.h-优快云博客

block.h-优快云博客

State.h-优快云博客

初始化cyber->创建node->填充消息->写入

movex::cyber::Init(argv[0]);
// create talker node
auto talker_node = movex::cyber::CreateNode("channel_test_writer");

第一步

cyber init 对整个cyber进行初始化操作。这里不展开介绍

创建node

Node::Node(const std::string& node_name, const std::string& name_space)
    : node_name_(node_name), name_space_(name_space) {
  node_channel_impl_.reset(new NodeChannelImpl(node_name));
  node_service_impl_.reset(new NodeServiceImpl(node_name));
}

NodeChannelImpl其作用是用于创建和管理节点之间通讯的功能(node_service_impl_这里不做详细描述)

NodeChannelImpl内部会将自己加入管理并将自身节点加入通讯的拓扑网络之中。

第二步

auto talker1 = talker_node->CreateWriter<Driver>("/movex/test1");

继续看Cratewriter

在文件node_channel_impl.h中有如下定义

template <typename MessageT>
auto NodeChannelImpl::CreateWriter(const proto::RoleAttributes& role_attr)
    -> std::shared_ptr<Writer<MessageT>> {
  if (!role_attr.has_channel_name() || role_attr.channel_name().empty()) {
    AERROR << "Can't create a writer with empty channel name!";
    return nullptr;
  }
  proto::RoleAttributes new_attr(role_attr);
  FillInAttr<MessageT>(&new_attr);

  std::shared_ptr<Writer<MessageT>> writer_ptr = nullptr;
  if (!is_reality_mode_) {
    writer_ptr = std::make_shared<blocker::IntraWriter<MessageT>>(new_attr);
  } else {
    writer_ptr = std::make_shared<Writer<MessageT>>(new_attr);
  }

  RETURN_VAL_IF_NULL(writer_ptr, nullptr);
  RETURN_VAL_IF(!writer_ptr->Init(), nullptr);
  return writer_ptr;
}



/*先外部调用这个函数,传入topic*/
t
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lobmo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值