111
This commit is contained in:
141
WebApp/build/class/websockethandler.js
Normal file
141
WebApp/build/class/websockethandler.js
Normal file
@@ -0,0 +1,141 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.onCandidate = exports.onAnswer = exports.onOffer = exports.onDisconnect = exports.onConnect = exports.remove = exports.add = exports.reset = void 0;
|
||||
var offer_1 = require("./offer");
|
||||
var answer_1 = require("./answer");
|
||||
var candidate_1 = require("./candidate");
|
||||
var isPrivate;
|
||||
// [{sessonId:[connectionId,...]}]
|
||||
var clients = new Map();
|
||||
// [{connectionId:[sessionId1, sessionId2]}]
|
||||
var connectionPair = new Map();
|
||||
function getOrCreateConnectionIds(session) {
|
||||
var connectionIds = null;
|
||||
if (!clients.has(session)) {
|
||||
connectionIds = new Set();
|
||||
clients.set(session, connectionIds);
|
||||
}
|
||||
connectionIds = clients.get(session);
|
||||
return connectionIds;
|
||||
}
|
||||
function reset(mode) {
|
||||
isPrivate = mode == "private";
|
||||
}
|
||||
exports.reset = reset;
|
||||
function add(ws) {
|
||||
clients.set(ws, new Set());
|
||||
}
|
||||
exports.add = add;
|
||||
function remove(ws) {
|
||||
var connectionIds = clients.get(ws);
|
||||
connectionIds.forEach(function (connectionId) {
|
||||
var pair = connectionPair.get(connectionId);
|
||||
if (pair) {
|
||||
var otherSessionWs = pair[0] == ws ? pair[1] : pair[0];
|
||||
if (otherSessionWs) {
|
||||
otherSessionWs.send(JSON.stringify({ type: "disconnect", connectionId: connectionId }));
|
||||
}
|
||||
}
|
||||
connectionPair.delete(connectionId);
|
||||
});
|
||||
clients.delete(ws);
|
||||
}
|
||||
exports.remove = remove;
|
||||
function onConnect(ws, connectionId) {
|
||||
var polite = true;
|
||||
if (isPrivate) {
|
||||
if (connectionPair.has(connectionId)) {
|
||||
var pair = connectionPair.get(connectionId);
|
||||
if (pair[0] != null && pair[1] != null) {
|
||||
ws.send(JSON.stringify({ type: "error", message: "".concat(connectionId, ": This connection id is already used.") }));
|
||||
return;
|
||||
}
|
||||
else if (pair[0] != null) {
|
||||
connectionPair.set(connectionId, [pair[0], ws]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
connectionPair.set(connectionId, [ws, null]);
|
||||
polite = false;
|
||||
}
|
||||
}
|
||||
var connectionIds = getOrCreateConnectionIds(ws);
|
||||
connectionIds.add(connectionId);
|
||||
ws.send(JSON.stringify({ type: "connect", connectionId: connectionId, polite: polite }));
|
||||
}
|
||||
exports.onConnect = onConnect;
|
||||
function onDisconnect(ws, connectionId) {
|
||||
var connectionIds = clients.get(ws);
|
||||
connectionIds.delete(connectionId);
|
||||
if (connectionPair.has(connectionId)) {
|
||||
var pair = connectionPair.get(connectionId);
|
||||
var otherSessionWs = pair[0] == ws ? pair[1] : pair[0];
|
||||
if (otherSessionWs) {
|
||||
otherSessionWs.send(JSON.stringify({ type: "disconnect", connectionId: connectionId }));
|
||||
}
|
||||
}
|
||||
connectionPair.delete(connectionId);
|
||||
ws.send(JSON.stringify({ type: "disconnect", connectionId: connectionId }));
|
||||
}
|
||||
exports.onDisconnect = onDisconnect;
|
||||
function onOffer(ws, message) {
|
||||
var connectionId = message.connectionId;
|
||||
var newOffer = new offer_1.default(message.sdp, Date.now(), false);
|
||||
if (isPrivate) {
|
||||
if (connectionPair.has(connectionId)) {
|
||||
var pair = connectionPair.get(connectionId);
|
||||
var otherSessionWs = pair[0] == ws ? pair[1] : pair[0];
|
||||
if (otherSessionWs) {
|
||||
newOffer.polite = true;
|
||||
otherSessionWs.send(JSON.stringify({ from: connectionId, to: "", type: "offer", data: newOffer }));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
connectionPair.set(connectionId, [ws, null]);
|
||||
clients.forEach(function (_v, k) {
|
||||
if (k == ws) {
|
||||
return;
|
||||
}
|
||||
k.send(JSON.stringify({ from: connectionId, to: "", type: "offer", data: newOffer }));
|
||||
});
|
||||
}
|
||||
exports.onOffer = onOffer;
|
||||
function onAnswer(ws, message) {
|
||||
var connectionId = message.connectionId;
|
||||
var connectionIds = getOrCreateConnectionIds(ws);
|
||||
connectionIds.add(connectionId);
|
||||
var newAnswer = new answer_1.default(message.sdp, Date.now());
|
||||
if (!connectionPair.has(connectionId)) {
|
||||
return;
|
||||
}
|
||||
var pair = connectionPair.get(connectionId);
|
||||
var otherSessionWs = pair[0] == ws ? pair[1] : pair[0];
|
||||
if (!isPrivate) {
|
||||
connectionPair.set(connectionId, [otherSessionWs, ws]);
|
||||
}
|
||||
otherSessionWs.send(JSON.stringify({ from: connectionId, to: "", type: "answer", data: newAnswer }));
|
||||
}
|
||||
exports.onAnswer = onAnswer;
|
||||
function onCandidate(ws, message) {
|
||||
var connectionId = message.connectionId;
|
||||
var candidate = new candidate_1.default(message.candidate, message.sdpMLineIndex, message.sdpMid, Date.now());
|
||||
if (isPrivate) {
|
||||
if (connectionPair.has(connectionId)) {
|
||||
var pair = connectionPair.get(connectionId);
|
||||
var otherSessionWs = pair[0] == ws ? pair[1] : pair[0];
|
||||
if (otherSessionWs) {
|
||||
otherSessionWs.send(JSON.stringify({ from: connectionId, to: "", type: "candidate", data: candidate }));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
clients.forEach(function (_v, k) {
|
||||
if (k === ws) {
|
||||
return;
|
||||
}
|
||||
k.send(JSON.stringify({ from: connectionId, to: "", type: "candidate", data: candidate }));
|
||||
});
|
||||
}
|
||||
exports.onCandidate = onCandidate;
|
||||
//# sourceMappingURL=websockethandler.js.map
|
||||
Reference in New Issue
Block a user