private async static Task Offer(IHttpContext context) { var offer = await context.GetRequestDataAsync <RTCSessionDescriptionInit>(); var jsonOptions = new JsonSerializerOptions(); jsonOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); var echoServer = new WebRTCEchoServer(_icePresets); var answer = await echoServer.GotOffer(offer); if (answer != null) { context.Response.ContentType = "application/json"; using (var responseStm = context.OpenResponseStream(false, false)) { await JsonSerializer.SerializeAsync(responseStm, answer, jsonOptions); } } }
private async static Task Offer(IHttpContext context, int pcTimeout) { var offer = await context.GetRequestDataAsync <RTCSessionDescriptionInit>(); var jsonOptions = new JsonSerializerOptions(); jsonOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); var echoServer = new WebRTCEchoServer(_icePresets); var pc = await echoServer.GotOffer(offer); if (pc != null) { var answer = new RTCSessionDescriptionInit { type = RTCSdpType.answer, sdp = pc.localDescription.sdp.ToString() }; context.Response.ContentType = "application/json"; using (var responseStm = context.OpenResponseStream(false, false)) { await JsonSerializer.SerializeAsync(responseStm, answer, jsonOptions); } if (pcTimeout != 0) { logger.LogDebug($"Setting peer connection close timeout to {pcTimeout} seconds."); var timeout = new Timer((state) => { if (!pc.IsClosed) { logger.LogWarning("Test timed out."); pc.close(); } }, null, pcTimeout * 1000, Timeout.Infinite); pc.OnClosed += timeout.Dispose; } } }