#ifndef EASYWSCLIENT_HPP_20170819_MIOFVASDTNUASZDQPLFD #define EASYWSCLIENT_HPP_20170819_MIOFVASDTNUASZDQPLFD // This code comes from: // https://github.com/dhbaird/easywsclient // // To get the latest version: // wget https://raw.github.com/dhbaird/easywsclient/master/easywsclient.hpp // wget https://raw.github.com/dhbaird/easywsclient/master/easywsclient.cpp #include #include #include namespace easywsclient { struct Callback_Imp { virtual void operator()(const std::string& message) = 0; }; struct BytesCallback_Imp { virtual void operator()(const std::vector& message) = 0; }; class WebSocket { public: typedef WebSocket * pointer; typedef enum readyStateValues { CLOSING, CLOSED, CONNECTING, OPEN } readyStateValues; // Factories: static pointer create_dummy(); static pointer from_url(const std::string& url, const std::string& origin = std::string()); static pointer from_url_no_mask(const std::string& url, const std::string& origin = std::string()); // Interfaces: virtual ~WebSocket() { } virtual void poll(int timeout = 0) = 0; // timeout in milliseconds virtual void send(const std::string& message) = 0; virtual void sendBinary(const std::string& message) = 0; virtual void sendBinary(const std::vector& message) = 0; virtual void sendPing() = 0; virtual void close() = 0; virtual readyStateValues getReadyState() const = 0; template void dispatch(Callable callable) // For callbacks that accept a string argument. { // N.B. this is compatible with both C++11 lambdas, functors and C function pointers struct _Callback : public Callback_Imp { Callable& callable; _Callback(Callable& callable) : callable(callable) { } void operator()(const std::string& message) { callable(message); } }; _Callback callback(callable); _dispatch(callback); } template void dispatchBinary(Callable callable) // For callbacks that accept a std::vector argument. { // N.B. this is compatible with both C++11 lambdas, functors and C function pointers struct _Callback : public BytesCallback_Imp { Callable& callable; _Callback(Callable& callable) : callable(callable) { } void operator()(const std::vector& message) { callable(message); } }; _Callback callback(callable); _dispatchBinary(callback); } protected: virtual void _dispatch(Callback_Imp& callable) = 0; virtual void _dispatchBinary(BytesCallback_Imp& callable) = 0; }; } // namespace easywsclient #endif /* EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD */