import {ServerStatus, StatusEnum} from "types"; import {ProtobufService} from './services/ProtobufService'; import {WebSocketOptions, WebSocketService} from "./services/WebSocketService"; import {RoomPersistence, SessionPersistence} from './persistence'; export class WebClient { public socket = new WebSocketService(this); public protobuf = new ProtobufService(this); public protocolVersion = 14; public clientConfig = { "clientver" : "webclient-1.0 (2019-10-31)", "clientfeatures" : [ "client_id", "client_ver", "feature_set", "room_chat_history", "client_warnings", /* unimplemented features */ "forgot_password", "idle_client", "mod_log_lookup", "user_ban_history", // satisfy server reqs for POC "websocket", "2.7.0_min_version", "2.8.0_min_version" ] }; public options: WebSocketOptions = { host: "", port: "", user: "", pass: "", clientid: null, reason: null, autojoinrooms: true, keepalive: 5000 }; constructor() { this.socket.message$.subscribe((message: MessageEvent) => { this.protobuf.handleMessageEvent(message); }); this.socket.statusChange$.subscribe((status: ServerStatus) => { this.handleStatusChange(status); }); console.log(this); } public connect(options: WebSocketOptions) { this.options = {...this.options, ...options}; this.socket.connect(this.options); } public disconnect() { this.socket.disconnect(); } public updateStatus(status: StatusEnum, description: string) { this.socket.updateStatus(status, description); } public handleStatusChange({ status, description }: ServerStatus) { SessionPersistence.updateStatus(status, description); if (status === StatusEnum.DISCONNECTED) { this.protobuf.resetCommands(); this.clearStores(); } } public keepAlive(pingReceived: Function) { this.protobuf.sendKeepAliveCommand(pingReceived); } private clearStores() { RoomPersistence.clearStore(); SessionPersistence.clearStore(); } } const webClient = new WebClient(); export default webClient;