Динамический запрос ICE серверов

This commit is contained in:
RoyceDa
2026-03-14 23:05:54 +02:00
parent 76442c4161
commit f0d0909382
3 changed files with 89 additions and 5 deletions

View File

@@ -0,0 +1,50 @@
import Packet from "../packet";
import Stream from "../stream";
export class PacketIceServers extends Packet {
private iceServers: RTCIceServer[] = [];
public getPacketId(): number {
return 28;
}
public _receive(stream: Stream): void {
const serversCount = stream.readInt16();
this.iceServers = [];
for(let i = 0; i < serversCount; i++){
const urls = stream.readString();
const username = stream.readString();
const credential = stream.readString();
this.iceServers.push({
urls,
username,
credential
});
}
}
public _send(): Promise<Stream> | Stream {
const stream = new Stream();
stream.writeInt16(this.getPacketId());
stream.writeInt16(this.iceServers.length);
for(let i = 0; i < this.iceServers.length; i++){
const server = this.iceServers[i];
/**
* Не поддерживает массив urls!!!
*/
stream.writeString((server.urls as string));
stream.writeString(server.username || "");
stream.writeString(server.credential || "");
}
return stream;
}
public getIceServers(): RTCIceServer[] {
return this.iceServers;
}
public setIceServers(servers: RTCIceServer[]) {
this.iceServers = servers;
}
}

View File

@@ -27,6 +27,7 @@ import { PacketDeviceResolve } from "./packets/packet.device.resolve";
import { PacketSync } from "./packets/packet.sync";
import { PacketSignalPeer } from "./packets/packet.signal.peer";
import { PacketWebRTC } from "./packets/packet.webrtc";
import { PacketIceServers } from "./packets/packet.ice.servers";
export default class Protocol extends EventEmitter {
private serverAddress: string;
@@ -129,6 +130,7 @@ export default class Protocol extends EventEmitter {
this._supportedPackets.set(25, new PacketSync());
this._supportedPackets.set(26, new PacketSignalPeer());
this._supportedPackets.set(27, new PacketWebRTC());
this._supportedPackets.set(28, new PacketIceServers());
}
private _findWaiters(packetId: number): ((packet: Packet) => void)[] {