48 return static_cast<ErrorCode>(
reinterpret_cast<intptr_t
>(ptr));
52 static_cast<intptr_t
>(errCode));
56 channel_node_.reset();
57 channel_reader_.reset();
58 channel_message_.reset();
60 delete raw_msg_class_;
61 raw_msg_class_ =
nullptr;
66 return channel_reader_->GetChannelName();
70 message_type_ = msgTypeName;
72 const std::string&
message_type(
void)
const {
return message_type_; }
74 bool is_enabled(
void)
const {
return channel_reader_ !=
nullptr; }
79 const std::string&
NodeName(
void)
const {
return node_name_; }
81 void add_reader(
const std::string& reader) { DoAdd(&readers_, reader); }
82 void del_reader(
const std::string& reader) { DoDelete(&readers_, reader); }
84 void add_writer(
const std::string& writer) { DoAdd(&writers_, writer); }
86 DoDelete(&writers_, writer);
87 if (!writers_.size()) {
88 set_has_message_come(
false);
95 if (channel_reader_ !=
nullptr) {
96 channel_reader_.reset();
99 if (channel_node_ !=
nullptr) {
100 channel_node_.reset();
108 current_state_(State::ShowDebugString),
109 has_message_come_(false),
113 msg_time_(last_time_.ToNanosecond() + 1),
114 channel_node_(nullptr),
115 node_name_(node_name),
118 channel_message_(nullptr),
119 channel_reader_(nullptr),
121 raw_msg_class_(nullptr) {}
126 static void DoDelete(std::vector<std::string>* vec,
const std::string& str) {
127 for (
auto iter = vec->begin(); iter != vec->end(); ++iter) {
135 static void DoAdd(std::vector<std::string>* vec,
const std::string& str) {
136 for (
const auto& item : *vec) {
142 vec->emplace_back(str);
145 void UpdateRawMessage(
146 const std::shared_ptr<apollo::cyber::message::RawMessage>& raw_msg) {
147 set_has_message_come(
true);
150 std::lock_guard<std::mutex> _g(inner_lock_);
151 channel_message_.reset();
152 channel_message_ = raw_msg;
154 void UpdateChannelName(
const std::string& channel_name) {
155 std::lock_guard<std::mutex> _g(inner_lock_);
156 channel_name_ = channel_name;
159 std::shared_ptr<apollo::cyber::message::RawMessage> CopyMsgPtr(
void)
const {
160 decltype(channel_message_) channel_msg;
162 std::lock_guard<std::mutex> g(inner_lock_);
163 channel_msg = channel_message_;
170 void RenderDebugString(
const Screen* s,
int key,
int*
line_no);
173 void set_has_message_come(
bool b) { has_message_come_ = b; }
175 enum class State { ShowDebugString, ShowInfo } current_state_;
177 bool has_message_come_;
178 std::string message_type_;
179 std::atomic<int> frame_counter_;
184 std::unique_ptr<apollo::cyber::Node> channel_node_;
186 std::string node_name_;
188 std::vector<std::string> readers_;
189 std::vector<std::string> writers_;
191 std::shared_ptr<apollo::cyber::message::RawMessage> channel_message_;
192 std::string channel_name_;
193 std::shared_ptr<apollo::cyber::Reader<apollo::cyber::message::RawMessage>>
195 mutable std::mutex inner_lock_;
197 google::protobuf::Message* raw_msg_class_;