/// <summary>
            /// Handles when a request queries the attribute names.
            /// </summary>
            public void ProcessRequest()
            {
                if (this.request == null)
                {
                    return;
                }

                switch (this.request.RequestState)
                {
                case Request.State.REQUEST_ATTRIB_NAMES:
                    this.RequestAttributeNamesAsync();
                    break;

                case Request.State.LISTENING_ATTRIB_NAMES:
                    this.ListenAttributeNamesResponse();
                    break;

                case Request.State.REQUEST_ATTRIB_VALUES:
                    this.RequestAttributeValuesAsync();
                    break;

                case Request.State.LISTENING_ATTRIB_VALUES:
                    this.ListenAttributeValuesResponse();
                    break;

                case Request.State.DONE:
                    this.request?.Callback?.Invoke(MLResult.Create(this.request.ResultCode));

                    //// Removes the profile if something when wrong with the request.
                    if (!MLResult.IsOK(this.request.ResultCode))
                    {
                        this.request = null;
                        MLIdentity.RemoveProfile(this);
                    }

                    this.request = null;
                    break;

                default:
                    break;
                }
            }
            /// <summary>
            /// Fetch the specified attributes and callback when result is known.
            /// </summary>
            /// <param name="callback">The callback to notify when the CurrentRequest is complete.</param>
            /// <returns>
            /// MLResult.Result will be <c>MLResult.Code.Ok</c> if the operation completed successfully.
            /// MLResult.Result will be <c>MLResult.Code.UnspecifiedFailure</c> if there was an internal error.
            /// </returns>
            public MLResult Fetch(Request.RequestAttibutesDelegate callback)
            {
                if (this.CurrentRequest != null)
                {
                    MLResult result = MLResult.Create(MLResult.Code.UnspecifiedFailure, "Already fetching attributes");
                    MLPluginLog.ErrorFormat("MLIdentity.Profile.Fetch failed. Reason: {0}", result);
                    return(result);
                }

                this.CurrentRequest = new Request
                {
                    Callback     = callback,
                    ResultCode   = MLResult.Code.Pending,
                    RequestState = Request.State.REQUEST_ATTRIB_NAMES,
                };

                MLIdentity.AddProfile(this);

                return(MLResult.Create(MLResult.Code.Ok));
            }
Exemplo n.º 3
0
        /// <summary>
        /// Provides the string value for any MLResult.Code.
        /// </summary>
        /// <param name="resultCode">The code to convert into a string value.</param>
        /// <returns>The string value of the given MLResult.Code.</returns>
        public static string CodeToString(MLResult.Code resultCode)
        {
            string codeString = string.Empty;

            switch ((CodePrefix)((int)resultCode >> 16))
            {
            case CodePrefix.MLResultGlobal:
            case CodePrefix.MLSnapshotResult:
                codeString = Marshal.PtrToStringAnsi(MagicLeapNativeBindings.MLSnapshotGetResultString(resultCode));
                break;

            case CodePrefix.MLAudioResult:
                codeString = Marshal.PtrToStringAnsi(MLAudio.GetResultString(resultCode));
                break;

            case CodePrefix.MLMediaDRMResult:
            case CodePrefix.MLMediaGenericResult:
            case CodePrefix.MLMediaPlayerResult:
            case CodePrefix.MLMediaResult:
                codeString = Marshal.PtrToStringAnsi(MLMediaPlayer.GetResultString(resultCode));
                break;

            case CodePrefix.MLDispatchResult:
                codeString = Marshal.PtrToStringAnsi(MLDispatch.GetResultString(resultCode));
                break;

            case CodePrefix.MLIdentityResult:
                codeString = Marshal.PtrToStringAnsi(MLIdentity.GetResultString(resultCode));
                break;

            case CodePrefix.MLPassableWorldResult:
                codeString = Marshal.PtrToStringAnsi(MLPersistentCoordinateFrames.GetResultString(resultCode));
                break;

            case CodePrefix.MLTokenAgentResult:
                codeString = Marshal.PtrToStringAnsi(MLTokenAgent.GetResultString(resultCode));
                break;

            case CodePrefix.MLPrivilegesResult:
                codeString = Marshal.PtrToStringAnsi(MLPrivileges.GetResultString(resultCode));
                break;

            case CodePrefix.MLContactsResult:
                codeString = Marshal.PtrToStringAnsi(MLContacts.GetResultString(resultCode));
                break;

            case CodePrefix.MLLocationResult:
                codeString = Marshal.PtrToStringAnsi(MLLocation.GetResultString(resultCode));
                break;

            case CodePrefix.MLNetworkingResult:
                codeString = Marshal.PtrToStringAnsi(MLNetworkingNativeBindings.MLNetworkingGetResultString(resultCode));
                break;

            case CodePrefix.MLMovementResult:
                codeString = Marshal.PtrToStringAnsi(MLMovement.GetResultString(resultCode));
                break;

            case CodePrefix.MLConnectionsResult:
                codeString = Marshal.PtrToStringAnsi(MLConnections.GetResultString(resultCode));
                break;

            case CodePrefix.MLSecureStorageResult:
                codeString = Marshal.PtrToStringAnsi(MLSecureStorageNativeBindings.MLSecureStorageGetResultString(resultCode));
                break;

            case CodePrefix.MLAppConnect:
                codeString = Marshal.PtrToStringAnsi(MLAppConnectNativeBindings.MLAppConnectGetResultString(resultCode));
                break;

            case CodePrefix.MLWebRTC:
                codeString = Marshal.PtrToStringAnsi(MLWebRTC.NativeBindings.MLWebRTCGetResultString(resultCode));
                break;

            case CodePrefix.MLBluetoothGattResult:
                codeString = Marshal.PtrToStringAnsi(MLBluetoothLE.NativeBindings.MLBluetoothGattGetResultString(resultCode));
                break;

            default:
                // This will catch any unknown/invalid return values.
                codeString = MagicLeapNativeBindings.MLGetResultString(resultCode);
                break;
            }

            return(codeString);
        }