typedef struct jsock_sub_node_s {
jsock_t *jsock;
+ uint32_t serno;
struct jsock_sub_node_head_s *head;
struct jsock_sub_node_s *next;
} jsock_sub_node_t;
if ((json_text = cJSON_PrintUnformatted(*json))) {
if (jsock->profile->debug || globals.debug) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "WRITE %s [%s]\n", jsock->name, json_text);
+ char *log_text = cJSON_Print(*json);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "WRITE %s [%s]\n", jsock->name, log_text);
+ free(log_text);
}
switch_mutex_lock(jsock->write_mutex);
ws_write_frame(&jsock->ws, WSOC_TEXT, json_text, strlen(json_text));
if (!use_jsock || use_jsock == np->jsock) {
params = cJSON_Duplicate(event, 1);
+ cJSON_AddItemToObject(params, "eventSerno", cJSON_CreateNumber(np->serno++));
msg = jrpc_new_req("verto.event", NULL, ¶ms);
ws_write_json(np->jsock, &msg, SWITCH_TRUE);
}
switch_status_t status = SWITCH_STATUS_SUCCESS;
if (ascii) {
- if (jsock->profile->debug || globals.debug) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "READ %s [%s]\n", jsock->name, ascii);
- }
json = cJSON_Parse(ascii);
}
if (json) {
+
+ if (jsock->profile->debug || globals.debug) {
+ char *log_text = cJSON_Print(json);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "READ %s [%s]\n", jsock->name, log_text);
+ free(log_text);
+ }
+
if (json->type == cJSON_Array) { /* batch mode */
int i, len = cJSON_GetArraySize(json);
void verto_broadcast(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id)
{
-
- {
+ if (globals.debug > 10) {
char *json_text;
if ((json_text = cJSON_Print(json))) {
- if (globals.debug) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "EVENT BROADCAST %s %s\n", event_channel, json_text);
- }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ALERT, "EVENT BROADCAST %s %s\n", event_channel, json_text);
free(json_text);
}
}
-
-
-
jsock_send_event(json);
}
static int THREAD_COUNT = 0;
static int DISPATCH_THREAD_COUNT = 0;
static int EVENT_CHANNEL_DISPATCH_THREAD_COUNT = 0;
+static int EVENT_CHANNEL_DISPATCH_THREAD_STARTING = 0;
static int SYSTEM_RUNNING = 0;
static uint64_t EVENT_SEQUENCE_NR = 0;
#ifdef SWITCH_EVENT_RECYCLE
switch_mutex_lock(EVENT_QUEUE_MUTEX);
THREAD_COUNT++;
EVENT_CHANNEL_DISPATCH_THREAD_COUNT++;
+ EVENT_CHANNEL_DISPATCH_THREAD_STARTING = 0;
switch_mutex_unlock(EVENT_QUEUE_MUTEX);
while(SYSTEM_RUNNING) {
{
event_channel_data_t *ecd = NULL;
switch_status_t status = SWITCH_STATUS_SUCCESS;
+ int launch = 0;
if (!SYSTEM_RUNNING) {
cJSON_Delete(*json);
*json = NULL;
- if (!EVENT_CHANNEL_DISPATCH_THREAD_COUNT && SYSTEM_RUNNING) {
+ switch_mutex_lock(EVENT_QUEUE_MUTEX);
+ if (!EVENT_CHANNEL_DISPATCH_THREAD_COUNT && !EVENT_CHANNEL_DISPATCH_THREAD_STARTING && SYSTEM_RUNNING) {
+ EVENT_CHANNEL_DISPATCH_THREAD_STARTING = 1;
+ launch = 1;
+ }
+ switch_mutex_unlock(EVENT_QUEUE_MUTEX);
+
+ if (launch) {
switch_thread_data_t *td;
if (!EVENT_CHANNEL_DISPATCH_QUEUE) {
cJSON_AddItemToObject(msg, "eventChannel", cJSON_CreateString(la->event_channel));
cJSON_AddItemToObject(data, "action", cJSON_CreateString("bootObj"));
cJSON_AddItemToObject(data, "name", cJSON_CreateString(la->name));
- cJSON_AddItemToObject(data, "wireSerno", cJSON_CreateNumber(la->serno++));
+ cJSON_AddItemToObject(data, "wireSerno", cJSON_CreateNumber(-1));
if (sessid) {
cJSON_AddItemToObject(msg, "sessid", cJSON_CreateString(sessid));