aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/xmlServiceParser.h
blob: 70ba2255f6b89e87c3e6a15613a1f363531bae75 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef NULLSOFT_WINAMP_XML_SERVICE_PARSER_HEADER
#define NULLSOFT_WINAMP_XML_SERVICE_PARSER_HEADER

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#include <wtypes.h>
#include "../xml/ifc_xmlreadercallback.h"
#include "./stringBuilder.h"
#include <vector>

class obj_xml;
class OmService;
class ifc_omservice;
class ifc_omservicehost;
class ifc_omstoragehandler;
class ifc_omstoragehandlerenum;

class XmlServiceParser : public ifc_xmlreadercallback
{
public:
	XmlServiceParser();
	~XmlServiceParser();

public:
	HRESULT Initialize(obj_xml *reader, LPCWSTR match, ifc_omservicehost *host);
	HRESULT Finish(HRESULT *parserResult, ifc_omservice **ppService);
	HRESULT GetActive();
	HRESULT RegisterHandlers(ifc_omstoragehandlerenum *handlerEnum);
	
protected:
	void OnStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params);
	void OnEndElement(const wchar_t *xmlpath, const wchar_t *xmltag);
	void OnCharData(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *str);
	void OnError(int linenum, int errcode, const wchar_t *errstr);

protected:
	typedef std::vector<ifc_omstoragehandler*> HandlerList;
protected:
	StringBuilder buffer;
	HandlerList handlerList;
	BYTE *checkList;
	size_t checkSize;

	obj_xml	*parser;
	OmService *service;
	HRESULT result;

protected:
	RECVS_DISPATCH;

};
#endif// NULLSOFT_WINAMP_XML_SERVICE_PARSER_HEADER