(parser)
| 42 | } |
| 43 | |
| 44 | static parse(parser) { |
| 45 | if (!parser.matchToken("socket")) return; |
| 46 | |
| 47 | var name = parser.requireElement("dotOrColonPath"); |
| 48 | var qualifiedName = name.evalStatically(); |
| 49 | var nameSpace = qualifiedName.split("."); |
| 50 | var socketName = nameSpace.pop(); |
| 51 | |
| 52 | var promises = {}; |
| 53 | var url = parser.parseURLOrExpression(); |
| 54 | |
| 55 | var defaultTimeout = 10000; |
| 56 | if (parser.matchToken("with")) { |
| 57 | parser.requireToken("timeout"); |
| 58 | defaultTimeout = parser.requireElement("expression").evalStatically(); |
| 59 | } |
| 60 | |
| 61 | var jsonMessages = false; |
| 62 | var messageHandler = null; |
| 63 | if (parser.matchToken("on")) { |
| 64 | parser.requireToken("message"); |
| 65 | if (parser.matchToken("as")) { |
| 66 | if (!parser.matchToken("JSON")) parser.requireToken("json"); |
| 67 | jsonMessages = true; |
| 68 | } |
| 69 | messageHandler = parser.requireElement("commandList"); |
| 70 | parser.ensureTerminated(messageHandler); |
| 71 | } |
| 72 | |
| 73 | var socket = new WebSocket(parseUrl(url.evalStatically())); |
| 74 | |
| 75 | function getProxy(timeout) { |
| 76 | return new Proxy( |
| 77 | {}, |
| 78 | { |
| 79 | get: function (obj, property) { |
| 80 | if (PROXY_BLACKLIST.includes(property)) { |
| 81 | return null; |
| 82 | } else if (property === "noTimeout") { |
| 83 | return getProxy(-1); |
| 84 | } else if (property === "timeout") { |
| 85 | return function (i) { |
| 86 | return getProxy(parseInt(i)); |
| 87 | }; |
| 88 | } else { |
| 89 | return function () { |
| 90 | var uuid = genUUID(); |
| 91 | var args = []; |
| 92 | for (var i = 0; i < arguments.length; i++) { |
| 93 | args.push(arguments[i]); |
| 94 | } |
| 95 | var rpcInfo = { |
| 96 | iid: uuid, |
| 97 | function: property, |
| 98 | args: args, |
| 99 | }; |
| 100 | socket = socket ? socket : new WebSocket(parseUrl(url.evalStatically())); //recreate socket if needed |
| 101 | socket.send(JSON.stringify(rpcInfo)); |
no test coverage detected