2
0
mirror of https://github.com/esiur/esiur-js.git synced 2026-04-04 05:58:22 +00:00
This commit is contained in:
2022-03-13 11:28:38 +03:00
parent 7b1b844753
commit 15eb1453e7
55 changed files with 24308 additions and 4587 deletions

View File

@@ -4,22 +4,18 @@ import ExceptionCode from "../../Core/ExceptionCode.js";
import ISocket from "./ISocket.js";
import SocketState from "./SocketState.js";
import NetworkBuffer from "../NetworkBuffer.js";
export default class WSocket extends ISocket
{
//SocketState State { get; }
//INetworkReceiver<ISocket> Receiver { get; set; }
constructor(websocket){
super();
this.receiveNetworkBuffer = new NetworkBuffer();
this.sendNetworkBuffer = new NetworkBuffer();
this.held = false;
if (websocket != null)// instanceof WebSocket)
if (websocket != null)
{
//websocket.onerror = () => {
// self.state = SocketState.Closed;
//};
websocket.onopen = () => {
self.state = SocketState.Established;
};
@@ -47,6 +43,8 @@ export default class WSocket extends ISocket
sendAll(message)
{
// console.log("Out ", message.byteLength);
if (this.held)
this.sendNetworkBuffer.writeAll(message);
else
@@ -68,31 +66,53 @@ export default class WSocket extends ISocket
this.ws.close();
}
static webSocket = null;
static async getWebScoket(){
if (WSocket.webSocket == null) {
if (typeof window === 'undefined') {
const wsModule = await import('ws');
WSocket.webSocket = wsModule.default;
}
else
{
WSocket.webSocket = WebSocket;
}
}
return WSocket.webSocket;
}
connect(hostname, port, secure = false) {
let self = this;
var rt = new AsyncReply();
this.state = SocketState.Connecting;
this.url = `ws${secure ? 's' : ''}://${hostname}:${port}`;
let ws = new WebSocket(this.url, "iip");
ws.binaryType = "arraybuffer";
WSocket.getWebScoket().then(webSocket =>
{
ws.onopen = () => {
self.state = SocketState.Established;
rt.trigger(true);
};
let ws;
ws.onerror = () => {
self.state = SocketState.Closed;
rt.triggerError(ErrorType.Management, ExceptionCode.HostNotReachable);
};
ws = new webSocket(this.url, "iip");
ws.binaryType = "arraybuffer";
ws.onopen = () => {
self.state = SocketState.Established;
rt.trigger(true);
};
ws.onerror = () => {
self.state = SocketState.Closed;
rt.triggerError(ErrorType.Management, ExceptionCode.HostNotReachable);
};
self._assign(ws);
});
this._assign(ws);
return rt;// new AsyncReply(true);
}
@@ -106,6 +126,7 @@ export default class WSocket extends ISocket
};
ws.onmessage = function(msg) {
//console.log("WREC ", msg.data.byteLength);
self.receiveNetworkBuffer.writeAll(msg.data);
self.receiver.networkReceive(this, self.receiveNetworkBuffer);
//self.lastAction = new Date();
@@ -155,11 +176,4 @@ export default class WSocket extends ISocket
this.state = SocketState.Closed;
}
}
}
// if (this.holdSending) {
// //console.log("hold ", data.length);
// this.sendBuffer.writeAll(data);
// }
// else
// //console.log("Send", data.length);
}