boB Rudis
6 years ago
9 changed files with 66 additions and 105 deletions
@ -1,72 +0,0 @@ |
|||
#ifndef EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD |
|||
#define EASYWSCLIENT_HPP_20120819_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 <string> |
|||
#include <vector> |
|||
|
|||
namespace easywsclient { |
|||
|
|||
struct Callback_Imp { virtual void operator()(const std::string& message) = 0; }; |
|||
struct BytesCallback_Imp { virtual void operator()(const std::vector<uint8_t>& 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<uint8_t>& message) = 0; |
|||
virtual void sendPing() = 0; |
|||
virtual void close() = 0; |
|||
virtual readyStateValues getReadyState() const = 0; |
|||
|
|||
template<class Callable> |
|||
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<class Callable> |
|||
void dispatchBinary(Callable callable) |
|||
// For callbacks that accept a std::vector<uint8_t> 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<uint8_t>& 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 */ |
@ -1,28 +0,0 @@ |
|||
#include <Rcpp.h> |
|||
|
|||
#ifdef _WIN32 |
|||
#pragma comment( lib, "ws2_32" ) |
|||
#include <WinSock2.h> |
|||
#endif |
|||
|
|||
#include <assert.h> |
|||
#include <stdio.h> |
|||
#include <string> |
|||
#include <iostream> |
|||
#include <thread> |
|||
#include <chrono> |
|||
#include <condition_variable> |
|||
|
|||
#include "easywsclient.hpp" |
|||
|
|||
typedef struct _chromeWs chromeWs; |
|||
typedef chromeWs *chromeWsPtr; |
|||
struct _chromeWs { |
|||
easywsclient::WebSocket::pointer ws; |
|||
std::string response; |
|||
bool ready; |
|||
}; |
|||
|
|||
inline void finaliseWs(chromeWsPtr ws) {} |
|||
|
|||
typedef Rcpp::XPtr<chromeWs,Rcpp::PreserveStorage,finaliseWs> XPtrWs; |
Binary file not shown.
Loading…
Reference in new issue