From 472044577fe4facec4ec5f65874c64f9432a4ff9 Mon Sep 17 00:00:00 2001 From: Halit Aksoy Date: Sun, 4 Sep 2022 01:06:07 +0300 Subject: [PATCH] move connection state to rtmt --- src/const/texts.ts | 4 ++-- src/models/ConnectionState.ts | 1 - src/rtmt/rtmt.ts | 2 ++ src/rtmt/rtmt_websocket.ts | 11 ++++++++++- src/util/Util.ts | 12 +++++++++++- 5 files changed, 25 insertions(+), 5 deletions(-) delete mode 100644 src/models/ConnectionState.ts diff --git a/src/const/texts.ts b/src/const/texts.ts index 1f4b9dc..273cc72 100644 --- a/src/const/texts.ts +++ b/src/const/texts.ts @@ -51,7 +51,7 @@ export const EnUs: Texts = { Connecting: "Connecting", Connected: "Connected", CannotConnect: "Can't Connect", - ConnectionLost: "Connection Lost", + ConnectionLost: "Network Connection Lost", ConnectingAgain: "Connecting Again", ServerError: "Server Error", SearchingOpponet: "Searching Opponet", @@ -89,7 +89,7 @@ export const TrTr: Texts = { Connecting: "Bağlanılıyor", Connected: "Bağlandı", CannotConnect: "Bağlanılamadı", - ConnectionLost: "Bağlantı Koptu", + ConnectionLost: "Ağ Bağlantısı Koptu", ConnectingAgain: "Tekrar Bağlanılıyor", ServerError: "Sunucu Hatası", SearchingOpponet: "Rakip Aranıyor", diff --git a/src/models/ConnectionState.ts b/src/models/ConnectionState.ts deleted file mode 100644 index 5010944..0000000 --- a/src/models/ConnectionState.ts +++ /dev/null @@ -1 +0,0 @@ -export type ConnectionState = "connecting" | "error" | "connected" | "reconnecting"; \ No newline at end of file diff --git a/src/rtmt/rtmt.ts b/src/rtmt/rtmt.ts index 4e5e010..499a8a0 100644 --- a/src/rtmt/rtmt.ts +++ b/src/rtmt/rtmt.ts @@ -3,10 +3,12 @@ import EventEmitter2, { Listener } from "eventemitter2" export type Bytes = Uint8Array export type OnMessage = (message : Object) => any +export type ConnectionState = "none" | "connecting" | "error" | "connected" | "closed" | "reconnecting"; export type RtmtEventTypes = "open" | "close" | "connected" | "error" | "disconnected" | "message"; export interface RTMT extends EventEmitter2 { + get connectionState() : ConnectionState; sendMessage: (channel: string, message: Object) => void; addMessageListener(channel: string, callback: (message: any) => void); removeMessageListener(channel: string, callback: (message: any) => void); diff --git a/src/rtmt/rtmt_websocket.ts b/src/rtmt/rtmt_websocket.ts index a60d2e4..2117618 100644 --- a/src/rtmt/rtmt_websocket.ts +++ b/src/rtmt/rtmt_websocket.ts @@ -2,7 +2,7 @@ import { decode, encode } from "./encode_decode_message"; import { channel_ping, channel_pong } from "../const/channel_names"; import { server } from "../const/config"; import EventEmitter2, { Listener } from "eventemitter2"; -import { Bytes, RTMT, RtmtEventTypes } from "./rtmt"; +import { Bytes, ConnectionState, RTMT, RtmtEventTypes } from "./rtmt"; const PING_INTERVAL = 15000, PING_INTERVAL_BUFFER_TIME = 1000; const MESSAGE_CHANNEL_PREFIX = "message_channel"; @@ -10,24 +10,32 @@ const MESSAGE_CHANNEL_PREFIX = "message_channel"; export class RTMTWS extends EventEmitter2 implements RTMT { private webSocket: WebSocket; private pingTimeout?: number = undefined; + private _connectionState: ConnectionState = "none"; constructor() { super(); } + get connectionState(): ConnectionState { + return this._connectionState; + } + public initWebSocket(userKey: string) { + this._connectionState = this._connectionState !== "none" ? "reconnecting" : "connecting"; const url = server.wsServerAdress + "?userKey=" + userKey; const webSocket = new WebSocket(url); webSocket.onopen = () => { console.info("(RTMT) WebSocket has opened"); this.webSocket = webSocket; this.heartbeat(); + this._connectionState = "connected"; this.emit("open"); }; webSocket.onclose = () => { console.info("(RTMT) WebSocket has closed"); //this.WebSocket = undefined clearTimeout(this.pingTimeout); + this._connectionState = "closed"; this.emit("close"); }; webSocket.onmessage = (event: MessageEvent) => { @@ -36,6 +44,7 @@ export class RTMTWS extends EventEmitter2 implements RTMT { }; webSocket.onerror = (error) => { console.error(error); + this._connectionState = "error"; this.emit("error", error); } } diff --git a/src/util/Util.ts b/src/util/Util.ts index 5898bbf..cf27332 100644 --- a/src/util/Util.ts +++ b/src/util/Util.ts @@ -1,10 +1,20 @@ +import { Context } from "../context/context"; +import notyf from "./Notyf"; export default class Util { public static range(size: number) { - var ans : number[] = []; + var ans: number[] = []; for (let i = 0; i < size; i++) { ans.push(i); } return ans; } + + public static checkConnectionAndMaybeAlert(context: Context): boolean { + if (context.rtmt.connectionState !== "connected") { + notyf.error(context.texts.ConnectionLost); + return true; + } + return false; + } }