#ifndef HV_WEBSOCKET_PARSER_H_
#define HV_WEBSOCKET_PARSER_H_

#include "hexport.h"

#include <string>
#include <memory>
#include <functional>

enum websocket_parser_state {
    WS_FRAME_BEGIN,
    WS_FRAME_HEADER,
    WS_FRAME_BODY,
    WS_FRAME_END,
    WS_FRAME_FIN,
};

struct websocket_parser;
class HV_EXPORT WebSocketParser {
public:
    websocket_parser*                   parser;
    websocket_parser_state              state;
    int                                 opcode;
    std::string                         message;
    std::function<void(int opcode, const std::string& msg)> onMessage;

    WebSocketParser();
    ~WebSocketParser();

    int FeedRecvData(const char* data, size_t len);
};

typedef std::shared_ptr<WebSocketParser> WebSocketParserPtr;

#endif // HV_WEBSOCKET_PARSER_H_