# Smart WebSocket ```js // constructor(socketAddress, options = [], autoReconnect = true, debugName = null) // debugName is used for console logs. If omitted socketAddress will be used instead. let socket = SmartWebSocket("ws://127.0.0.1:8080", [], true, "sock"); socket.url = "ws://127.0.0.1:8081"; socket.protocols = []; socket.debugName = "mySock"; // close if connection is open, then re-open connection // applies changes to socket.url and socket.protocols socket.reconnect() // internal WebSocket element. console.log(socket.socket); // is socket connection open if (socket.isReady()) { // sends // {"event" : "myEvent", "data" : { "abc" : "def" }} // to server // data is stringified using JSON before sending socket.send("myEvent", { "abc" : "def"}); // sends // abcdef // to server. Same as calling socket.send on a regular WebSocket socket.sendRaw("abcdef"); } // is called when a JSON of the kind {"event" : "anotherEvent", "data" : {}} is received socket.on("anotherEvent", (data) => { console.log(data); }); // same as calling socket.addEventListener("open") on a regular WebSocket // same behaviour applies to events "close", "error" and "message" socket.on("open", (event) => { console.log(event); }); // close socket and disable auto-reconnect socket.close() ``` ## Server The "SmartWebSocketServer" is far less sophisticated and simply introduces the events to the server side ```js const { WebSocketServer } = require('ws'); // module only exports function to upgrade existing websocketserver const upgradeWSS = require('../SmartWebSocketServer.js'); const wss = new WebSocketServer({ port: 8082 }); // very first thing to call after creating websocketserver upgradeWSS(wss); wss.on("connection", (ws) => { console.log("connected"); // sending events to clients ws.sendEvent("test", { "abc" : 123 }); // receiving events from clients ws.on("test2", (data) => { console.log(data); }); }); wss.on("listening", () => { console.log("listening..."); }) ```