(function() { window.ipc = {}; ipc.ongamestopped = null; ipc.ongamelist = null; ipc.onerror = null; var ws; var connected = false; function send(obj) { var msg = JSON.stringify(obj); if (!connected) return console.error( "Attempt to send message, but socket is closed."); console.log("Sending", msg); ws.send(msg); } ipc.init = (port, cb) => { console.log("Connecting..."); ws = new WebSocket("ws://127.0.0.1:"+port); ws.onopen = () => { connected = true; console.log("Connected."); cb && cb(); } ws.onmessage = msg => { console.log("Received", msg.data); var obj = JSON.parse(msg.data); switch (obj.cmd) { case "ongamestopped": return ipc.ongamestopped(); case "ongamestart": return ipc.ongamestart(); case "ongamelist": return ipc.ongamelist(obj.games); case "onerror": return ipc.onerror(obj.msg); default: console.error("Received unknown command:", obj.cmd); } } ws.onclose = () => { connected = false; console.log("Disconnected, retrying in 1 second..."); setTimeout(ipc.init.bind(null, port, cb), 1000); } } ipc.run = name => { send({ cmd: "run", name: name }); } })();