in chime/chime-juggernaut.c [133:180]
static void on_websocket_message(SoupWebsocketConnection *ws, gint type,
GBytes *message, gpointer _cxn)
{
ChimeConnection *cxn = _cxn;
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
gchar **parms;
gconstpointer data;
if (type != SOUP_WEBSOCKET_DATA_TEXT)
return;
data = g_bytes_get_data(message, NULL);
chime_connection_log(cxn, CHIME_LOGLVL_MISC,
"websocket message received:\n'%s'\n", (char *)data);
/* DISCONNECT */
if (!strcmp(data, "0::")) {
/* Do not attempt to reconnect */
priv->jugg_online = FALSE;
chime_connection_fail(cxn, CHIME_ERROR_NETWORK,
_("Juggernaut server closed connection"));
return;
}
/* CONNECT */
if (!strcmp(data, "1::")) {
if (!priv->jugg_online) {
priv->jugg_online = TRUE;
chime_connection_calculate_online(cxn);
}
priv->jugg_connected = TRUE;
return;
}
/* Keepalive */
if (!strcmp(data, "2::")) {
jugg_send(cxn, "2::");
return;
}
parms = g_strsplit(data, ":", 4);
if (parms[0] && parms[1] && *parms[1] && parms[2]) {
/* Send an ack */
jugg_send(cxn, "6:::%s", parms[1]);
if (priv->subscriptions && !strcmp(parms[0], "3") && parms[3])
handle_callback(cxn, parms[3]);
}
g_strfreev(parms);
}