[gjs: 1/2] add websocket client example
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs: 1/2] add websocket client example
- Date: Fri, 20 Sep 2019 18:10:40 +0000 (UTC)
commit b5ce50eb1749cc8cee1aaa4ebd99428457a47784
Author: Sonny Piers <sonny fastmail net>
Date: Fri Sep 20 16:33:49 2019 +0200
add websocket client example
examples/websocket-client.js | 52 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
---
diff --git a/examples/websocket-client.js b/examples/websocket-client.js
new file mode 100644
index 00000000..84ca48ad
--- /dev/null
+++ b/examples/websocket-client.js
@@ -0,0 +1,52 @@
+// This is an example of a WebSocket client in Gjs using libsoup
+// https://developer.gnome.org/libsoup/stable/libsoup-2.4-WebSockets.html
+
+const Soup = imports.gi.Soup;
+const GLib = imports.gi.GLib;
+const byteArray = imports.byteArray;
+
+const loop = GLib.MainLoop.new(null, false);
+
+const session = new Soup.Session();
+const message = new Soup.Message({
+ method: 'GET',
+ uri: Soup.URI.new('wss://echo.websocket.org'),
+});
+
+session.websocket_connect_async(message, 'origin', [], null, websocket_connect_async_callback);
+
+function websocket_connect_async_callback(_session, res) {
+ let connection;
+
+ try {
+ connection = session.websocket_connect_finish(res);
+ } catch (e) {
+ logError(e);
+ loop.quit();
+ return;
+ }
+
+ connection.connect('closed', () => {
+ log('closed');
+ loop.quit();
+ });
+
+ connection.connect('error', (self, err) => {
+ logError(err);
+ loop.quit();
+ });
+
+ connection.connect('message', (self, type, data) => {
+ if (type !== Soup.WebsocketDataType.TEXT)
+ return;
+
+ const str = byteArray.toString(byteArray.fromGBytes(data));
+ log(`message: ${str}`);
+ connection.close(Soup.WebsocketCloseCode.NORMAL, null);
+ });
+
+ log('open');
+ connection.send_text('hello');
+}
+
+loop.run();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]