68 for (; data_start !=
data_; --data_start) {
69 if (*data_start ==
'$') {
73 if (data_start !=
data_) {
74 AWARN <<
"HUACE message has been truncated: " <<
data_;
77 if (*data_start !=
'$') {
78 input_str_.append(
reinterpret_cast<const char *
>(data_start),
81 input_str_.assign(
reinterpret_cast<const char *
>(data_start),
86 AWARN <<
"HUACE ASCII message is not complete: " << data_start;
90 std::vector<std::string> fields;
91 std::stringstream ss(input_str_.substr(0, input_str_.rfind(
'*')));
92 for (std::string field; std::getline(ss, field,
',');) {
93 fields.push_back(field);
98 auto valid_fields = [&]() ->
bool {
99 for (
size_t i = 1; i < fields.size(); ++i) {
100 if (fields[i].empty()) {
102 }
else if (i == 33 && fields[i] ==
"X") {
104 }
else if (fields[i].find_first_not_of(
"0123456789.- ") !=
106 AERROR <<
"HUACE ASCII message field error: " << fields[i]
107 <<
", input str: " << input_str_;
113 if (fields[0] == protocol_.
GPCHC) {
115 AERROR <<
"GPCHC message format error: " << data_start;
118 if (!valid_fields()) {
121 PrepareMessageGPCHC(fields);
123 }
else if (fields[0] == protocol_.
GPCHCX) {
125 AERROR <<
"GPCHCX message format error:" << data_start;
128 if (!valid_fields()) {
131 PrepareMessageGPCHCX(fields);
bool PrepareMessage() override
HuaCeTextParser(const config::Config &config)