TeaWeb/shared/js/connection/DummyVoiceConnection.ts

127 lines
No EOL
3 KiB
TypeScript

import {
AbstractVoiceConnection, LatencySettings,
PlayerState,
VoiceClient,
VoiceConnectionStatus
} from "tc-shared/connection/VoiceConnection";
import {RecorderProfile} from "tc-shared/voice/RecorderProfile";
import {AbstractServerConnection} from "tc-shared/connection/ConnectionBase";
class DummyVoiceClient implements VoiceClient {
client_id: number;
callback_playback: () => any;
callback_stopped: () => any;
callback_state_changed: (new_state: PlayerState) => any;
private volume: number;
constructor(clientId: number) {
this.client_id = clientId;
this.volume = 1;
this.reset_latency_settings();
}
abort_replay() { }
flush() {
throw "flush isn't supported";}
get_state(): PlayerState {
return PlayerState.STOPPED;
}
latency_settings(settings?: LatencySettings): LatencySettings {
throw "latency settings are not supported";
}
reset_latency_settings() {
throw "latency settings are not supported";
}
set_volume(volume: number): void {
this.volume = volume;
}
get_volume(): number {
return this.volume;
}
support_flush(): boolean {
return false;
}
support_latency_settings(): boolean {
return false;
}
}
export class DummyVoiceConnection extends AbstractVoiceConnection {
private recorder: RecorderProfile;
private voiceClients: DummyVoiceClient[] = [];
constructor(connection: AbstractServerConnection) {
super(connection);
}
async acquire_voice_recorder(recorder: RecorderProfile | undefined): Promise<void> {
if(this.recorder === recorder)
return;
if(this.recorder) {
this.recorder.callback_unmount = undefined;
await this.recorder.unmount();
}
await recorder?.unmount();
this.recorder = recorder;
if(this.recorder) {
this.recorder.callback_unmount = () => {
this.recorder = undefined;
this.events.fire("notify_recorder_changed");
}
}
this.events.fire("notify_recorder_changed", {});
}
available_clients(): VoiceClient[] {
return this.voiceClients;
}
decoding_supported(codec: number): boolean {
return false;
}
encoding_supported(codec: number): boolean {
return false;
}
getConnectionState(): VoiceConnectionStatus {
return VoiceConnectionStatus.ClientUnsupported;
}
get_encoder_codec(): number {
return 0;
}
register_client(clientId: number): VoiceClient {
const client = new DummyVoiceClient(clientId);
this.voiceClients.push(client);
return client;
}
set_encoder_codec(codec: number) {}
async unregister_client(client: VoiceClient): Promise<void> {
this.voiceClients.remove(client as any);
}
voice_recorder(): RecorderProfile {
return this.recorder;
}
}