X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/23d052c42f43430e4ff776a80b9643dbc7d1289d..c3b507d1eb8a82f9eda3a5e7f7b2dd2f2e9bb4c0:/stglibs/srvconf.lib/parser_get_users.cpp diff --git a/stglibs/srvconf.lib/parser_get_users.cpp b/stglibs/srvconf.lib/parser_get_users.cpp index d4e44d36..2f380c82 100644 --- a/stglibs/srvconf.lib/parser_get_users.cpp +++ b/stglibs/srvconf.lib/parser_get_users.cpp @@ -28,7 +28,8 @@ PARSER_GET_USERS::PARSER_GET_USERS() : callback(NULL), data(NULL), - depth(0) + depth(0), + parsingAnswer(false) { userParser.SetCallback(&PARSER_GET_USERS::UserCallback, this); } @@ -36,10 +37,10 @@ PARSER_GET_USERS::PARSER_GET_USERS() int PARSER_GET_USERS::ParseStart(const char * el, const char ** attr) { depth++; -if (depth == 1) - ParseUsers(el, attr); +if (depth == 1 && strcasecmp(el, "users") == 0) + parsingAnswer = true; -if (depth > 1) +if (depth > 1 && parsingAnswer) userParser.ParseStart(el, attr); return 0; @@ -48,18 +49,17 @@ return 0; void PARSER_GET_USERS::ParseEnd(const char * el) { depth--; -if (depth > 0) +if (depth > 0 && parsingAnswer) userParser.ParseEnd(el); -if (depth == 0) +if (depth == 0 && parsingAnswer) + { if (callback) - callback(info, data); -} -//----------------------------------------------------------------------------- -void PARSER_GET_USERS::ParseUsers(const char * el, const char ** /*attr*/) -{ -if (strcasecmp(el, "users") == 0) + callback(error.empty(), error, info, data); + error.clear(); info.clear(); + parsingAnswer = false; + } } //----------------------------------------------------------------------------- void PARSER_GET_USERS::AddUser(const PARSER_GET_USER::INFO & userInfo) @@ -73,8 +73,11 @@ callback = f; data = d; } //----------------------------------------------------------------------------- -void PARSER_GET_USERS::UserCallback(const PARSER_GET_USER::INFO & info, void * data) +void PARSER_GET_USERS::UserCallback(bool result, const std::string & error, const PARSER_GET_USER::INFO & info, void * data) { PARSER_GET_USERS * parser = static_cast(data); - parser->AddUser(info); + if (!result) + parser->SetError(error); + else + parser->AddUser(info); }