簡介
cyber/data
是message data相關的folder, 主要給其他內部模塊用的就是DataVisitor
DataVisitor
在cyber中是負責提供一個內部(不是外部)接口去直接拿channel的message數據, 在這我們先不管數據是所那兒來。用法就提供一個config給DataVisitor
, 按其中列出的channel_name
去儲存數據。當被調用TryFetch
時,把數據返回
Data Visitor
- 每一個component都有一個data visitor, 負責接觸其他數據部件
- 而data notifier就是負責當有新數據時,找對應的data visitor, 調其callback
DataDispatcher
就是把新數據放到對應的data visitor的CacheBuffer
中- 個人覺得
DataDispatcher
跟DataNotifier
的工作應該直接合一起會比較直觀 - 綠線就是新數據來時的調用關係。
而DataVisitor
主要的function就是TryFetch
了
template <typename T>
using BufferType = CacheBuffer<std::shared_ptr<T>>;
template <typename M0, typename M1 = NullType, typename M2 = NullType,
typename M3 = NullType>
class DataVisitor : public DataVisitorBase {
public:
explicit DataVisitor(const std::vector<VisitorConfig>& configs)
: buffer_m0_(configs[0].channel_id,
new BufferType<M0>(configs[0].queue_size)),
buffer_m1_(configs[1].channel_id,
new BufferType<M1>(configs[1].queue_size)),
buffer_m2_(configs[2].channel_id,
new BufferType<M2>(configs[2].queue_size)),
buffer_m3_(configs[3].channel_id,
new BufferType<M3>(configs[3