← source index

src/FeedHandlerListener.h

57 lines  ·  1.3 K  ·  cpp
#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;
};