private async Task <bool> RunLocalizationSessionAsync(ISpatialLocalizer localizer, ISpatialLocalizationSettings settings, SpatialCoordinateSystemParticipant participant) { DebugLog($"Creating localization session: {participant.SocketEndpoint.Address}, {settings.ToString()}, {localizer.ToString()}"); if (!localizer.TryCreateLocalizationSession(participant, settings, out ISpatialLocalizationSession currentLocalizationSession)) { Debug.LogError($"Failed to create an ISpatialLocalizationSession from localizer {localizer.SpatialLocalizerId}"); return(false); } using (currentLocalizationSession) { DebugLog($"Setting localization session for participant: {participant.SocketEndpoint.Address}, {currentLocalizationSession.ToString()}"); participant.CurrentLocalizationSession = currentLocalizationSession; try { DebugLog($"Starting localization: {participant.SocketEndpoint.Address}, {currentLocalizationSession.ToString()}"); // Some SpatialLocalizers/SpatialCoordinateServices key off of token cancellation for their logic flow. // Therefore, we need to create a cancellation token even it is never actually cancelled by the SpatialCoordinateSystemManager. using (var localizeCTS = new CancellationTokenSource()) { var coordinate = await currentLocalizationSession.LocalizeAsync(localizeCTS.Token); participant.Coordinate = coordinate; } } finally { participant.CurrentLocalizationSession = null; } } currentLocalizationSession = null; return(participant.Coordinate != null); }
/// <inheritdoc /> public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, WorldAnchorSpatialLocalizationSettings settings, out ISpatialLocalizationSession session) { session = new LocalizationSession(this, settings, peerConnection); return(true); }
public abstract bool TryCreateLocalizationSession(IPeerConnection peerConnection, TSpatialLocalizationSettings settings, out ISpatialLocalizationSession session);
bool ISpatialLocalizer.TryCreateLocalizationSession(IPeerConnection peerConnection, ISpatialLocalizationSettings settings, out ISpatialLocalizationSession session) { if (settings is TSpatialLocalizationSettings specificSettings) { return(TryCreateLocalizationSession(peerConnection, specificSettings, out session)); } else { throw new ArgumentException(nameof(settings)); } }
public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, SpatialAnchorsConfiguration settings, out ISpatialLocalizationSession session) { if ((string.IsNullOrWhiteSpace(settings.AccountId) || string.IsNullOrWhiteSpace(settings.AccountKey)) && string.IsNullOrWhiteSpace(settings.AuthenticationToken) && string.IsNullOrWhiteSpace(settings.AccessToken)) { Debug.LogError("Authentication method not configured for Azure Spatial Anchors, ensure you configured AccountID and AccountKey, or Authentication Token, or Access Token.", this); session = null; return(false); } #if !SPATIALALIGNMENT_ASA Debug.LogError("Attempting to use SpatialAnchorLocalizer but ASA is not enabled for this build"); session = null; return(false); #elif UNITY_WSA && SPATIALALIGNMENT_ASA session = new SpatialCoordinateLocalizationSession(this, new SpatialAnchorsUWPCoordinateService(settings), settings, peerConnection); return(true); #elif UNITY_ANDROID && SPATIALALIGNMENT_ASA session = new SpatialCoordinateLocalizationSession(this, new SpatialAnchorsAndroidCoordinateService(settings), settings, peerConnection); return(true); #elif UNITY_IOS && SPATIALALIGNMENT_ASA session = new SpatialCoordinateLocalizationSession(this, new SpatialAnchorsIOSCoordinateService(settings), settings, peerConnection); return(true); #else Debug.LogError("AzureSpatialAnchors is not supported on the current platform."); session = null; return(false); #endif }
/// <inheritdoc /> public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, MarkerVisualDetectorLocalizationSettings settings, out ISpatialLocalizationSession session) { markerDetector = (markerDetector == null) ? MarkerDetector as IMarkerDetector : markerDetector; session = new LocalizationSession(this, settings, peerConnection, debugLogging); return(true); }
public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, SpatialAnchorsConfiguration settings, out ISpatialLocalizationSession session) { if ((string.IsNullOrWhiteSpace(settings.AccountId) || string.IsNullOrWhiteSpace(settings.AccountKey)) && string.IsNullOrWhiteSpace(settings.AuthenticationToken) && string.IsNullOrWhiteSpace(settings.AccessToken)) { Debug.LogError("Authentication method not configured for Azure Spatial Anchors, ensure you configured AccountID and AccountKey, or Authentication Token, or Access Token.", this); session = null; return(false); } session = new SpatialCoordinateLocalizationSession(this, new SpatialAnchorsCoordinateService(this.gameObject, settings), settings, peerConnection); return(session != null); }
/// <inheritdoc /> public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, MarkerVisualLocalizationSettings settings, out ISpatialLocalizationSession session) { session = null; if (markerVisual == null) { markerVisualGameObject = Instantiate(MarkerVisualPrefab); markerVisual = markerVisualGameObject.GetComponentInChildren <IMarkerVisual>(); if (markerVisual == null) { Debug.LogError("Marker Visual Prefab did not contain an IMarkerVisual component."); return(false); } } if (cameraTransform == null) { cameraTransform = Camera.main.transform; if (cameraTransform == null) { Debug.LogError("Unable to determine camera's location in the scene."); return(false); } } session = new LocalizationSession(this, settings, peerConnection, debugLogging); return(true); }
public LocalizationSessionDetails(ISpatialLocalizationSession session, SpatialCoordinateSystemParticipant participant) { this.Session = session; this.Participant = participant; this.CompletionSource = new TaskCompletionSource <bool>(); }
public override bool TryCreateLocalizationSession(IPeerConnection peerConnection, MarkerDetectorLocalizationSettings settings, out ISpatialLocalizationSession session) { session = new LocalizationSession(this, settings); return(true); }