src/lib/myScript/networking/networkWSInterface.ts
Network interface
constructor()
|
setUrl |
setUrl(url: string)
|
Returns:
void
|
getUrl |
getUrl()
|
Returns:
string
|
setCallback |
setCallback(callback: Function)
|
Returns:
void
|
getCallback |
getCallback()
|
Returns:
Function
|
getState |
getState()
|
Returns:
number
|
isClosed |
isClosed()
|
Returns:
boolean
|
isClosing |
isClosing()
|
Returns:
boolean
|
isOpen |
isOpen()
|
Returns:
boolean
|
isConnecting |
isConnecting()
|
Returns:
boolean
|
open |
open()
|
Returns:
void
|
close |
close(code: number, reason: string)
|
Returns:
void
|
send |
send(request: string | Object)
|
Returns:
void
|
Private _openWebSocket |
_openWebSocket(url: string, callback: Function)
|
Parameters :
Returns:
WebSocket
* |
Private _closeWebSocket |
_closeWebSocket(socket: WebSocket, code: number, reason: string)
|
Parameters :
Returns:
void
|
Private _getWebSocketState |
_getWebSocketState(socket: WebSocket)
|
Parameters :
Returns:
number
* |
Private _sendMessage |
_sendMessage(socket: WebSocket, message: string | Object)
|
Parameters :
Returns:
void
|
Private _callback |
_callback: |
Private _socket |
_socket: |
Private _url |
_url: |
export class NetworkWSInterface {
private _url: string;
private _callback: Function;
private _socket: WebSocket;
constructor() { }
setUrl(url: string) {
if ((url !== undefined) && (url !== this._url)) {
this.close();
this._url = url;
}
};
getUrl(): string {
return this._url;
};
setCallback(callback: Function) {
if (callback !== undefined) {
this.close();
this._callback = callback;
}
};
getCallback(): Function {
return this._callback;
};
getState(): number {
return NetworkWSInterface._getWebSocketState(this._socket);
};
isClosed(): boolean {
return this.getState() === 3;
};
isClosing(): boolean {
return this.getState() === 2;
};
isOpen(): boolean {
return this.getState() === 1;
};
isConnecting(): boolean {
return this.getState() === 0;
};
open() {
if (this.getUrl() && this.getCallback() && ((this.getState() < 0) || this.isClosed())) {
this._socket = NetworkWSInterface._openWebSocket(this.getUrl(), this.getCallback());
}
};
close(code?: number, reason?: string) {
if (this.getState() < 2) {
NetworkWSInterface._closeWebSocket(this._socket, code, reason);
}
};
send(request: Object | string) {
let state = NetworkWSInterface._getWebSocketState(this._socket);
if (state === 1) {
NetworkWSInterface._sendMessage(this._socket, request);
} else {
this.open();
}
};
/**
*
* @param url
* @param callback
* @returns {WebSocket}
* @private
*/
private static _openWebSocket(url: string, callback: Function): WebSocket {
function onOpen(e) {
callback(e);
}
function onClose(e) {
callback(e);
}
function onError(e) {
callback(e);
}
function onMessage(e) {
callback({
type: e.type,
data: JSON.parse(e.data)
});
}
let socket = new WebSocket(url);
socket.onopen = onOpen;
socket.onclose = onClose;
socket.onerror = onError;
socket.onmessage = onMessage;
return socket;
};
/**
*
* @param socket
* @param code
* @param reason
* @private
*/
private static _closeWebSocket(socket: WebSocket, code?:number, reason?: string) {
if (socket) {
socket.close(code, reason);
}
};
/**
*
* @param socket
* @returns {*}
* @private
*/
private static _getWebSocketState(socket: WebSocket): number {
if (socket) {
return socket.readyState;
}
return -1;
};
/**
*
* @param socket
* @param message
* @private
*/
private static _sendMessage(socket: WebSocket, message: Object | string) {
if (socket) {
socket.send(JSON.stringify(message));
}
};
}