vroom-web-sdk-beta
Version:
VROOM SDK (beta) by True Virtual World
63 lines (53 loc) • 1.7 kB
text/typescript
import EventEmitter from 'events'
import { Mixin } from 'ts-mixer'
import ConfigurationBase from './configuration.base'
import { ConfigurationType } from '../types/vroomSDK.base'
import HelperFunction from './helper.function'
import { JoinResponseType } from '../types/message'
import VroomParticipant from '../types/publisher'
import VroomVideoPlugin from '../plugins/vroom-video.plugin'
export default class SdkBase extends Mixin (
EventEmitter,
ConfigurationBase,
HelperFunction
) {
public wsConn: WebSocket | any
public mapTransactions: Map<any, any>
public canJoin: boolean = false
public streams: any[] = []
public joined: boolean = false
public attendees: any[] = []
public roomId: number = 0
constructor(config: ConfigurationType) {
super(config)
this.mapTransactions = new Map()
}
public async joinStart(
pub: VroomVideoPlugin,
sub: VroomVideoPlugin,
stream: MediaStream,
audio: boolean,
video: boolean,
canJoin: boolean,
config: ConfigurationType
): Promise<void | JoinResponseType> {
if (!canJoin) return
if (this.joined) return
pub.opaqueId = 'pub-' + this.opaqueId
sub.opaqueId = 'sub-' + this.opaqueId
await pub.attachPlugin()
await sub.attachPlugin()
const roomId = this.getRoomIdFromUrl(config.endpoint)
if (roomId && config.displayName) {
this.joined = true
return await pub.joinRoom(stream, roomId, config.displayName, !audio, !video)
}
}
public async receivePublisher(sub: VroomVideoPlugin, publisher: VroomParticipant[], privateId: number) {
try {
await sub?.receive(publisher, privateId)
} catch (e) {
console.error(e)
}
}
}