Skip to content

Commit

Permalink
Use separate hub method params for signaling.
Browse files Browse the repository at this point in the history
  • Loading branch information
bitbound committed Mar 19, 2021
1 parent e039bd7 commit 37e187e
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 27 deletions.
10 changes: 5 additions & 5 deletions Desktop.Core/Services/CasterSocket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public interface ICasterSocket
Task SendCtrlAltDelToAgent();
Task SendDeviceInfo(string serviceID, string machineName, string deviceID);
Task SendDtoToViewer<T>(T baseDto, string viewerId);
Task SendIceCandidateToBrowser(string candidateJson, string viewerConnectionID);
Task SendIceCandidateToBrowser(string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment, string viewerConnectionID);
Task SendMessageToViewer(string viewerID, string message);
Task SendRtcOfferToBrowser(string sdp, string viewerID, IceServerModel[] iceServers);
Task SendViewerConnected(string viewerConnectionId);
Expand Down Expand Up @@ -164,9 +164,9 @@ public Task SendDtoToViewer<T>(T baseDto, string viewerId)
var serializedDto = MessagePack.MessagePackSerializer.Serialize(baseDto);
return Connection.SendAsync("SendDtoToBrowser", serializedDto, viewerId);
}
public async Task SendIceCandidateToBrowser(string candidateJson, string viewerConnectionID)
public async Task SendIceCandidateToBrowser(string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment, string viewerConnectionID)
{
await Connection.SendAsync("SendIceCandidateToBrowser", candidateJson, viewerConnectionID);
await Connection.SendAsync("SendIceCandidateToBrowser", candidate, sdpMid, sdpMLineIndex, usernameFragment, viewerConnectionID);
}

public async Task SendRtcOfferToBrowser(string sdp, string viewerID, IceServerModel[] iceServers)
Expand Down Expand Up @@ -235,13 +235,13 @@ private void ApplyConnectionHandlers()
});


