import AgoraRTC from "agora-rtc-sdk-ng"; import { SubscribeAction } from "../action/SubscribeAction"; import { ActionParams } from "../action/type/ActionParams"; import { RegionChangeActionParams } from "../action/type/RegionChangeActionParams"; import { SubscribeActionParams } from "../action/type/SubscribeActionParams"; import { Context } from "../context/Context"; import { MediaTypeEnum } from "../context/enum/MediaTypeEnum"; import { BaseOperation } from "./base/BaseOperation"; import { EOperationStatus } from "./enum/EOperationStatus"; import { EOperationType } from "./enum/EOperationType"; import { IOperation } from "./interface/IOperation"; const parseError = require('parse-error'); export class SubscribeOperation extends BaseOperation implements IOperation { constructor(context: Context){ super(context); this.type=EOperationType.SUBSCRIBE; } /*@overwrite*/ public async handler(params ? : ActionParams) : Promise{ return new Promise( async (resolve, reject)=>{ try { this.context.getDeterminants().setUpdating(true); let client = this.context.getResources().getClient(); let subscribeActionParams : SubscribeActionParams = Object.assign(params ? params : {}); let userExist = false; client.remoteUsers.map((user)=>{ if(user.uid == subscribeActionParams.remoteUser.uid){ userExist = true; } }); if(userExist){ await client.subscribe(subscribeActionParams.remoteUser, subscribeActionParams.mediaType); if(subscribeActionParams.mediaType == MediaTypeEnum.AUDIO && subscribeActionParams.remoteUser.audioTrack){ subscribeActionParams.remoteUser.audioTrack.play(); } } this.status = EOperationStatus.PERFORMED; } catch (error) { this.addError(error); this.status = EOperationStatus.FAILED; } resolve(this.status); }); } }