89 lines
2 KiB
TypeScript
89 lines
2 KiB
TypeScript
import { StatusEnum, WebSocketConnectOptions } from 'types';
|
|
|
|
import { ProtobufService } from './services/ProtobufService';
|
|
import { 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 = {
|
|
clientid: 'webatrice',
|
|
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 clientOptions = {
|
|
autojoinrooms: true,
|
|
keepalive: 5000
|
|
};
|
|
|
|
public options: WebSocketConnectOptions;
|
|
public status: StatusEnum;
|
|
|
|
public connectionAttemptMade = false;
|
|
|
|
constructor() {
|
|
this.socket.message$.subscribe((message: MessageEvent) => {
|
|
this.protobuf.handleMessageEvent(message);
|
|
});
|
|
|
|
if (process.env.NODE_ENV !== 'test') {
|
|
console.log(this);
|
|
}
|
|
}
|
|
|
|
public connect(options: WebSocketConnectOptions) {
|
|
this.connectionAttemptMade = true;
|
|
this.options = options;
|
|
this.socket.connect(options);
|
|
}
|
|
|
|
public testConnect(options: WebSocketConnectOptions) {
|
|
this.socket.testConnect(options);
|
|
}
|
|
|
|
public disconnect() {
|
|
this.socket.disconnect();
|
|
}
|
|
|
|
public updateStatus(status: StatusEnum) {
|
|
this.status = status;
|
|
|
|
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;
|