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));
     }
 }
Esempio n. 5
0
        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);
 }