* Support Registration on Webatrice with a baseline of handling. Still needs to support activation tokens & unit testing. * Add support for account activation with token * Activate Account refactor * Fix typo * Add Unit Testing for Commands/Events * Changes based on review feedback
90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
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;
|