Newer
Older
Import / projects / Gameloft / glwebtools / include / glwebtools / sse / glwebtools_serversideeventstreamparser.h
#pragma once
#ifndef _GLWEBTOOLS_SERVERSIDEEVENTSTREAMPARSER_INCLUDED_
#define _GLWEBTOOLS_SERVERSIDEEVENTSTREAMPARSER_INCLUDED_

#include <string>
#include <deque>
#include <glwebtools/glwebtools_error.h>
#include <glwebtools/sse/glwebtools_serversideeventparser.h>
#include <glwebtools/sse/glwebtools_serversideevent.h>

namespace glwebtools
{
	class ServerSideEventStreamParser
	{
	public:	
		ServerSideEventStreamParser();

	public:	
		glwebtools::Error PushStream(const std::string& value);
		glwebtools::Error PopEvent(ServerSideEvent& value);
		bool HasEvent() const;

	public:
		void Clear();

	private:
		glwebtools::Error Push(char value);
		glwebtools::Error PushField();
		glwebtools::Error PushEvent();

	private:
		void ClearBuffer();

	private:
		bool IsFeeding() const;

	private:
		ServerSideEventParser m_eventParser;
		std::string m_buffer;
		std::deque<ServerSideEvent> m_eventQueue;
		char m_lastChar;
	};
}

#endif //_GLWEBTOOLS_SERVERSIDEEVENTSTREAMPARSER_INCLUDED_