static void replay_buffered_events() { guint i = 0; event_buffer_timeout(0); /* replay buffered events */ while(i < uzbl.state.event_buffer->len) { GString *tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); send_event_sockets(uzbl.comm.connect_chan, tmp); g_string_free(tmp, TRUE); } g_ptr_array_free(uzbl.state.event_buffer, TRUE); uzbl.state.event_buffer = NULL; }
void send_event_socket(GString *msg) { GError *error = NULL; GString *tmp; GIOChannel *gio = NULL; GIOStatus ret; gsize len; guint i=0, j=0; /* write to all --connect-socket sockets */ if(uzbl.comm.connect_chan) { while(i < uzbl.comm.connect_chan->len) { gio = g_ptr_array_index(uzbl.comm.connect_chan, i++); j=0; if(gio && gio->is_writeable) { if(uzbl.state.event_buffer) { event_buffer_timeout(0); /* replay buffered events */ while(j < uzbl.state.event_buffer->len) { tmp = g_ptr_array_index(uzbl.state.event_buffer, j++); ret = g_io_channel_write_chars (gio, tmp->str, tmp->len, &len, &error); if (ret == G_IO_STATUS_ERROR) g_warning ("Error sending event to socket: %s", error->message); else g_io_channel_flush(gio, &error); } } if(msg) { ret = g_io_channel_write_chars (gio, msg->str, msg->len, &len, &error); if (ret == G_IO_STATUS_ERROR) g_warning ("Error sending event to socket: %s", error->message); else g_io_channel_flush(gio, &error); } } } if(uzbl.state.event_buffer) { g_ptr_array_free(uzbl.state.event_buffer, TRUE); uzbl.state.event_buffer = NULL; } } /* buffer events until a socket is set and connected * or a timeout is encountered */ else { if(!uzbl.state.event_buffer) uzbl.state.event_buffer = g_ptr_array_new(); g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); } /* write to all client sockets */ i=0; if(msg && uzbl.comm.client_chan) { while(i < uzbl.comm.client_chan->len) { gio = g_ptr_array_index(uzbl.comm.client_chan, i++); if(gio && gio->is_writeable && msg) { ret = g_io_channel_write_chars (gio, msg->str, msg->len, &len, &error); if (ret == G_IO_STATUS_ERROR) g_warning ("Error sending event to socket: %s", error->message); else g_io_channel_flush(gio, &error); } } } }