예제 #1
0
        private void _UpdateCloudAnchorRequest(CloudAnchorRequest request, bool isNewRequest = false)
        {
            var cloudState = request.NativeSession.AnchorApi.GetCloudAnchorState(request.AnchorHandle);

            if (cloudState == ApiCloudAnchorState.Success)
            {
                var result = new CloudAnchorResult()
                {
                    Response = CloudServiceResponse.Success,
                    Anchor   = XPAnchor.Factory(request.NativeSession, request.AnchorHandle)
                };

                request.OnTaskComplete(result);
                request.IsComplete = true;
            }
            else if (cloudState != ApiCloudAnchorState.TaskInProgress)
            {
                request.NativeSession.AnchorApi.Detach(request.AnchorHandle);
                request.NativeSession.AnchorApi.Release(request.AnchorHandle);

                var result = new CloudAnchorResult()
                {
                    Response = cloudState.ToCloudServiceResponse(),
                    Anchor   = null
                };

                request.OnTaskComplete(result);
                request.IsComplete = true;
            }
            else if (isNewRequest)
            {
                m_CloudAnchorRequests.Add(request);
            }
        }
        protected internal void _CancelCloudAnchorRequest(String cloudAnchorId)
        {
            bool cancelledCloudAnchorRequest = false;

            foreach (var request in m_CloudAnchorRequests)
            {
                if (request.CloudAnchorId == null || !request.CloudAnchorId.Equals(cloudAnchorId))
                {
                    continue;
                }

                request.NativeSession.AnchorApi.Detach(request.AnchorHandle);
                request.NativeSession.AnchorApi.Release(request.AnchorHandle);

                var result = new CloudAnchorResult()
                {
                    // TODO (b/128930901): Change to "ErrorRequestCancelled" for API promotion.
                    Response = CloudServiceResponse.ErrorCloudIdNotFound,
                    Anchor   = null,
                };

                request.OnTaskComplete(result);
                request.IsComplete          = true;
                cancelledCloudAnchorRequest = true;
            }

            m_CloudAnchorRequests.RemoveAll(x => x.IsComplete);

            if (!cancelledCloudAnchorRequest)
            {
                Debug.LogWarning("Didn't find pending operation for cloudAnchorId: " +
                                 cloudAnchorId);
            }
        }
        private void UpdateCloudAnchorRequest(
            CloudAnchorRequest request, bool isNewRequest = false)
        {
            var cloudState =
                request.NativeSession.AnchorApi.GetCloudAnchorState(request.AnchorHandle);

            if (cloudState == ApiCloudAnchorState.Success)
            {
                XPAnchor             xpAnchor = null;
                CloudServiceResponse response = CloudServiceResponse.Success;
                try
                {
                    xpAnchor = XPAnchor.Factory(request.NativeSession, request.AnchorHandle);
                }
                catch (Exception e)
                {
                    Debug.LogError("Failed to create XP Anchor: " + e.Message);
                    response = CloudServiceResponse.ErrorInternal;
                }

                var result = new CloudAnchorResult()
                {
                    Response = response,
                    Anchor   = xpAnchor,
                };

                request.OnTaskComplete(result);
                request.IsComplete = true;
            }
            else if (cloudState != ApiCloudAnchorState.TaskInProgress)
            {
                if (request.NativeSession != null && !request.NativeSession.IsDestroyed)
                {
                    request.NativeSession.AnchorApi.Detach(request.AnchorHandle);
                }

                AnchorApi.Release(request.AnchorHandle);

                var result = new CloudAnchorResult()
                {
                    Response = cloudState.ToCloudServiceResponse(),
                    Anchor   = null
                };

                request.OnTaskComplete(result);
                request.IsComplete = true;
            }
            else if (isNewRequest)
            {
                _cloudAnchorRequests.Add(request);
            }
        }
        protected internal void CancelCloudAnchorRequest(string cloudAnchorId)
        {
            bool cancelledCloudAnchorRequest = false;

            foreach (var request in _cloudAnchorRequests)
            {
                if (request.CloudAnchorId == null || !request.CloudAnchorId.Equals(cloudAnchorId))
                {
                    continue;
                }

                if (request.NativeSession != null && !request.NativeSession.IsDestroyed)
                {
                    request.NativeSession.AnchorApi.Detach(request.AnchorHandle);
                }

                AnchorApi.Release(request.AnchorHandle);

                var result = new CloudAnchorResult()
                {
                    Response = CloudServiceResponse.ErrorRequestCancelled,
                    Anchor   = null,
                };

                request.OnTaskComplete(result);
                request.IsComplete          = true;
                cancelledCloudAnchorRequest = true;
            }

            _cloudAnchorRequests.RemoveAll(x => x.IsComplete);

            if (!cancelledCloudAnchorRequest)
            {
                Debug.LogWarning("Didn't find pending operation for cloudAnchorId: " +
                                 cloudAnchorId);
            }
        }