2014-11-01 18:05:26 +02:00
|
|
|
#include "json_rpc_http_server.h"
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
namespace RPC
|
|
|
|
{
|
2014-11-02 08:28:08 +02:00
|
|
|
Json_rpc_http_server::Json_rpc_http_server(const std::string &ip, const std::string &port,
|
2014-11-02 17:15:26 +02:00
|
|
|
void (*ev_handler)(struct ns_connection *nc, int ev, void *ev_data))
|
2014-11-01 18:05:26 +02:00
|
|
|
{
|
|
|
|
m_ip = ip;
|
|
|
|
m_port = port;
|
|
|
|
m_is_running = false;
|
2014-11-02 08:28:08 +02:00
|
|
|
m_ev_handler = ev_handler;
|
2014-11-01 18:05:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Json_rpc_http_server::~Json_rpc_http_server()
|
|
|
|
{
|
|
|
|
stop();
|
|
|
|
}
|
|
|
|
|
2014-11-02 08:28:08 +02:00
|
|
|
bool Json_rpc_http_server::start()
|
2014-11-01 18:05:26 +02:00
|
|
|
{
|
|
|
|
m_is_running = true;
|
2014-11-02 08:28:08 +02:00
|
|
|
ns_mgr_init(&mgr, NULL);
|
|
|
|
nc = ns_bind(&mgr, (m_ip + ":" + m_port).c_str(), m_ev_handler);
|
|
|
|
if (!nc)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
ns_set_protocol_http_websocket(nc);
|
2014-11-01 18:05:26 +02:00
|
|
|
server_thread = new boost::thread(&Json_rpc_http_server::poll, this);
|
2014-11-02 17:15:26 +02:00
|
|
|
return true;
|
2014-11-01 18:05:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Json_rpc_http_server::poll()
|
|
|
|
{
|
|
|
|
while (m_is_running) {
|
|
|
|
ns_mgr_poll(&mgr, 1000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Json_rpc_http_server::stop()
|
|
|
|
{
|
|
|
|
m_is_running = false;
|
|
|
|
server_thread->join();
|
|
|
|
delete server_thread;
|
|
|
|
ns_mgr_free(&mgr);
|
|
|
|
}
|
|
|
|
}
|