templateNodeParser.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "./templateNodeParser.h"
  2. #include "./loginTemplate.h"
  3. #include "./loginProvider.h"
  4. #include "../../xml/obj_xml.h"
  5. LoginTemplateNodeParser::LoginTemplateNodeParser()
  6. : reader(NULL), provider(NULL)
  7. {
  8. }
  9. LoginTemplateNodeParser::~LoginTemplateNodeParser()
  10. {
  11. End();
  12. }
  13. HRESULT LoginTemplateNodeParser::Begin(obj_xml *pReader, LoginProvider *pProvider)
  14. {
  15. if (NULL != reader || NULL != provider)
  16. return E_PENDING;
  17. if (NULL == pReader || NULL == pProvider)
  18. return E_INVALIDARG;
  19. reader = pReader;
  20. reader->AddRef();
  21. provider = pProvider;
  22. provider->AddRef();
  23. reader->xmlreader_registerCallback(L"loginProviders\fprovider\ftemplate", this);
  24. return S_OK;
  25. }
  26. HRESULT LoginTemplateNodeParser::End()
  27. {
  28. if (NULL != reader)
  29. {
  30. reader->xmlreader_unregisterCallback(this);
  31. reader->Release();
  32. reader = NULL;
  33. }
  34. if (NULL != provider)
  35. {
  36. provider->Release();
  37. provider = NULL;
  38. }
  39. return S_OK;
  40. }
  41. void LoginTemplateNodeParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
  42. {
  43. elementParser.Begin(reader, params);
  44. }
  45. void LoginTemplateNodeParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
  46. {
  47. LoginTemplate *result;
  48. if (SUCCEEDED(elementParser.End(reader, &result)))
  49. {
  50. if (NULL != provider)
  51. provider->SetTemplate(result);
  52. result->Release();
  53. }
  54. }
  55. void LoginTemplateNodeParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
  56. {
  57. }
  58. #define CBCLASS LoginTemplateNodeParser
  59. START_DISPATCH;
  60. VCB(ONSTARTELEMENT, Event_XmlStartElement)
  61. VCB(ONENDELEMENT, Event_XmlEndElement)
  62. VCB(ONERROR, Event_XmlError)
  63. END_DISPATCH;
  64. #undef CBCLASS