#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_