Skip to content

Instantly share code, notes, and snippets.

@nus
Last active October 3, 2023 15:03
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save nus/564e9e57e4c107faa1a45b8332c265b9 to your computer and use it in GitHub Desktop.
Save nus/564e9e57e4c107faa1a45b8332c265b9 to your computer and use it in GitHub Desktop.
An example of emscripten with WebSocket.
// $ em++ -lwebsocket.js -o index.html main.cpp
#include <emscripten/emscripten.h>
#include <emscripten/websocket.h>
#include <stdio.h>
EM_BOOL onopen(int eventType, const EmscriptenWebSocketOpenEvent *websocketEvent, void *userData) {
puts("onopen");
EMSCRIPTEN_RESULT result;
result = emscripten_websocket_send_utf8_text(websocketEvent->socket, "hoge");
if (result) {
printf("Failed to emscripten_websocket_send_utf8_text(): %d\n", result);
}
return EM_TRUE;
}
EM_BOOL onerror(int eventType, const EmscriptenWebSocketErrorEvent *websocketEvent, void *userData) {
puts("onerror");
return EM_TRUE;
}
EM_BOOL onclose(int eventType, const EmscriptenWebSocketCloseEvent *websocketEvent, void *userData) {
puts("onclose");
return EM_TRUE;
}
EM_BOOL onmessage(int eventType, const EmscriptenWebSocketMessageEvent *websocketEvent, void *userData) {
puts("onmessage");
if (websocketEvent->isText) {
// For only ascii chars.
printf("message: %s\n", websocketEvent->data);
}
EMSCRIPTEN_RESULT result;
result = emscripten_websocket_close(websocketEvent->socket, 1000, "no reason");
if (result) {
printf("Failed to emscripten_websocket_close(): %d\n", result);
}
return EM_TRUE;
}
int main() {
if (!emscripten_websocket_is_supported()) {
return 0;
}
EmscriptenWebSocketCreateAttributes ws_attrs = {
"wss://echo.websocket.org",
NULL,
EM_TRUE
};
EMSCRIPTEN_WEBSOCKET_T ws = emscripten_websocket_new(&ws_attrs);
emscripten_websocket_set_onopen_callback(ws, NULL, onopen);
emscripten_websocket_set_onerror_callback(ws, NULL, onerror);
emscripten_websocket_set_onclose_callback(ws, NULL, onclose);
emscripten_websocket_set_onmessage_callback(ws, NULL, onmessage);
}
@adrianmay
Copy link

Doesn't work at all:

[413932:413932:1001/144526.633769:ERROR:vaapi_wrapper.cc(1051)] FillProfileInfo_Locked failed for va_profile VAProfileH264Main and entrypoint VAEntrypointVLD
[413932:413932:1001/144526.633794:ERROR:vaapi_wrapper.cc(1104)] vaQuerySurfaceAttributes failed, VA error: invalid parameter
[413932:413932:1001/144526.633813:ERROR:vaapi_wrapper.cc(1051)] FillProfileInfo_Locked failed for va_profile VAProfileH264High and entrypoint VAEntrypointVLD
[413899:413990:1001/144526.647002:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[413899:413990:1001/144526.647120:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[413899:413990:1001/144526.647212:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.UPower.EnumerateDevices: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[413899:413940:1001/144528.689677:ERROR:chrome_browser_main_extra_parts_metrics.cc(228)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[413899:413940:1001/144528.689703:ERROR:chrome_browser_main_extra_parts_metrics.cc(231)] crbug.com/1216328: Checking Bluetooth availability ended.
[413899:413940:1001/144528.689713:ERROR:chrome_browser_main_extra_parts_metrics.cc(234)] crbug.com/1216328: Checking default browser status started. Please report if there is no report that this ends.
[413899:413940:1001/144528.812047:ERROR:chrome_browser_main_extra_parts_metrics.cc(238)] crbug.com/1216328: Checking default browser status ended.

@octopoulos
Copy link

It works fine for me, but I had to use another echo server, I used the one from this page: http://websockets.chilkat.io/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment