4#ifdef ENABLE_SERVER_AGENT
16 virtual ~ServerAgent() {}
18 typedef sigc::slot<void, const Json &, void *> SuccessCallback;
19 typedef sigc::slot<void, const std::string &, void *> FailCallback;
21 virtual void Call(
const std::string &method,
const Json &data, SuccessCallback onSuccess, FailCallback onFail,
void *userdata) = 0;
23 virtual void ProcessResponses() = 0;
26 static void IgnoreSuccessCallback(
const Json &data) {}
27 static void IgnoreFailCallback(
const std::string &error) {}
30class NullServerAgent :
public ServerAgent {
32 virtual void Call(
const std::string &method,
const Json &data, ServerAgent::SuccessCallback onSuccess = sigc::ptr_fun(&ServerAgent::IgnoreSuccessCallback), ServerAgent::FailCallback onFail = sigc::ptr_fun(&ServerAgent::IgnoreFailCallback),
void *userdata = 0);
34 virtual void ProcessResponses();
38 Response(FailCallback _onFail,
void *_userdata) :
47 std::queue<Response> m_queue;
50class HTTPServerAgent :
public ServerAgent {
52 HTTPServerAgent(
const std::string &endpoint);
53 virtual ~HTTPServerAgent();
55 virtual void Call(
const std::string &method,
const Json &data, SuccessCallback onSuccess = sigc::ptr_fun(&ServerAgent::IgnoreSuccessCallback), FailCallback onFail = sigc::ptr_fun(&ServerAgent::IgnoreFailCallback),
void *userdata = 0);
57 virtual void ProcessResponses();
61 Request(
const std::string &_method,
const Json &_data, SuccessCallback _onSuccess, FailCallback _onFail,
void *_userdata) :
64 onSuccess(_onSuccess),
66 userdata(_userdata) {}
68 const std::string method;
73 SuccessCallback onSuccess;
80 Response(SuccessCallback _onSuccess, FailCallback _onFail,
void *_userdata) :
82 onSuccess(_onSuccess),
84 userdata(_userdata) {}
90 SuccessCallback onSuccess;
98 static int ThreadEntry(
void *data);
101 static const std::string &UserAgent();
103 static size_t FillRequestBuffer(
char *ptr,
size_t size,
size_t nmemb,
void *userdata);
104 static size_t FillResponseBuffer(
char *ptr,
size_t size,
size_t nmemb,
void *userdata);
106 static bool s_initialised;
108 const std::string m_endpoint;
110 SDL_Thread *m_thread;
113 curl_slist *m_curlHeaders;
115 std::queue<Request> m_requestQueue;
116 SDL_mutex *m_requestQueueLock;
117 SDL_cond *m_requestQueueCond;
119 std::queue<Response> m_responseQueue;
120 SDL_mutex *m_responseQueueLock;
nlohmann::json Json
Definition Json.h:8