#pragma once
#include "../Include.h"
#include "SlidingWindow.h"
#include "CSV.h"
#include "TickEntry.h"
struct WebSockConnData
{
std::string host = "";
std::string port = "";
std::string endpoint = "";
std::string instruments = "";
std::string priceMask = "";
std::string tickSize = "";
std::string slidingWindowSize = "";
std::string toStr() const
{
return host + ':' + port + '-' + endpoint + '-' + instruments;
}
};
class FeedHandlerListener
{
public:
FeedHandlerListener();
void setConnData(const WebSockConnData&);
std::pair<int, std::string> connect();
std::pair<int, std::string> close();
void wait();
~FeedHandlerListener();
private:
void connectionHandler();
void subscribe();
void producer();
void consumer();
private:
WebSockConnData mConnData;
WebSocket mWebSock;
std::vector<std::string> mInstrumentBuffer;
std::vector<SlidingWindow> mSlidingWindowBuffer;
std::vector<CSV<2048>> mCSVs;
std::thread mProdThr;
std::thread mConsThr;
int mConnId;
alignas(CACHE_LINE_SIZE) std::atomic<bool> mProdThrRunning;
alignas(CACHE_LINE_SIZE) std::atomic<bool> mConsThrRunning;
boost::lockfree::spsc_queue<TickEntry, boost::lockfree::capacity<4096>> mSPSC;
};