79 lines
2.0 KiB
Markdown
79 lines
2.0 KiB
Markdown
# 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...");
|
|
})
|
|
``` |