123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- import UserM from "../api/UserM";
- export interface PogWebsocketListener {
- OnMessage(data: any): void;
- }
- export class PogWebsocket {
- clearReconnectTimes() {
- this._reconnectTimes = 0;
- }
- public static create(url: string, message: PogWebsocketListener) {
- let pogWebsocket = new PogWebsocket();
- pogWebsocket.init(url, message);
- return pogWebsocket;
- }
- public get connected(): boolean {
- return this._connected;
- }
- ping() {
- if (!this._connected) {
- return;
- }
- if (!UserM.ins.isLogin()) {
- return;
- }
- let pingData = "ping";
- this._ws.send(pingData);
- }
- // private _url: string;
- private _ws: WebSocket;
- private _connected: boolean = false;
- private _message: PogWebsocketListener;
- private _url: string;
- private init(url: string, message: PogWebsocketListener) {
- this._url = url;
- this._message = message;
- this._ws = new WebSocket(url);
- this._ws.onopen = null;
- this._ws.onmessage = null;
- this._ws.onclose = null;
- this._ws.onerror = null;
- this._ws.onopen = this.onOpen.bind(this);
- this._ws.onmessage = this.onMessage.bind(this);
- this._ws.onclose = this.onClose.bind(this);
- this._ws.onerror = this.onError.bind(this);
- }
- private onOpen() {
- console.log("onOpen");
- this._connected = true;
- this._reconnectTimes = 0;
- // this._ws.send(
- // JSON.stringify({
- // type: "test",
- // data: "test",
- // })
- // );
- }
- private onMessage(data: MessageEvent) {
- if (data.data == "pong") {
- return;
- }
- this._message.OnMessage(data);
- }
- private _reconnectTimes: number = 0;
- private onClose(event: CloseEvent) {
- console.log("onClose", event);
- this._connected = false;
- this.reconnect();
- }
- reconnect() {
- this._reconnectTimes++;
- if (this._reconnectTimes >= 3) {
- return;
- }
- console.warn("reconnect", this._reconnectTimes);
- // if (this._ws.readyState == WebSocket.CONNECTING) {
- // return;
- // }
- let self = this;
- setTimeout(() => {
- self.init(self._url, self._message);
- }, 2000 * self._reconnectTimes);
- }
- private onError(event: Event) {
- console.log("onError", event);
- this._connected = false;
- this._reconnectTimes = 0;
- this.reconnect();
- }
- public async send(data: any) {
- if (!this._connected) {
- return;
- }
- await this._ws.send(data);
- }
- public close() {
- this._ws.close();
- }
- }
|