static void on_websocket_message()

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);
}