AnP/Public/ecma/Models/WebSocketClientModel.ecma.js
2026-06-05 15:00:29 +02:00

92 lines
2.4 KiB
JavaScript

"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;
})();