static void broadcast(struct ns_connection *nc, const char *msg, size_t len) { struct ns_connection *c; char buf[500]; snprintf(buf, sizeof(buf), "%p %.*s", nc, (int) len, msg); for (c = ns_next(nc->mgr, NULL); c != NULL; c = ns_next(nc->mgr, c)) { ns_send_websocket_frame(c, WEBSOCKET_OP_TEXT, buf, strlen(buf)); } }
static void cb4_big(struct ns_connection *nc, int ev, void *ev_data) { struct websocket_message *wm = (struct websocket_message *) ev_data; struct big_payload_params *params = (struct big_payload_params *)nc->user_data; if (ev == NS_WEBSOCKET_FRAME) { memcpy(params->buf, wm->data, wm->size); ns_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0); } else if (ev == NS_WEBSOCKET_HANDSHAKE_DONE) { /* Send large payload to server. server must reply "success". */ char *payload = (char *)malloc(params->size); memset(payload, 'x', params->size); ns_printf_websocket_frame(nc, WEBSOCKET_OP_TEXT, "%.*s", params->size, payload); free(payload); } }
static void cb4(struct ns_connection *nc, int ev, void *ev_data) { struct websocket_message *wm = (struct websocket_message *) ev_data; if (ev == NS_WEBSOCKET_FRAME) { memcpy(nc->user_data, wm->data, wm->size); ns_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0); } else if (ev == NS_WEBSOCKET_HANDSHAKE_DONE) { /* Send "hi" to server. server must reply "A". */ struct ns_str h[2]; h[0].p = "h"; h[0].len = 1; h[1].p = "i"; h[1].len = 1; ns_send_websocket_framev(nc, WEBSOCKET_OP_TEXT, h, 2); } }
static v7_val_t WebSocket_send(struct v7 *v7, v7_val_t this_obj, v7_val_t args) { v7_val_t datav = v7_array_get(v7, args, 0); v7_val_t ncv = v7_get(v7, this_obj, "_nc", ~0); struct ns_connection *nc; const char *data; size_t len; if (!v7_is_string(datav)) { v7_throw(v7, "non string data not implemented"); return v7_create_undefined(); } if (!v7_is_foreign(ncv) || (nc = (struct ns_connection *) v7_to_foreign(ncv)) == NULL) { v7_throw(v7, "ws not connected"); return v7_create_undefined(); } data = v7_to_string(v7, &datav, &len); ns_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, data, len); return v7_create_undefined(); }