Test added perfect nogation

This commit is contained in:
abdussamedulutas 2025-07-13 16:48:22 +03:00
parent 965ca07853
commit 055fdd47bd
7 changed files with 4335 additions and 53 deletions

View File

@ -4,8 +4,7 @@ export interface IConnection{
endpoint: string;
autoReconnect?: boolean | {
timeout: number;
},
autoCreateRTC: boolean
}
}
export class Connection
{
@ -36,9 +35,6 @@ export class Connection
throw new Error("endpoint is required")
}
}
if(options.autoCreateRTC === false){
mwse.autoCreateRTC = false;
}
if(typeof options.autoReconnect == "boolean")
{
this.autoReconnect = true;

View File

@ -22,26 +22,18 @@ export default class Peer extends EventTarget
public selfSocket : boolean = false;
public active : boolean = false;
public info : PeerInfo;
public rtc? : WebRTC;
public rtc : WebRTC;
public peerConnection : boolean = false;
public primaryChannel : "websocket" | "datachannel" = "datachannel";
constructor(wsts:MWSE){
super();
this.mwse = wsts;
this.rtc = this.createRTC();
this.info = new PeerInfo(this);
this.on('pack',(data:{type?:string,action?:IMessageSymbase,payload?:any}) => {
if(data.type == ':rtcpack:')
{
if(this.rtc)
{
return this.rtc.emit("input", data.payload)
}else{
if(this.mwse.autoCreateRTC)
{
this.createRTC().emit("input", data.payload);
}
}
return console.warn("Not active rtc but recaived rtc packs")
return this.rtc.emit("input", data.payload)
};
this.emit("message", data);
});

View File

@ -59,6 +59,8 @@ export default class WebRTC
public ignoreOffer = false;
public isSettingRemoteAnswerPending = false;
candicatePack : RTCIceCandidate[] = [];
constructor(
rtcConfig?: RTCConfiguration,
@ -112,7 +114,17 @@ export default class WebRTC
switch(data.type)
{
case "icecandidate":{
await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));
try{
if(this.rtc.remoteDescription){
await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));
}else{
this.candicatePack.push(new RTCIceCandidate(data.value))
}
}catch(error){
debugger;
}finally{
console.log("ICE Canbet")
}
break;
}
case "offer":{
@ -132,6 +144,9 @@ export default class WebRTC
this.isSettingRemoteAnswerPending = false;
for (const candidate of this.candicatePack) {
await this.rtc.addIceCandidate(candidate);
}
let answer = await this.rtc.createAnswer({
offerToReceiveAudio: true,
@ -145,19 +160,11 @@ export default class WebRTC
break;
}
case "answer":{
let readyForOffer = !this.makingOffer && (this.rtc.signalingState == "stable" || this.isSettingRemoteAnswerPending);
const offerCollision = !readyForOffer;
this.ignoreOffer = !this.isPolite() && offerCollision;
if(this.ignoreOffer){
return;
}
this.isSettingRemoteAnswerPending = true;
await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value))
this.isSettingRemoteAnswerPending = false;
for (const candidate of this.candicatePack) {
await this.rtc.addIceCandidate(candidate);
}
break;
}
case "streamInfo":{

View File

@ -17,7 +17,6 @@ export default class MWSE extends EventTarget {
public peers : Map<string, Peer> = new Map();
public virtualPressure : IPPressure;
public me! : Peer;
public autoCreateRTC : boolean = true;
/*public static compress(message:string, callback:(e:any) => any)
{
let u : any= [];
@ -35,6 +34,7 @@ export default class MWSE extends EventTarget {
}*/
constructor(options: IConnection){
super();
MWSE.rtc = MWSE as unknown as WebRTC;
this.server = new Connection(this,options);
this.WSTSProtocol = new WSTSProtocol(this);
this.EventPooling = new EventPool(this);

View File

@ -6,14 +6,6 @@ let mwse;
* @type {string}
*/
let mySocketId;
/**
* @type {string}
*/
let myIPAddress;
/**
* @type {string}
*/
let myNumber;
/**
* @type {string}
*/
@ -41,6 +33,14 @@ function connect()
mwse = new MWSE({
endpoint: "wss://ws.saqut.com"
});
MWSE.rtc.defaultICEServers = [{
urls: "turn:20.166.82.187:3478",
username: "turnserver",
credential: "turnserver"
},{
urls: "stun:stun.l.google.com:19302"
}];
mwse.scope(beginEngine);
}
@ -124,8 +124,6 @@ async function beginEngine()
let me = mwse.peer("me");
me.disablePairAuth();
mySocketId = me.socketId;
myIPAddress = await mwse.virtualPressure.allocAPIPAddress();
myNumber = await mwse.virtualPressure.allocAPNumber();
let url = new URL(window.location);
roomid = url.searchParams.get("room");
@ -203,11 +201,13 @@ async function connectRoom()
});
await room.createRoom();
room.on("join", peer => IncomingPeer(peer, true));
room.on("join", peer => IncomingPeer(peer,true));
room.on("eject", peer => OutgoingPeer(peer));
for (const peer of await room.fetchPeers()) {
IncomingPeer(peer)
if(peer.socketId != mwse.peer('me').socketId){
IncomingPeer(peer,false)
}
}
addVideoList("My Webcam",outgoingStream, mwse.peer("me"), true)
@ -219,21 +219,13 @@ async function connectRoom()
*/
function IncomingPeer(peer,activeConnect)
{
peer.createRTC({
iceCandidatePoolSize: 0
},[{
urls: "turn:20.166.82.187:3478",
username: "turnserver",
credential: "turnserver"
},{
urls: "stun:stun.l.google.com:19302"
}]);
if(activeConnect)
{
peer.rtc.connect();
}
peer.rtc.rtc.turboBitrate = 0;
peer.rtc.on('connected',() => {
console.log("Connected");
if(!activeConnect)
{
peer.rtc.sendStream(outgoingStream, "Webcam", {});
@ -241,6 +233,7 @@ function IncomingPeer(peer,activeConnect)
}
});
peer.rtc.on('disconnected',() => {
console.log("Disconnected");
removeVideoList(peer.streamY, peer);
delete activePeers[peer.socketId];
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long