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); } }