2017-12-11 14:50:41 +01:00
|
|
|
import { SessionInternal, SessionOptions, SignalOptions } from '../OpenViduInternal/SessionInternal';
|
2017-05-10 10:55:31 +02:00
|
|
|
import { Stream } from '../OpenViduInternal/Stream';
|
2017-05-17 11:46:32 +02:00
|
|
|
import { Connection } from "../OpenViduInternal/Connection";
|
2016-10-15 00:11:17 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
import { OpenVidu } from './OpenVidu';
|
2017-05-22 23:02:28 +02:00
|
|
|
import { Publisher } from './Publisher';
|
2017-05-10 10:55:31 +02:00
|
|
|
import { Subscriber } from './Subscriber';
|
2016-10-15 00:11:17 +02:00
|
|
|
|
2017-05-17 11:46:32 +02:00
|
|
|
import EventEmitter = require('wolfy87-eventemitter');
|
|
|
|
|
2016-10-15 02:08:23 +02:00
|
|
|
export class Session {
|
2016-10-15 00:11:17 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
sessionId: String;
|
2017-05-17 11:46:32 +02:00
|
|
|
//capabilities: Capabilities
|
|
|
|
connection: Connection;
|
|
|
|
|
|
|
|
private ee = new EventEmitter();
|
2016-10-15 00:11:17 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
constructor(private session: SessionInternal, private openVidu: OpenVidu) {
|
|
|
|
this.sessionId = session.getSessionId();
|
2017-05-17 11:46:32 +02:00
|
|
|
|
|
|
|
// Listens to the deactivation of the default behaviour upon the deletion of a Stream object
|
2017-06-13 12:29:15 +02:00
|
|
|
this.session.addEventListener('stream-destroyed-default', event => {
|
2017-05-10 10:55:31 +02:00
|
|
|
event.stream.removeVideo();
|
|
|
|
});
|
2017-05-17 11:46:32 +02:00
|
|
|
|
2017-05-22 23:02:28 +02:00
|
|
|
// Listens to the deactivation of the default behaviour upon the disconnection of a Session
|
|
|
|
this.session.addEventListener('session-disconnected-default', () => {
|
|
|
|
let s: Stream;
|
|
|
|
for (s of this.openVidu.openVidu.getRemoteStreams()) {
|
|
|
|
s.removeVideo();
|
|
|
|
}
|
2017-06-09 15:21:53 +02:00
|
|
|
if (this.connection) {
|
|
|
|
for (let streamId in this.connection.getStreams()) {
|
|
|
|
this.connection.getStreams()[streamId].removeVideo();
|
|
|
|
}
|
2017-05-22 23:02:28 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2017-05-17 11:46:32 +02:00
|
|
|
// Sets or updates the value of 'connection' property. Triggered by SessionInternal when succesful connection
|
|
|
|
this.session.addEventListener('update-connection-object', event => {
|
|
|
|
this.connection = event.connection;
|
|
|
|
});
|
2016-10-15 02:08:23 +02:00
|
|
|
}
|
|
|
|
|
2017-05-12 19:44:32 +02:00
|
|
|
connect(token: string, callback: any);
|
2017-09-12 11:43:44 +02:00
|
|
|
connect(token: string, metadata: any, callback: any);
|
2017-05-22 23:02:28 +02:00
|
|
|
|
2017-05-12 19:44:32 +02:00
|
|
|
connect(param1, param2, param3?) {
|
2017-05-10 10:55:31 +02:00
|
|
|
// Early configuration to deactivate automatic subscription to streams
|
2017-09-12 11:43:44 +02:00
|
|
|
if (param3) {
|
2017-05-12 19:44:32 +02:00
|
|
|
this.session.configure({
|
|
|
|
sessionId: this.session.getSessionId(),
|
|
|
|
participantId: param1,
|
2017-09-12 11:43:44 +02:00
|
|
|
metadata: this.session.stringClientMetadata(param2),
|
2017-05-12 19:44:32 +02:00
|
|
|
subscribeToStreams: false
|
|
|
|
});
|
|
|
|
this.session.connect(param1, param3);
|
|
|
|
} else {
|
|
|
|
this.session.configure({
|
|
|
|
sessionId: this.session.getSessionId(),
|
|
|
|
participantId: param1,
|
|
|
|
metadata: '',
|
|
|
|
subscribeToStreams: false
|
|
|
|
});
|
|
|
|
this.session.connect(param1, param2);
|
|
|
|
}
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
disconnect() {
|
|
|
|
this.openVidu.openVidu.close(false);
|
2017-05-22 23:02:28 +02:00
|
|
|
this.session.emitEvent('sessionDisconnected', [{
|
|
|
|
preventDefault: () => { this.session.removeEvent('session-disconnected-default'); }
|
|
|
|
}]);
|
|
|
|
this.session.emitEvent('session-disconnected-default', [{}]);
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
publish(publisher: Publisher) {
|
2017-10-03 15:02:36 +02:00
|
|
|
if (publisher.isScreenRequested && !publisher.stream.isScreenRequestedReady) {
|
|
|
|
publisher.stream.addOnceEventListener('screen-ready', () => {
|
|
|
|
publisher.session = this;
|
|
|
|
publisher.stream.publish();
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
publisher.session = this;
|
|
|
|
publisher.stream.publish();
|
|
|
|
}
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
unpublish(publisher: Publisher) {
|
|
|
|
this.session.unpublish(publisher.stream);
|
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
on(eventName: string, callback) {
|
2017-06-13 12:29:15 +02:00
|
|
|
this.session.addEventListener(eventName, event => {
|
2017-09-22 15:57:59 +02:00
|
|
|
if (event) {
|
|
|
|
console.info("Event '" + eventName + "' triggered by 'Session'", event);
|
|
|
|
} else {
|
|
|
|
console.info("Event '" + eventName + "' triggered by 'Session'");
|
|
|
|
}
|
2017-06-13 12:29:15 +02:00
|
|
|
callback(event);
|
|
|
|
});
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
once(eventName: string, callback) {
|
2017-06-13 12:29:15 +02:00
|
|
|
this.session.addOnceEventListener(eventName, event => {
|
|
|
|
callback(event);
|
|
|
|
});
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
off(eventName: string, eventHandler) {
|
2017-06-13 12:29:15 +02:00
|
|
|
this.session.removeListener(eventName, eventHandler);
|
2017-05-10 10:55:31 +02:00
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
subscribe(stream: Stream, htmlId: string, videoOptions: any): Subscriber;
|
|
|
|
subscribe(stream: Stream, htmlId: string): Subscriber;
|
2017-05-22 23:02:28 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
subscribe(param1, param2, param3?): Subscriber {
|
|
|
|
// Subscription
|
|
|
|
this.session.subscribe(param1);
|
|
|
|
let subscriber = new Subscriber(param1, param2);
|
|
|
|
param1.playOnlyVideo(param2, null);
|
|
|
|
return subscriber;
|
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
unsubscribe(subscriber: Subscriber) {
|
2017-12-12 14:36:43 +01:00
|
|
|
this.session.unsubscribe(subscriber.stream);
|
2017-05-10 10:55:31 +02:00
|
|
|
subscriber.stream.removeVideo();
|
|
|
|
}
|
2017-03-28 20:17:44 +02:00
|
|
|
|
2017-12-11 14:50:41 +01:00
|
|
|
signal(signal: SignalOptions, completionHandler?: Function) {
|
|
|
|
var signalMessage = {};
|
|
|
|
|
|
|
|
if (signal.to && signal.to.length > 0) {
|
|
|
|
let connectionIds: string[] = [];
|
|
|
|
for (let i = 0; i < signal.to.length; i++) {
|
|
|
|
connectionIds.push(signal.to[i].connectionId);
|
|
|
|
}
|
|
|
|
signalMessage['to'] = connectionIds;
|
|
|
|
} else {
|
|
|
|
signalMessage['to'] = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
signalMessage['data'] = signal.data ? signal.data : '';
|
|
|
|
signalMessage['type'] = signal.type ? signal.type : '';
|
|
|
|
|
|
|
|
this.openVidu.openVidu.sendMessage(this.sessionId, this.connection.connectionId, JSON.stringify(signalMessage));
|
|
|
|
}
|
|
|
|
|
2016-10-15 00:11:17 +02:00
|
|
|
}
|