g_variant_get(param, "(i&si&si@a(y))", &req_id, &subject, &error, &data, &length, &binary_array);
_D("[Response] ReqId: %d, Subject: %s, Error: %d", req_id, subject, error);
const unsigned char *binary = (const unsigned char*)g_variant_get_data(binary_array);
-
+ _D("%s", binary);
response_cb_map_t::iterator it = response_cb_map->find(subject);
IF_FAIL_VOID_TAG(it!= response_cb_map->end(), _E, "Unknown subject'%s'", subject);
it->second(subject, req_id, error, data, length, binary);
g_dbus_method_invocation_return_value(invocation, NULL);
- if (binary_array) {
- g_variant_unref(binary_array);
- }
+ g_variant_unref(binary_array);
}
static void handle_method_call(GDBusConnection *conn, const gchar *sender,
GVariant *response = g_dbus_connection_call_sync(dbus_connection, DBUS_DEST, DBUS_PATH, DBUS_IFACE,
METHOD_REQUEST, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
- if (binary_variant) {
- g_variant_unref(binary_variant);
- }
-
HANDLE_GERROR(err);
IF_FAIL_RETURN_TAG(response, CONV_ERROR_INVALID_OPERATION, _E, "Method call failed");
g_dbus_connection_call(dbus_connection, DBUS_DEST, DBUS_PATH, DBUS_IFACE,
METHOD_REQUEST, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, NULL, &err);
- if (binary_variant) {
- g_variant_unref(binary_variant);
- }
-
if (err) {
HANDLE_GERROR(err);
return CONV_ERROR_INVALID_OPERATION;
#include "Error.h"
#include "Message.h"
#include "Client.h"
+#include <json/json.h>
using namespace std;
void publish(string event, const char *data, list<Client> clients, void *user_data);
void publish(string event, const char *data, list<Client> clients,
const unsigned char payload[], int payload_size, void *user_data);
- void publishMessage(string event, const char *data, const char *to,
+ void publishMessage(string event, const char *data, Json::Value to,
const unsigned char payload[], int payload_size, void *user_data);
void publishMessage(string method, string event, const char *data,
- const char *to, const unsigned char payload[],
+ Json::Value to, const unsigned char payload[],
int payload_size, void *user_data);
void handleWsiDestroy();
void setCommunicated(bool value);
void handleClientMessage(const char *msg, unsigned char payload[]);
void create_websocket(void *att);
unsigned char *prepareMessageMap(string, string, const char *data,
- const char *to, long *,
+ Json::Value to, long *,
const unsigned char payload[], int payload_size);
static string ROUTE;
void Channel::publish(string event, const char *data, void *user_data)
{
- string to = "\"";
- to.append(Message::TARGET_ALL.c_str());
- to.append("\"");
-
- publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+ publishMessage(event, data, Message::TARGET_ALL.c_str(), NULL, 0, user_data);
}
void Channel::publish(string event, const char *data, const unsigned char payload[],
int payload_size, void *user_data)
{
- string to = "\"";
- to.append(Message::TARGET_ALL.c_str());
- to.append("\"");
- publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+ publishMessage(event, data, Message::TARGET_ALL.c_str(), payload, payload_size, user_data);
}
void Channel::publish(string event, const char *data, const char *target,
void *user_data)
{
- string to = "\"";
- to.append(target);
- to.append("\"");
- publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+ publishMessage(event, data, target, NULL, 0, user_data);
}
void Channel::publish(string event, const char *data, const char *target,
const unsigned char payload[], int payload_size, void *user_data)
{
- string to = "\"";
- to.append(target);
- to.append("\"");
- publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+ publishMessage(event, data, target, payload, payload_size, user_data);
}
void Channel::publish(string event, const char *data, Client client,
void* user_data)
{
- string to = "\"";
- to.append(client.getId());
- to.append("\"");
- publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+ publishMessage(event, data, client.getId(), NULL, 0, user_data);
}
void Channel::publish(string event, const char *data, Client client,
const unsigned char payload[], int payload_size, void *user_data)
{
- string to = "\"";
- to.append(client.getId());
- to.append("\"");
- publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+ publishMessage(event, data, client.getId(), payload, payload_size, user_data);
}
void Channel::publish(string event, const char *data, list<Client> clients,
void Channel::publish(string event, const char *data, list<Client> clients,
const unsigned char payload[], int payload_size, void *user_data)
{
- string to = "[";
+ /*string to = "[";
std::list<Client>::iterator iterator;
for (iterator = clients.begin(); iterator != clients.end(); ++iterator) {
to.append("]");
}
}
-
+*/
+ Json::Value to_list;
+ std::list<Client>::iterator iterator;
+ for (iterator = clients.begin(); iterator != clients.end(); ++iterator) {
+ to_list.append(iterator->getId());
+ }
// TODO
- publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+ publishMessage(event, data, to_list, payload, payload_size, user_data);
}
-void Channel::publishMessage(string event, const char *data, const char *to,
+void Channel::publishMessage(string event, const char *data, Json::Value to,
const unsigned char payload[], int payload_size, void *user_data) {
publishMessage(Message::METHOD_EMIT, event, data, to, payload,
payload_size, user_data);
}
void Channel::publishMessage(string method, string event, const char *data,
- const char *to, const unsigned char payload[],
- int payload_size, void *user_data) {
+ Json::Value to, const unsigned char payload[],
+ int payload_size, void *user_data) {
if (data)
MSF_DBG("data len %d, payload len %d", strlen(data), payload_size);
}
unsigned char *Channel::prepareMessageMap(string method, string event,
- const char *data, const char *to,
+ const char *data, Json::Value to,
long *prepare_buf_len,
const unsigned char payload[],
int payload_size) {
unsigned char *prepare_buf = new unsigned char[prepare_buf_size];
if (payload) {
+ Json::Value message;
+ Json::Value params;
+
+ params["event"] = event;
+ params["data"] = data;
+ params["to"] = to;
+ message["method"] = method;
+ message["params"] = params;
+
+ Json::FastWriter writer;
+
l += snprintf((char *)&prepare_buf[LWS_SEND_BUFFER_PRE_PADDING + 2],
prepare_buf_size - (LWS_SEND_BUFFER_PRE_PADDING + 2),
- "{\"method\": \"%s\",\"params\": {\"event\": "
- "\"%s\",\"data\": \"%s\",\"to\": %s}}",
- method.c_str(), event.c_str(), (unsigned char *)data,
- (unsigned char *)to);
+ "%s", writer.write(message).c_str());
header_size = l;
l += payload_size;
//binary_message = true;
} else {
+ Json::Value message;
+ Json::Value params;
+
+ params["event"] = event;
+ params["data"] = data;
+ params["to"] = to;
+ message["method"] = method;
+ message["params"] = params;
+
+ Json::FastWriter writer;
+
l += snprintf((char *)&prepare_buf[LWS_SEND_BUFFER_PRE_PADDING],
prepare_buf_size - LWS_SEND_BUFFER_PRE_PADDING,
- "{\"method\": \"%s\",\"params\": {\"event\": "
- "\"%s\",\"data\": \"%s\",\"to\": %s}}",
- method.c_str(), event.c_str(), (unsigned char *)data,
- (unsigned char *)to);
+ "%s", writer.write(message).c_str());
//binary_message = false;
}