我有一个C++方案,它分出各种活动,例如:StatusEvent
和Detection Event
,向信息服务处(目前是活跃的MQ,通过积极的mq-cpp APU)提供不同的信息定义。 我想写一个接收这些信息的听众,向他们说几句,并写上 co子,以图谋。 听众有<代码>status_event_pb.h和detection_event_pb.h
链接。
我的问题是:我如何在不了解所收到事件的类型的情况下加以区别? 我想做的是(在假冒法典中)
receive event
type = parseEventType(event);
if( type == events::StatusEventType) {
events::StatusEvent se = parseEvent(event);
// do stuff with se
}
else {
// handle the case when the event is a DetectionEvent
}
参看,但我不敢确定延期是否是这里的正确途径。 简短的法典指明了前进的道路将受到高度赞赏。 pro夫的例子非常少!
感谢!
延期似乎确实是走的路,但我说,最后一点是清楚的。 下面是我迄今为止的推论:
// A general event, can be thought as base Event class for other event types.
message Event {
required int64 task_id = 1;
required string module_name = 2; // module that sent the event
extensions 100 to 199; // for different event types
}
// Extend the base Event with additional types of events.
extend Event {
optional StatusEvent statusEvent = 100;
optional DetectionEvent detectionEvent = 101;
}
// Contains one bounding box detected in a video frame,
// representing a region of interest.
message DetectionEvent {
optional int64 frame = 2;
optional int64 time = 4;
optional string label = 6;
}
// Indicate status change of current module to other modules in same service.
// In addition, parameter information that is to be used to other modules can
// be passed, e.g. the video frame dimensions.
message StatusEvent {
enum EventType {
MODULE_START = 1;
MODULE_END = 2;
MODULE_FATAL = 3;
}
required EventType type = 1;
required string module_name = 2; // module that sent the event
// Optional key-value pairs for data to be passed on.
message Data {
required string key = 1;
required string value = 2;
}
repeated Data data = 3;
}
我现在的问题是:(1) 如何知道事件信息包含哪些具体事件,(2) 确保其只包含one这种事件(根据定义,它可以包含一个<条码>-StatusEvent和<条码>。