elm/core/Native/WebSocket.js
evancz d53cecf3ba List module dependencies in elm and js code.
Planning on having the compiler crawl through to determine dependencies, then compile everything in an appropriate order. This will also let me print out compiler progress in a reasonable order.
2013-02-23 00:19:40 +01:00

39 lines
929 B
JavaScript

/*
import Signal
import JavaScript
import List
*/
(function() {
'use strict';
var JS = Elm.JavaScript;
function open(url) { return function(outgoing) {
var incoming = Elm.Signal.constant(Elm.Native.List.Nil);
var ws = new window.WebSocket(JS.castStringToJSString(url));
var pending = [];
var ready = false;
ws.onopen = function(e) {
var len = pending.length;
for (var i = 0; i < len; ++i) { ws.send(pending[i]); }
ready = true;
};
ws.onmessage = function(event) {
Dispatcher.notify(incoming.id, JS.castJSStringToString(event.data));
};
function send(msg) {
var s = JS.castStringToJSString(msg);
ready ? ws.send(s) : pending.push(s);
}
function take1(x) { return function(y) { return x; } }
return Elm.Signal.lift2(take1)(incoming)(Elm.Signal.lift(send)(outgoing));
};
}
Elm.Native.WebSocket = {open:open};
}());