"use strict"; import {Event} from "../Application/Event.ecma.js"; import {Check} from "../Utils/Checks.ecma.js"; import {Common} from "../Utils/Common.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP */ export const WebSocketClientModel = (function(){ const WebSocketClientModel = function(anp, inputs){ const self = this; let web_socket = null, url = null, id = null; this.on_open = new Event(); this.on_message = new Event(); this.on_close = new Event(); this.on_error = new Event(); const constructor = () => { Check.is_string(inputs) && (inputs = {url : inputs}); web_socket = new WebSocket(url = Common.get_value("url", inputs, "")); web_socket.onopen = self.on_open.execute; web_socket.onmessage = self.on_message.execute; web_socket.onclose = self.on_close.execute; web_socket.onerror = self.on_error.execute; // self.on_open.add(opened); self.on_message.add(reveive_message); self.on_close.add(closed); self.on_error.add(error); }; // const opened = event => { // self.send("web_socket_client", "get_id", null, 200); // }; const reveive_message = event => { console.log(event); const data = Common.data_decode(event.data); switch(data.controller + "." + data.method){ case "web_socket_client.set_id": id = data.data; break; default: anp.controllers.execute(data.controller, data.method, data.data, data); break; }; }; this.send = (controller, method, data, code = 200) => { web_socket.send(Common.data_encode({ ok : code >= 200 && code < 300, code : code, id : id, controller : controller, method : method, data : data })); }; this.close = () => { web_socket.close(); }; const closed = event => { id = null; }; const error = event => { console.error(event); self.close(); }; constructor(); }; return WebSocketClientModel; })();