summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/messaging-stream.ls
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/app/common/scripts/messaging-stream.ls')
-rw-r--r--src/web/app/common/scripts/messaging-stream.ls34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/web/app/common/scripts/messaging-stream.ls b/src/web/app/common/scripts/messaging-stream.ls
new file mode 100644
index 0000000000..298285dc93
--- /dev/null
+++ b/src/web/app/common/scripts/messaging-stream.ls
@@ -0,0 +1,34 @@
+# Stream
+#================================
+
+ReconnectingWebSocket = require 'reconnecting-websocket'
+riot = require 'riot'
+
+class Connection
+ (me, otherparty) ~>
+ @event = riot.observable!
+ @me = me
+ host = CONFIG.api.url.replace \http \ws
+ @socket = new ReconnectingWebSocket "#{host}/messaging?otherparty=#{otherparty}"
+
+ @socket.add-event-listener \open @on-open
+ @socket.add-event-listener \message @on-message
+
+ on-open: ~>
+ @socket.send JSON.stringify do
+ i: @me.token
+
+ on-message: (message) ~>
+ try
+ message = JSON.parse message.data
+ if message.type?
+ @event.trigger message.type, message.body
+ catch
+ # ignore
+
+ close: ~>
+ @socket.remove-event-listener \open @on-open
+ @socket.remove-event-listener \message @on-message
+ @socket.close!
+
+module.exports = Connection