Connection.On("ReceiveIceCandidate", (string candidateJson, string viewerID) =>
Connection.On("ReceiveIceCandidate", (string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment, string viewerID) =>
{
try
{
if (conductor.Viewers.TryGetValue(viewerID, out var viewer))
{
viewer.RtcSession.AddIceCandidate(candidateJson);
viewer.RtcSession.AddIceCandidate(candidate, sdpMid, sdpMLineIndex, usernameFragment);
}
}
catch (Exception ex)
Expand Down
7 changes: 5 additions & 2 deletions Desktop.Core/Services/Viewer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,11 @@ public async Task InitializeWebRtc()
};
RtcSession.IceCandidateReady += async (sender, candidate) =>
{
var candidateJson = JsonSerializer.Serialize(candidate);
await CasterSocket.SendIceCandidateToBrowser(candidateJson, ViewerConnectionID);
await CasterSocket.SendIceCandidateToBrowser(candidate.candidate,
candidate.sdpMid,
candidate.sdpMLineIndex,
candidate.usernameFragment,
ViewerConnectionID);
};

await RtcSession.Init(iceServers);
Expand Down
13 changes: 10 additions & 3 deletions Desktop.Core/Services/WebRtcSession.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,17 @@ public WebRtcSession(Viewer viewer, IDtoMessageHandler rtcMessageHandler)
private IDtoMessageHandler RtcMessageHandler { get; }
private Timer DataChannelBufferMonitor { get; }
private Viewer Viewer { get; }
public void AddIceCandidate(string candidateJson)
public void AddIceCandidate(string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment)
{
var candidate = JsonSerializer.Deserialize<RTCIceCandidateInit>(candidateJson);
PeerSession.addIceCandidate(candidate);
var rtcCandidate = new RTCIceCandidateInit()
{
candidate = candidate,
sdpMid = sdpMid,
sdpMLineIndex = sdpMLineIndex,
usernameFragment = usernameFragment
};

PeerSession.addIceCandidate(rtcCandidate);
}

public void Dispose()
Expand Down
4 changes: 2 additions & 2 deletions Server/Hubs/CasterHub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,11 @@ public Task SendDtoToBrowser(byte[] dto, string viewerId)
return ViewerHubContext.Clients.Client(viewerId).SendAsync("SendDtoToBrowser", dto);
}

public Task SendIceCandidateToBrowser(string candidateJson, string viewerID)
public Task SendIceCandidateToBrowser(string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment, string viewerID)
{
if (AppConfig.UseWebRtc)
{
return ViewerHubContext.Clients.Client(viewerID).SendAsync("ReceiveIceCandidate", candidateJson);
return ViewerHubContext.Clients.Client(viewerID).SendAsync("ReceiveIceCandidate", candidate, sdpMid, sdpMLineIndex, usernameFragment);
}

return Task.CompletedTask;
Expand Down
4 changes: 2 additions & 2 deletions Server/Hubs/ViewerHub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,9 @@ public override Task OnDisconnectedAsync(Exception exception)
return base.OnDisconnectedAsync(exception);
}

public Task SendIceCandidateToAgent(string candidateJson)
public Task SendIceCandidateToAgent(string candidate, string sdpMid, ushort sdpMLineIndex, string usernameFragment)
{
return CasterHubContext.Clients.Client(ScreenCasterID).SendAsync("ReceiveIceCandidate", candidateJson, Context.ConnectionId);
return CasterHubContext.Clients.Client(ScreenCasterID).SendAsync("ReceiveIceCandidate", candidate, sdpMid, sdpMLineIndex, usernameFragment, Context.ConnectionId);
}

public Task SendRtcAnswerToAgent(string sdp)
Expand Down
21 changes: 12 additions & 9 deletions Server/wwwroot/src/RemoteControl/RtcSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,20 @@ export class RtcSession {
await ViewerApp.ViewerHubConnection.SendRtcAnswer(this.PeerConnection.localDescription);
console.log("Set RTC offer.");
}
async ReceiveCandidate(candidate: RTCIceCandidate) {
async ReceiveCandidate(candidate: string, sdpMid: string, sdpMLineIndex: number, usernameFragment: string) {
When(() => !!this.PeerConnection).then(async () => {
if (!candidate.candidate.startsWith("candidate:")) {
var normalizedCandidate = {} as any;
Object.assign(normalizedCandidate, candidate);
normalizedCandidate.candidate = `candidate:${candidate.candidate}`;
await this.PeerConnection.addIceCandidate(normalizedCandidate);
}
else {
await this.PeerConnection.addIceCandidate(candidate);
if (!candidate.startsWith("candidate:")) {
candidate = `candidate:${candidate}`;
}

var rtcCandidate = {
candidate: candidate,
sdpMid: sdpMid,
sdpMLineIndex: sdpMLineIndex,
usernameFragment: usernameFragment
} as RTCIceCandidateInit;

await this.PeerConnection.addIceCandidate(rtcCandidate);
console.log("Set ICE candidate.", candidate);
});
}
Expand Down
7 changes: 3 additions & 4 deletions Server/wwwroot/src/RemoteControl/ViewerHubConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export class ViewerHubConnection {

SendIceCandidate(candidate: RTCIceCandidate) {
if (candidate) {
this.Connection.invoke("SendIceCandidateToAgent", JSON.stringify(candidate));
this.Connection.invoke("SendIceCandidateToAgent", candidate.candidate, candidate.sdpMid, candidate.sdpMLineIndex, candidate.usernameFragment);
}
else {
this.Connection.invoke("SendIceCandidateToAgent", "{}");
Expand Down Expand Up @@ -147,10 +147,9 @@ export class ViewerHubConnection {
await ViewerApp.RtcSession.ReceiveRtcOffer(sdp);

});
hubConnection.on("ReceiveIceCandidate", async (candidateJson: string) => {
var candidate = JSON.parse(candidateJson);
hubConnection.on("ReceiveIceCandidate", async (candidate: string, sdpMid: string, sdpMLineIndex: number, usernameFragment: string) => {
console.log("Ice candidate received.", candidate);
await ViewerApp.RtcSession.ReceiveCandidate(candidate);
await ViewerApp.RtcSession.ReceiveCandidate(candidate, sdpMid, sdpMLineIndex, usernameFragment);
});
hubConnection.on("ShowMessage", (message: string) => {
ShowMessage(message);
Expand Down

0 comments on commit 37e187e

Please sign in to comment.