foxconn-yumeeting-sdk-js
Version:
A js sdk for ion yumeeting
160 lines (159 loc) • 7.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BizClient = void 0;
const grpc_web_1 = require("@improbable-eng/grpc-web");
const events_1 = require("events");
const biz = require("./_proto/library/biz/biz_pb");
const ion = require("./_proto/library/biz/ion_pb");
const biz_rpc = require("./_proto/library/biz/biz_pb_service");
const ion_1 = require("../ion");
const utils_1 = require("./utils");
require("fast-text-encoding");
class BizClient extends events_1.EventEmitter {
constructor(uri, metadata) {
super();
this.client = new biz_rpc.BizClient(uri, {
transport: grpc_web_1.grpc.WebsocketTransport(),
});
this.streaming = this.client.signal(metadata);
this.streaming.on('data', (reply) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
switch (reply.getPayloadCase()) {
case biz.SignalReply.PayloadCase.JOINREPLY:
const result = {
success: ((_a = reply.getJoinreply()) === null || _a === void 0 ? void 0 : _a.getSuccess()) || false,
reason: ((_b = reply.getJoinreply()) === null || _b === void 0 ? void 0 : _b.getReason()) || 'unkown reason',
};
this.emit('join-reply', result.success, result.reason);
break;
case biz.SignalReply.PayloadCase.LEAVEREPLY:
const reason = ((_c = reply.getLeavereply()) === null || _c === void 0 ? void 0 : _c.getReason()) || 'unkown reason';
this.emit('leave-reply', reason);
break;
case biz.SignalReply.PayloadCase.PEEREVENT:
{
const evt = reply.getPeerevent();
let state = ion_1.PeerState.NONE;
const info = JSON.parse(utils_1.Uint8ArrayToJSONString((_d = evt === null || evt === void 0 ? void 0 : evt.getPeer()) === null || _d === void 0 ? void 0 : _d.getInfo()));
switch (evt === null || evt === void 0 ? void 0 : evt.getState()) {
case ion.PeerEvent.State.JOIN:
state = ion_1.PeerState.JOIN;
break;
case ion.PeerEvent.State.UPDATE:
state = ion_1.PeerState.UPDATE;
break;
case ion.PeerEvent.State.LEAVE:
state = ion_1.PeerState.LEAVE;
break;
}
const peer = {
uid: ((_e = evt === null || evt === void 0 ? void 0 : evt.getPeer()) === null || _e === void 0 ? void 0 : _e.getUid()) || '',
sid: ((_f = evt === null || evt === void 0 ? void 0 : evt.getPeer()) === null || _f === void 0 ? void 0 : _f.getSid()) || '',
info: info || {},
};
this.emit('peer-event', { state, peer });
}
break;
case biz.SignalReply.PayloadCase.STREAMEVENT:
{
const evt = reply.getStreamevent();
let state = ion_1.StreamState.NONE;
switch (evt === null || evt === void 0 ? void 0 : evt.getState()) {
case ion.StreamEvent.State.ADD:
state = ion_1.StreamState.ADD;
break;
case ion.StreamEvent.State.REMOVE:
state = ion_1.StreamState.REMOVE;
break;
}
const sid = (evt === null || evt === void 0 ? void 0 : evt.getSid()) || '';
const uid = (evt === null || evt === void 0 ? void 0 : evt.getUid()) || '';
const streams = Array();
evt === null || evt === void 0 ? void 0 : evt.getStreamsList().forEach((ionStream) => {
const tracks = Array();
ionStream.getTracksList().forEach((ionTrack) => {
const track = {
id: ionTrack.getId(),
label: ionTrack.getLabel(),
kind: ionTrack.getKind(),
simulcast: ionTrack.getSimulcastMap(),
direction: ionTrack.getDirection(),
};
tracks.push(track);
});
const stream = {
id: ionStream.getId(),
tracks: tracks || [],
};
streams.push(stream);
});
this.emit('stream-event', { state, sid, uid, streams });
}
break;
case biz.SignalReply.PayloadCase.MSG:
const data = JSON.parse(utils_1.Uint8ArrayToJSONString((_g = reply.getMsg()) === null || _g === void 0 ? void 0 : _g.getData()));
const msg = { from: ((_h = reply.getMsg()) === null || _h === void 0 ? void 0 : _h.getFrom()) || '', to: ((_j = reply.getMsg()) === null || _j === void 0 ? void 0 : _j.getTo()) || '', data: data || {} };
this.emit('message', msg);
break;
}
});
this.streaming.on('end', (status) => {
this.emit('onclose', status);
});
}
async join(sid, uid, info, ip, account, npi, role, platform, system, version, token) {
const request = new biz.SignalRequest();
const join = new biz.Join();
join.setToken(token || '');
const peer = new ion.Peer();
peer.setSid(sid);
peer.setUid(uid);
peer.setIp(ip);
peer.setAccount(account);
peer.setNpi(npi);
peer.setRole(role);
peer.setPlatform(platform);
peer.setSystem(system);
peer.setVersion(version);
const buffer = new TextEncoder().encode(JSON.stringify(info));
peer.setInfo(buffer);
join.setPeer(peer);
request.setJoin(join);
this.streaming.write(request);
return new Promise((resolve, reject) => {
const handler = (result) => {
resolve(result);
this.removeListener('join-reply', handler);
};
this.addListener('join-reply', handler);
});
}
async leave(uid) {
const request = new biz.SignalRequest();
const leave = new biz.Leave();
leave.setUid(uid);
request.setLeave(leave);
this.streaming.write(request);
return new Promise((resolve, reject) => {
const handler = (reason) => {
resolve(reason);
this.removeListener('join-reply', handler);
};
this.addListener('join-reply', handler);
});
}
async sendMessage(from, to, data) {
const request = new biz.SignalRequest();
const message = new ion.Message();
message.setFrom(from);
message.setTo(to);
const buffer = new TextEncoder().encode(JSON.stringify(data));
message.setData(buffer);
request.setMsg(message);
this.streaming.write(request);
}
close() {
this.streaming.end();
}
}
exports.BizClient = BizClient;