]> git.stg.codes - stg.git/commitdiff
[NY Flight] Improvements in parser dispatching.
authorMaxim Mamontov <faust.madf@gmail.com>
Fri, 6 Sep 2013 17:55:55 +0000 (20:55 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Fri, 6 Sep 2013 17:55:55 +0000 (20:55 +0300)
stglibs/srvconf.lib/include/stg/servconf.h
stglibs/srvconf.lib/servconf.cpp

index 7cc18c4a7fd16c78bfef5c71f6891b0fa0295cd6..23a73c7b8855bc47f546f8ec394de728c6c5b54e 100644 (file)
@@ -96,7 +96,7 @@ private:
     std::string errorMsg;
     XML_Parser parser;
 
-    int Exec(const char * request);
+    int Exec(const char * request, PARSER & cp);
 
     friend bool AnsRecv(void * data, const std::string & chunk, bool final);
 };
index 06a31a81801e4f3733b694594f96d534c1e58ae3..621cced022685e37716e8ee221f10ed6d7ea11cc 100644 (file)
 namespace
 {
 
-//-----------------------------------------------------------------------------
-void ElementStart(void *data, const char *el, const char **attr)
+void ElementStart(void * data, const char * el, const char ** attr)
 {
 SERVCONF * sc = static_cast<SERVCONF *>(data);
 sc->Start(el, attr);
 }
-//-----------------------------------------------------------------------------
+
 void ElementEnd(void * data, const char * el)
 {
 SERVCONF * sc = static_cast<SERVCONF *>(data);
@@ -46,7 +45,6 @@ sc->End(el);
 bool AnsRecv(void * data, const std::string & chunk, bool final)
 {
 SERVCONF * sc = static_cast<SERVCONF *>(data);
-printf("Chunk: '%s', length: %d, final: %d\n", chunk.c_str(), chunk.length(), final);
 
 if (XML_Parse(sc->parser, chunk.c_str(), chunk.length(), final) == XML_STATUS_ERROR)
     {
@@ -75,9 +73,7 @@ int SERVCONF::GetUser(const char * l)
 char request[255];
 snprintf(request, 255, "<GetUser login=\"%s\"/>", l);
 
-currParser = &parserGetUser;
-
-return Exec(request);
+return Exec(request, parserGetUser);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::AuthBy(const char * l)
@@ -85,41 +81,31 @@ int SERVCONF::AuthBy(const char * l)
 char request[255];
 snprintf(request, 255, "<GetUserAuthBy login=\"%s\"/>", l);
 
-currParser = &parserAuthBy;
-
-return Exec(request);
+return Exec(request, parserAuthBy);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::GetUsers()
 {
 char request[] = "<GetUsers/>";
 
-currParser = &parserGetUsers;
-
-return Exec(request);
+return Exec(request, parserGetUsers);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::ServerInfo()
 {
 char request[] = "<GetServerInfo/>";
 
-currParser = &parserServerInfo;
-
-return Exec(request);
+return Exec(request, parserServerInfo);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::ChgUser(const char * request)
 {
-currParser = &parserChgUser;
-
-return Exec(request);
+return Exec(request, parserChgUser);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::SendMessage(const char * request)
 {
-currParser = &parserSendMessage;
-
-return Exec(request);
+return Exec(request, parserSendMessage);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::CheckUser(const char * login, const char * password)
@@ -127,9 +113,7 @@ int SERVCONF::CheckUser(const char * login, const char * password)
 char request[255];
 snprintf(request, 255, "<CheckUser login=\"%s\" password=\"%s\"/>", login, password);
 
-currParser = &parserCheckUser;
-
-return Exec(request);
+return Exec(request, parserCheckUser);
 }
 //-----------------------------------------------------------------------------
 int SERVCONF::Start(const char * el, const char ** attr)
@@ -183,8 +167,10 @@ const std::string & SERVCONF::GetStrError() const
 return errorMsg;
 }
 //-----------------------------------------------------------------------------
-int SERVCONF::Exec(const char * request)
+int SERVCONF::Exec(const char * request, PARSER & cp)
 {
+currParser = &cp;
+
 XML_ParserReset(parser, NULL);
 XML_SetElementHandler(parser, ElementStart, ElementEnd);
 XML_SetUserData(parser, this);