diff --git a/client/src/neko/base.ts b/client/src/neko/base.ts index 9cad66fd..9111c507 100644 --- a/client/src/neko/base.ts +++ b/client/src/neko/base.ts @@ -19,6 +19,7 @@ export abstract class BaseClient extends EventEmitter { protected _displayname?: string protected _state: RTCIceConnectionState = 'disconnected' protected _id = '' + protected _candidates: RTCIceCandidate[] = []; get id() { return this._id @@ -220,6 +221,9 @@ export abstract class BaseClient extends EventEmitter { this._channel.onclose = this.onDisconnected.bind(this, new Error('peer data channel closed')) this._peer.setRemoteDescription({ type: 'offer', sdp }) + for (let candidate of this._candidates) { + this._peer.addIceCandidate(candidate) + } this._peer .createAnswer() .then((d) => { @@ -250,7 +254,11 @@ export abstract class BaseClient extends EventEmitter { if (event === EVENT.SIGNAL.CANDIDATE) { const { data } = payload as SignalCandidatePayload let candidate: RTCIceCandidate = JSON.parse(data) - this._peer!.addIceCandidate(candidate) + if (this._peer) { + this._peer.addIceCandidate(candidate) + } else { + this._candidates.push(candidate); + } return }