From 025bdd2fa952a71cd2ecfb720398c3eb8fbf601a Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Wed, 8 Jan 2025 01:04:05 +0000 Subject: [PATCH] Change IWebRtcVoiceService API to pass region UUID rather than IScene class. Add local VoiceViewerSession instance for remote connections. Add UpdateViewerSessionId to sync local and remote viewer session IDs. Properly select sections of JsonRPC messages for in and out messages. Code for both VoiceServiceConnector and VoiceServerConnector. Add more and completer MessageDetail debug statements. Bump minor version number = 1.1.1. --- Janus/JanusSession.cs | 3 +- Janus/WebRtcJanusService.cs | 14 +- VERSION | 2 +- WebRtcVoice/IWebRtcVoiceService.cs | 10 +- WebRtcVoice/VoiceViewerSession.cs | 40 ++++- WebRtcVoice/WebRtcVoiceServerConnector.cs | 73 ++++++-- WebRtcVoice/WebRtcVoiceServiceConnector.cs | 165 ++++++++++++++++-- .../WebRtcVoiceRegionModule.cs | 18 +- .../WebRtcVoiceServiceModule.cs | 18 +- 9 files changed, 283 insertions(+), 60 deletions(-) diff --git a/Janus/JanusSession.cs b/Janus/JanusSession.cs index 63d0dc1..56942e9 100644 --- a/Janus/JanusSession.cs +++ b/Janus/JanusSession.cs @@ -243,8 +243,9 @@ namespace WebRtcVoice }; _OutstandingRequests.Add(pReq.TransactionId, outReq); - HttpRequestMessage reqMsg = new HttpRequestMessage(HttpMethod.Post, pURI); string reqStr = pReq.ToJson(); + + HttpRequestMessage reqMsg = new HttpRequestMessage(HttpMethod.Post, pURI); reqMsg.Content = new StringContent(reqStr, System.Text.Encoding.UTF8, MediaTypeNames.Application.Json); reqMsg.Headers.Add("Accept", "application/json"); HttpResponseMessage response = await _HttpClient.SendAsync(reqMsg, _CancelTokenSource.Token); diff --git a/Janus/WebRtcJanusService.cs b/Janus/WebRtcJanusService.cs index 3ac115c..32a486c 100644 --- a/Janus/WebRtcJanusService.cs +++ b/Janus/WebRtcJanusService.cs @@ -177,7 +177,7 @@ namespace WebRtcVoice // This is the logic that takes the client's request and converts it into // operations on rooms in the audio bridge. // IWebRtcVoiceService.ProvisionVoiceAccountRequest - public async Task ProvisionVoiceAccountRequest(IVoiceViewerSession pSession, OSDMap pRequest, UUID pUserID, IScene pScene) + public async Task ProvisionVoiceAccountRequest(IVoiceViewerSession pSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { OSDMap ret = null; string errorMsg = null; @@ -226,7 +226,7 @@ namespace WebRtcVoice { // The client is sending an offer. Find the right room and join it. // _log.DebugFormat("{0} ProvisionVoiceAccountRequest: jsep type={1} sdp={2}", LogHeader, jsepType, jsepSdp); - viewerSession.Room = await viewerSession.AudioBridge.SelectRoom(pScene.RegionInfo.RegionID.ToString(), + viewerSession.Room = await viewerSession.AudioBridge.SelectRoom(pSceneID.ToString(), channel_type, isSpatial, parcel_local_id, channel_id); if (viewerSession.Room is null) { @@ -284,7 +284,7 @@ namespace WebRtcVoice } // IWebRtcVoiceService.VoiceAccountBalanceRequest - public async Task VoiceSignalingRequest(IVoiceViewerSession pSession, OSDMap pRequest, UUID pUserID, IScene pScene) + public async Task VoiceSignalingRequest(IVoiceViewerSession pSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { OSDMap ret = null; JanusViewerSession viewerSession = pSession as JanusViewerSession; @@ -340,26 +340,26 @@ namespace WebRtcVoice // This module should not be invoked with this signature // IWebRtcVoiceService.ProvisionVoiceAccountRequest - public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { throw new NotImplementedException(); } // This module should not be invoked with this signature // IWebRtcVoiceService.VoiceSignalingRequest - public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { throw new NotImplementedException(); } // The viewer session object holds all the connection information to Janus. // IWebRtcVoiceService.CreateViewerSession - public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, IScene pScene) + public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, UUID pSceneID) { return new JanusViewerSession(this) { AgentId = pUserID, - RegionId = pScene.RegionInfo.RegionID + RegionId = pSceneID }; } diff --git a/VERSION b/VERSION index 8fc77d0..524cb55 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.17 +1.1.1 diff --git a/WebRtcVoice/IWebRtcVoiceService.cs b/WebRtcVoice/IWebRtcVoiceService.cs index cf318c2..1720342 100644 --- a/WebRtcVoice/IWebRtcVoiceService.cs +++ b/WebRtcVoice/IWebRtcVoiceService.cs @@ -27,14 +27,14 @@ namespace WebRtcVoice // If there are problems, the returned map will contain an error message. // Initial calls to the voice server to get the user connected - public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, IScene pScene); - public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, IScene pScene); + public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, UUID pScene); + public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, UUID pScene); // Once connection state is looked up, the viewer session is passed in - public Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene); - public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene); + public Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pScene); + public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pScene); // Create a viewer session with all the variables needed for the underlying implementation - public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, IScene pScene); + public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, UUID pScene); } } diff --git a/WebRtcVoice/VoiceViewerSession.cs b/WebRtcVoice/VoiceViewerSession.cs index 5233fdc..32a5eb1 100644 --- a/WebRtcVoice/VoiceViewerSession.cs +++ b/WebRtcVoice/VoiceViewerSession.cs @@ -14,11 +14,29 @@ using System.Linq; using System.Collections.Generic; using OpenMetaverse; +using System.Threading.Tasks; namespace WebRtcVoice { - public static class VoiceViewerSession + public class VoiceViewerSession : IVoiceViewerSession { + + // A simple session structure that is used when the connection is actually in the + // remote service. + public VoiceViewerSession(IWebRtcVoiceService pVoiceService, UUID pRegionId, UUID pAgentId) + { + RegionId = pRegionId; + AgentId = pAgentId; + ViewerSessionID = UUID.Random().ToString(); + VoiceService = pVoiceService; + + } + public string ViewerSessionID { get; set; } + public IWebRtcVoiceService VoiceService { get ; set; } + public string VoiceServiceSessionId { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } + public UUID RegionId { get ; set; } + public UUID AgentId { get ; set; } + // ===================================================================== // ViewerSessions hold the connection information for the client connection through to the voice service. // This collection is static and is simulator wide so there will be sessions for all regions and all clients. @@ -70,6 +88,26 @@ namespace WebRtcVoice } } + // Update a ViewSession from one ID to another. + // Remove the old session ID from the ViewerSessions collection, update the + // sessionID value in the IVoiceViewerSession, and add the session back to the + // collection. + // This is used in the kludge to synchronize a region's ViewerSessionID with the + // remote VoiceService's session ID. + public static void UpdateViewerSessionId(IVoiceViewerSession pSession, string pNewSessionId) + { + lock (ViewerSessions) + { + ViewerSessions.Remove(pSession.ViewerSessionID); + pSession.ViewerSessionID = pNewSessionId; + ViewerSessions[pSession.ViewerSessionID] = pSession; + } + } + + public Task Shutdown() + { + throw new System.NotImplementedException(); + } } } diff --git a/WebRtcVoice/WebRtcVoiceServerConnector.cs b/WebRtcVoice/WebRtcVoiceServerConnector.cs index d8e9e11..040ca88 100644 --- a/WebRtcVoice/WebRtcVoiceServerConnector.cs +++ b/WebRtcVoice/WebRtcVoiceServerConnector.cs @@ -75,7 +75,7 @@ namespace WebRtcVoice sharedModule.Initialise(pConfig); // Now that we have someone to handle the requests, we can set up the handlers - pServer.AddJsonRPCHandler("voice_provision_voice_account_request", Handle_ProvisionVoiceAccountRequest); + pServer.AddJsonRPCHandler("provision_voice_account_request", Handle_ProvisionVoiceAccountRequest); pServer.AddJsonRPCHandler("voice_signaling_request", Handle_VoiceSignalingRequest); } } @@ -83,28 +83,75 @@ namespace WebRtcVoice private bool Handle_ProvisionVoiceAccountRequest(OSDMap pJson, ref JsonRpcResponse pResponse) { + bool ret = false; m_log.DebugFormat("{0} Handle_ProvisionVoiceAccountRequest", LogHeader); if (m_MessageDetails) m_log.DebugFormat("{0} PVAR: req={1}", LogHeader, pJson.ToString()); - OSDMap resp = m_WebRtcVoiceService.ProvisionVoiceAccountRequest(pJson, UUID.Zero, null).Result; - pResponse = new JsonRpcResponse(); - pResponse.Result = resp; - if (m_MessageDetails) m_log.DebugFormat("{0} PVAR: resp={1}", LogHeader, resp.ToString()); + if (pJson.ContainsKey("params") && pJson["params"] is OSDMap paramsMap) + { + OSDMap request = paramsMap.ContainsKey("request") ? paramsMap["request"] as OSDMap : null; + UUID userID = paramsMap.ContainsKey("userID") ? paramsMap["userID"].AsUUID() : UUID.Zero; + UUID sceneID = paramsMap.ContainsKey("scene") ? paramsMap["scene"].AsUUID() : UUID.Zero; - return true; + try + { + if (m_WebRtcVoiceService is null) + { + m_log.ErrorFormat("{0} PVAR: no local service", LogHeader); + return false; + } + OSDMap resp = m_WebRtcVoiceService.ProvisionVoiceAccountRequest(request, userID, sceneID).Result; + + pResponse = new JsonRpcResponse(); + pResponse.Result = resp; + if (m_MessageDetails) m_log.DebugFormat("{0} PVAR: resp={1}", LogHeader, resp.ToString()); + ret = true; + } + catch (Exception e) + { + m_log.ErrorFormat("{0} PVAR: exception {1}", LogHeader, e); + } + } + else + { + m_log.ErrorFormat("{0} PVAR: missing parameters", LogHeader); + } + return ret; } private bool Handle_VoiceSignalingRequest(OSDMap pJson, ref JsonRpcResponse pResponse) { - m_log.DebugFormat("{0} Handle_VoiceSignalingRequest", LogHeader); - if (m_MessageDetails) m_log.DebugFormat("{0} VSR: req={1}", LogHeader, pJson.ToString()); + bool ret = false; + if (pJson.ContainsKey("params") && pJson["params"] is OSDMap paramsMap) + { + m_log.DebugFormat("{0} Handle_VoiceSignalingRequest", LogHeader); + if (m_MessageDetails) m_log.DebugFormat("{0} VSR: req={1}", LogHeader, paramsMap.ToString()); - OSDMap resp = m_WebRtcVoiceService.VoiceSignalingRequest(pJson, UUID.Zero, null).Result; - pResponse = new JsonRpcResponse(); - pResponse.Result = resp; - if (m_MessageDetails) m_log.DebugFormat("{0} VSR: resp={1}", LogHeader, resp.ToString()); + OSDMap request = paramsMap.ContainsKey("request") ? paramsMap["request"] as OSDMap : null; + UUID userID = paramsMap.ContainsKey("userID") ? paramsMap["userID"].AsUUID() : UUID.Zero; + UUID sceneID = paramsMap.ContainsKey("scene") ? paramsMap["scene"].AsUUID() : UUID.Zero; - return true; + try + { + OSDMap resp = m_WebRtcVoiceService.VoiceSignalingRequest(request, userID, sceneID).Result; + + pResponse = new JsonRpcResponse(); + pResponse.Result = resp; + if (m_MessageDetails) m_log.DebugFormat("{0} VSR: resp={1}", LogHeader, resp.ToString()); + + ret = true; + } + catch (Exception e) + { + m_log.ErrorFormat("{0} VSR: exception {1}", LogHeader, e); + } + } + else + { + m_log.ErrorFormat("{0} VSR: missing parameters", LogHeader); + } + + return ret; } } } diff --git a/WebRtcVoice/WebRtcVoiceServiceConnector.cs b/WebRtcVoice/WebRtcVoiceServiceConnector.cs index 81e4998..236231d 100644 --- a/WebRtcVoice/WebRtcVoiceServiceConnector.cs +++ b/WebRtcVoice/WebRtcVoiceServiceConnector.cs @@ -21,44 +21,183 @@ using OpenMetaverse.StructuredData; using log4net; using Nini.Config; +using OSHttpServer; namespace WebRtcVoice { - // Class that provides the local IWebRtcVoiceService interface to the XMLRPC Robust + // Class that provides the local IWebRtcVoiceService interface to the JsonRPC Robust // server. This is used by the region servers to talk to the Robust server. public class WebRtcVoiceServiceConnector : IWebRtcVoiceService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly string LogHeader = "[WEBRTC VOICE SERVICE CONNECTOR]"; + private bool m_Enabled = false; + private bool m_MessageDetails = false; + private IConfigSource m_Config; - public WebRtcVoiceServiceConnector(IConfigSource config) + string m_serverURI = "http://localhost:8080"; + + public WebRtcVoiceServiceConnector(IConfigSource pConfig) { - // Nothing to do + m_Config = pConfig; + IConfig moduleConfig = m_Config.Configs["WebRtcVoice"]; + + if (moduleConfig is not null) + { + m_Enabled = moduleConfig.GetBoolean("Enabled", false); + if (m_Enabled) + { + m_serverURI = moduleConfig.GetString("WebRtcVoiceServerURI", string.Empty); + if (string.IsNullOrWhiteSpace(m_serverURI)) + { + m_log.ErrorFormat("{0} WebRtcVoiceServiceConnector enabled but no WebRtcVoiceServerURI specified", LogHeader); + m_Enabled = false; + } + else + { + m_log.InfoFormat("{0} WebRtcVoiceServiceConnector enabled", LogHeader); + } + + m_MessageDetails = moduleConfig.GetBoolean("MessageDetails", false); + } + } + } - public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, IScene pScene) + // Create a local viewer session. This gets a local viewer session ID that is + // later changed when the ProvisionVoiceAccountRequest response is returned + // so that the viewer session ID is the same here as from the WebRTC service. + public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, UUID pSceneID) { - throw new NotImplementedException(); + m_log.DebugFormat("{0} CreateViewerSession", LogHeader); + return new VoiceViewerSession(this, pUserID, pSceneID); } - public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { - throw new NotImplementedException(); + m_log.DebugFormat("{0} ProvisionVoiceAccountRequest without ViewerSession. uID={1}, sID={2}", LogHeader, pUserID, pSceneID); + return null; } - public Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene) + // Received a ProvisionVoiceAccountRequest from a viewer. Forward it to the WebRTC service. + public async Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { - throw new NotImplementedException(); + m_log.DebugFormat("{0} VoiceSignalingRequest. uID={1}, sID={2}", LogHeader, pUserID, pSceneID); + OSDMap req = new OSDMap() + { + { "request", pRequest }, + { "userID", pUserID.ToString() }, + { "scene", pSceneID.ToString() } + }; + var resp = await JsonRpcRequest("provision_voice_account_request", m_serverURI, req); + + // Kludge to sync the viewer session number in our IVoiceViewerSession with the one from the WebRTC service. + if (resp.ContainsKey("viewer_session")) + { + string otherViewerSessionId = resp["viewer_session"].AsString(); + m_log.DebugFormat("{0} ProvisionVoiceAccountRequest: syncing viewSessionID. old={1}, new={2}", + LogHeader, pVSession.ViewerSessionID, otherViewerSessionId); + VoiceViewerSession.UpdateViewerSessionId(pVSession, otherViewerSessionId); + } + + return resp; } - public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { - throw new NotImplementedException(); + m_log.DebugFormat("{0} VoiceSignalingRequest without ViewerSession. uID={1}, sID={2}", LogHeader, pUserID, pSceneID); + return null; } - public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene) + public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { - throw new NotImplementedException(); + m_log.DebugFormat("{0} VoiceSignalingRequest. uID={1}, sID={2}", LogHeader, pUserID, pSceneID); + OSDMap req = new OSDMap() + { + { "request", pRequest }, + { "userID", pUserID.ToString() }, + { "scene", pSceneID.ToString() } + }; + return JsonRpcRequest("voice_signaling_request", m_serverURI, req); } + + public Task JsonRpcRequest(string method, string uri, OSDMap pParams) + { + string jsonId = UUID.Random().ToString(); + + if(string.IsNullOrWhiteSpace(uri)) + return null; + + TaskCompletionSource tcs = new TaskCompletionSource(); + _ = Task.Run(() => + { + OSDMap request = new() + { + { "jsonrpc", OSD.FromString("2.0") }, + { "id", OSD.FromString(jsonId) }, + { "method", OSD.FromString(method) }, + { "params", pParams } + }; + + OSDMap outerResponse = null; + try + { + if (m_MessageDetails) m_log.DebugFormat("{0}: request: {1}", LogHeader, request); + outerResponse = WebUtil.PostToService(uri, request, 10000, true); + if (m_MessageDetails) m_log.DebugFormat("{0}: response: {1}", LogHeader, outerResponse); + } + catch (Exception e) + { + m_log.ErrorFormat("{0}: JsonRpc request '{1}' to {2} failed: {3}", LogHeader, method, uri, e); + m_log.DebugFormat("{0}: request: {1}", LogHeader, request); + tcs.SetResult(new OSDMap() + { + { "error", OSD.FromString(e.Message) } + }); + } + + OSD osdtmp; + if (!outerResponse.TryGetValue("_Result", out osdtmp) || (osdtmp is not OSDMap)) + { + string errm = String.Format("JsonRpc request '{0}' to {1} returned an invalid response: {2}", + method, uri, OSDParser.SerializeJsonString(outerResponse)); + m_log.ErrorFormat(errm); + tcs.SetResult(new OSDMap() + { + { "error", errm } + }); + } + + OSDMap response = osdtmp as OSDMap; + if (response.TryGetValue("error", out osdtmp)) + { + string errm = String.Format("JsonRpc request '{0}' to {1} returned an error: {2}", + method, uri, OSDParser.SerializeJsonString(osdtmp)); + m_log.ErrorFormat(errm); + tcs.SetResult(new OSDMap() + { + { "error", errm } + }); + } + + OSDMap resultmap = null; + if (!response.TryGetValue("result", out osdtmp) || (osdtmp is not OSDMap)) + { + string errm = String.Format("JsonRpc request '{0}' to {1} returned result as non-OSDMap: {2}", + method, uri, OSDParser.SerializeJsonString(outerResponse)); + m_log.ErrorFormat(errm); + tcs.SetResult(new OSDMap() + { + { "error", errm } + }); + } + resultmap = osdtmp as OSDMap; + + tcs.SetResult(resultmap); + }); + + return tcs.Task; + } + } } \ No newline at end of file diff --git a/WebRtcVoiceRegionModule/WebRtcVoiceRegionModule.cs b/WebRtcVoiceRegionModule/WebRtcVoiceRegionModule.cs index e42a631..d4b7fff 100644 --- a/WebRtcVoiceRegionModule/WebRtcVoiceRegionModule.cs +++ b/WebRtcVoiceRegionModule/WebRtcVoiceRegionModule.cs @@ -223,13 +223,10 @@ namespace WebRtcVoice { OSD tmp = OSDParser.DeserializeLLSDXml(inputStream); if (_MessageDetails) m_log.DebugFormat("{0}[ProvisionVoice]: Request: {1}", logHeader, tmp.ToString()); - - if (tmp is OSDMap) - { - map = (OSDMap)tmp; - } + map = tmp as OSDMap; } } + if (map is null) { m_log.ErrorFormat("{0}[ProvisionVoice]: No request data found. Agent={1}", logHeader, agentID.ToString()); @@ -258,7 +255,7 @@ namespace WebRtcVoice } // The checks passed. Send the request to the voice service. - OSDMap resp = voiceService.ProvisionVoiceAccountRequest(map, agentID, scene).Result; + OSDMap resp = voiceService.ProvisionVoiceAccountRequest(map, agentID, scene.RegionInfo.RegionID).Result; if (_MessageDetails) m_log.DebugFormat("{0}[ProvisionVoice]: response: {1}", logHeader, resp.ToString()); @@ -288,7 +285,7 @@ namespace WebRtcVoice if (inputStream.Length > 0) { OSD tmp = OSDParser.DeserializeLLSDXml(inputStream); - if (_MessageDetails) m_log.DebugFormat("{0}[VoiceSignaling]: Request: {1}", logHeader, tmp.ToString()); + if (_MessageDetails) m_log.DebugFormat("{0}[VoiceSignalingRequest]: Request: {1}", logHeader, tmp.ToString()); if (tmp is OSDMap) { @@ -298,7 +295,7 @@ namespace WebRtcVoice } if (map is null) { - m_log.ErrorFormat("{0}[VoiceSignaling]: No request data found. Agent={1}", logHeader, agentID.ToString()); + m_log.ErrorFormat("{0}[VoiceSignalingRequest]: No request data found. Agent={1}", logHeader, agentID.ToString()); response.StatusCode = (int)HttpStatusCode.NoContent; return; } @@ -321,9 +318,10 @@ namespace WebRtcVoice return; } - OSDMap resp = voiceService.VoiceSignalingRequest(map, agentID, scene).Result; + OSDMap resp = voiceService.VoiceSignalingRequest(map, agentID, scene.RegionInfo.RegionID).Result; + if (_MessageDetails) m_log.DebugFormat("{0}[VoiceSignalingRequest]: Response: {1}", logHeader, resp); - // TODO: check for erros and package the response + // TODO: check for errors and package the response response.StatusCode = (int)HttpStatusCode.OK; response.RawBuffer = Util.UTF8.GetBytes(""); diff --git a/WebRtcVoiceServiceModule/WebRtcVoiceServiceModule.cs b/WebRtcVoiceServiceModule/WebRtcVoiceServiceModule.cs index 06e97c7..a2247df 100644 --- a/WebRtcVoiceServiceModule/WebRtcVoiceServiceModule.cs +++ b/WebRtcVoiceServiceModule/WebRtcVoiceServiceModule.cs @@ -200,7 +200,7 @@ namespace WebRtcVoice // IWebRtcVoiceService // IWebRtcVoiceService.ProvisionVoiceAccountRequest - public async Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public async Task ProvisionVoiceAccountRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { OSDMap response = null; IVoiceViewerSession vSession = null; @@ -222,13 +222,13 @@ namespace WebRtcVoice if (channelType == "local") { // TODO: check if this userId is making a new session (case that user is reconnecting) - vSession = m_spatialVoiceService.CreateViewerSession(pRequest, pUserID, pScene); + vSession = m_spatialVoiceService.CreateViewerSession(pRequest, pUserID, pSceneID); VoiceViewerSession.AddViewerSession(vSession); } else { // TODO: check if this userId is making a new session (case that user is reconnecting) - vSession = m_nonSpatialVoiceService.CreateViewerSession(pRequest, pUserID, pScene); + vSession = m_nonSpatialVoiceService.CreateViewerSession(pRequest, pUserID, pSceneID); VoiceViewerSession.AddViewerSession(vSession); } } @@ -239,13 +239,13 @@ namespace WebRtcVoice } if (vSession is not null) { - response = await vSession.VoiceService.ProvisionVoiceAccountRequest(vSession, pRequest, pUserID, pScene); + response = await vSession.VoiceService.ProvisionVoiceAccountRequest(vSession, pRequest, pUserID, pSceneID); } return response; } // IWebRtcVoiceService.VoiceSignalingRequest - public async Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, IScene pScene) + public async Task VoiceSignalingRequest(OSDMap pRequest, UUID pUserID, UUID pSceneID) { OSDMap response = null; IVoiceViewerSession vSession = null; @@ -255,7 +255,7 @@ namespace WebRtcVoice string viewerSessionId = pRequest["viewer_session"].AsString(); if (VoiceViewerSession.TryGetViewerSession(viewerSessionId, out vSession)) { - response = await vSession.VoiceService.VoiceSignalingRequest(vSession, pRequest, pUserID, pScene); + response = await vSession.VoiceService.VoiceSignalingRequest(vSession, pRequest, pUserID, pSceneID); } else { @@ -270,18 +270,18 @@ namespace WebRtcVoice } // This module should never be called with this signature - public Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene) + public Task ProvisionVoiceAccountRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { throw new NotImplementedException(); } // This module should never be called with this signature - public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, IScene pScene) + public Task VoiceSignalingRequest(IVoiceViewerSession pVSession, OSDMap pRequest, UUID pUserID, UUID pSceneID) { throw new NotImplementedException(); } - public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, IScene pScene) + public IVoiceViewerSession CreateViewerSession(OSDMap pRequest, UUID pUserID, UUID pSceneID) { throw new NotImplementedException(); }