コード例 #1
0
        /// <summary>
        /// Creates TexturedMesh of the head for a given avatar.
        /// If required files (mesh and texture) don't exist on disk, it downloads them from the cloud.
        /// </summary>
        /// <param name="avatarCode">code of the loaded avatar</param>
        /// <param name="withBlendshapes">blendshapes will be added to mesh</param>
        public AsyncRequest <TexturedMesh> GetHeadMeshAsync(string avatarCode, bool withBlendshapes, int detailsLevel = 0)
        {
            var request = new AsyncRequest <TexturedMesh>(AvatarSdkMgr.Str(Strings.GettingHeadMesh));

            AvatarSdkMgr.SpawnCoroutine(GetHeadMeshFunc(avatarCode, withBlendshapes, detailsLevel, request));
            return(request);
        }
コード例 #2
0
    /// <summary> Build a async request for a one-shot clip. This request handles creation, downloading, notifications and deletion. </summary>
    public static AsyncRequest Make(string body, string voice, string savePath)
    {
        //Build request
        AsyncRequest request = new AsyncRequest();

        request.status          = Status.BuildRequest;
        request.saveDirectory   = Path.GetDirectoryName(savePath);
        request.fileName        = Path.GetFileName(savePath);
        request.deleteClipAtEnd = true;
        request.requestName     = "OneShot > " + request.fileName.Remove(request.fileName.Length - 4);

        //Generate placeholder
        request.status = Status.GeneratePlaceHolder;
        request.GeneratePlaceHolder();

        //Send request
        request.status = Status.SendDataToAPI;
        ClipPatch.Data data = new ClipPatch.Data(GetTemporaryName(), body, voice);
        request.currentTask = APIBridge.CreateClip(data, false, (ClipStatus status, Error error) =>
                                                   { request.clipUUID = status.id; RegisterRequestToPool(request); });

        //Add request to the pending pool
        Resources.instance.requests.Add(request);
        EditorUtility.SetDirty(Resources.instance);
        Resemble_Window.RefreshPoolList();

        //Return the request
        return(request);
    }
コード例 #3
0
ファイル: AvatarMakerWindow.cs プロジェクト: Klanly/Jennicam
        private IEnumerator GetAllAvatarsRoutine(int maxItems, AsyncRequest <GalleryAvatar[]> request)
        {
            var avatarsRequest = avatarProvider.GetAllAvatarsAsync(maxItems);

            yield return(AwaitRoutine(avatarsRequest, null));

            if (avatarsRequest.IsError)
            {
                yield break;
            }

            GalleryAvatar[] avatars = new GalleryAvatar[avatarsRequest.Result.Length];
            for (int i = 0; i < avatars.Length; i++)
            {
                string avatarCode = avatarsRequest.Result[i];
                string avatarName = ReadAvatarNameByCode(avatarCode);
                avatars[i] = new GalleryAvatar()
                {
                    name = avatarName, code = avatarCode, state = GetAvatarState(avatarCode)
                };
            }

            request.Result = avatars;
            request.IsDone = true;
        }
コード例 #4
0
ファイル: AvatarMakerWindow.cs プロジェクト: Klanly/Jennicam
        protected AsyncRequest <GalleryAvatar[]> GetAllAvatarsAsync(int maxItems)
        {
            var request = new AsyncRequest <GalleryAvatar[]>(AvatarSdkMgr.Str(Strings.GettingAvatarState));

            EditorRunner.instance.Run(GetAllAvatarsRoutine(maxItems, request));
            return(request);
        }
コード例 #5
0
        protected override AsyncRequest <GalleryAvatar[]> GetAllAvatarsAsync(int maxItems)
        {
            var request = new AsyncRequest <GalleryAvatar[]>(AvatarSdkMgr.Str(Strings.GettingAvatarState));

            AvatarSdkMgr.SpawnCoroutine(GetAllAvatarsFunc(maxItems, request));
            return(request);
        }
コード例 #6
0
        /// <summary>
        /// Requests all created avatars that created by current user and determinates states for them
        /// </summary>
        private IEnumerator GetAllAvatarsFunc(int maxItems, AsyncRequest <GalleryAvatar[]> request)
        {
            Connection connection     = (avatarProvider as CloudAvatarProvider).Connection;
            var        avatarsRequest = connection.GetAvatarsAsync(maxItems);

            yield return(Await(avatarsRequest, null));

            if (avatarsRequest.IsError)
            {
                yield break;
            }

            GalleryAvatar[] avatars = new GalleryAvatar[avatarsRequest.Result.Length];
            for (int i = 0; i < avatars.Length; i++)
            {
                AvatarData avatarData = avatarsRequest.Result[i];
                avatars[i] = new GalleryAvatarCloud()
                {
                    code = avatarData.code, state = GetAvatarState(avatarData), avatarData = avatarData
                };
            }

            request.Result = avatars;
            request.IsDone = true;
        }
コード例 #7
0
        /// <summary>
        /// Requests haircuts identities from the server or takes them from the cache
        /// </summary>
        private AsyncRequest <string[]> GetHaircutsIdsAsync(string avatarCode)
        {
            var request = new AsyncRequest <string[]>();

            StartCoroutine(GetHaircutsIdsFunc(avatarCode, request));
            return(request);
        }
コード例 #8
0
        /// <summary>
        /// Returns identities of all haircuts available for the avatar
        /// </summary>
        public AsyncRequest <string[]> GetHaircutsIdAsync(string avatarCode)
        {
            var request = new AsyncRequest <string[]>(AvatarSdkMgr.Str(Strings.GettingAvailableHaircuts));

            AvatarSdkMgr.SpawnCoroutine(GetHaircutsIdFunc(avatarCode, request));
            return(request);
        }
コード例 #9
0
        /// <summary>
        /// Waits while the avatar is being calulated. Calculations start automatically after the photo was loaded to the server.
        /// </summary>
        public AsyncRequest StartAndAwaitAvatarCalculationAsync(string avatarCode)
        {
            var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GeneratingAvatar));

            AvatarSdkMgr.SpawnCoroutine(StartAndAwaitAvatarCalculationFunc(avatarCode, request));
            return(request);
        }
コード例 #10
0
        protected override IEnumerator LoadAssetAsync()
        {
            AsyncRequest request = m_Pool.LoadBundleAsyn(m_LoadPath, true);

            yield return(request);

            SEUResources bundleRes = request.resource;

            if (bundleRes != null)
            {
                AddDependenceResources(bundleRes);
                AssetBundle bundle = bundleRes.asset as AssetBundle;
                if (bundle != null)
                {
                    AssetBundleRequest bdRequest = bundle.LoadAssetAsync(System.IO.Path.GetFileName(m_LoadPath), m_Type);
                    yield return(bdRequest);

                    if (m_Asset == null)
                    {
                        m_Asset = bdRequest.asset;
                    }
                }
            }
            LogResult();
        }
コード例 #11
0
ファイル: XWebClient.cs プロジェクト: Bumbadawg/extraQL
 public void DownloadDataAsync(Uri url, object state)
 {
     if (this.DownloadDataCompleted == null)
     return;
       var request = new AsyncRequest(url, state);
       ThreadPool.QueueUserWorkItem(this.DownloadDataWithTimeout, request);
 }
コード例 #12
0
        /// <summary>
        /// Creates TexturedMesh of the haircut.
        /// If any of the required files doesn't exist it downloads them from the cloud and saves on the disk.
        /// </summary>
        /// <param name="avatarCode">Avatar code</param>
        /// <param name="haircutName">Haircut identity</param>
        public AsyncRequest <TexturedMesh> GetHaircutMeshAsync(string avatarCode, string haircutId)
        {
            var request = new AsyncRequest <TexturedMesh>(AvatarSdkMgr.Str(Strings.GettingHaircutMesh));

            AvatarSdkMgr.SpawnCoroutine(GetHaircutMeshFunc(avatarCode, haircutId, request));
            return(request);
        }
コード例 #13
0
        /// <summary>
        /// Requests server to delete all data permanently and deletes local avatar files.
        /// </summary>
        public AsyncRequest DeleteAvatarAsync(string avatarCode)
        {
            var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.DeletingAvatarFiles));

            AvatarSdkMgr.SpawnCoroutine(DeleteAvatarFunc(avatarCode, request));
            return(request);
        }
コード例 #14
0
        /// <summary>
        /// GetAvatarAsync implementation
        /// </summary>
        private IEnumerator GetAvatarFunc(string avatarCode, AsyncRequest <AvatarData> request)
        {
            if (UseCache && avatarsDataCache.ContainsKey(avatarCode))
            {
                request.Result = avatarsDataCache[avatarCode];
                request.IsDone = true;
                yield break;
            }

            var avatarRequest = connection.GetAvatarAsync(avatarCode);

            yield return(avatarRequest);

            if (avatarRequest.IsError)
            {
                request.SetError(avatarRequest.ErrorMessage);
                yield break;
            }

            if (UseCache && string.Compare(avatarRequest.Result.status.ToLower(), "Completed") == 0)
            {
                avatarsDataCache[avatarCode] = avatarRequest.Result;
            }

            request.Result = avatarRequest.Result;
            request.IsDone = true;
        }
コード例 #15
0
        /// <summary>
        /// Get avatar information by code. Firstly finds data in cache. If there is no data in cache, requests it from the server
        /// </summary>
        private AsyncRequest <AvatarData> GetAvatarAsync(string avatarCode)
        {
            var request = new AsyncRequest <AvatarData>();

            AvatarSdkMgr.SpawnCoroutine(GetAvatarFunc(avatarCode, request));
            return(request);
        }
コード例 #16
0
        /// <summary>
        /// Downloads avatar files and stores them on disk.
        /// </summary>
        /// <param name="avatarCode">Avatar code</param>
        /// <param name="withHaircutPointClouds">If True, haircut point clouds will be downloaded.</param>
        /// <param name="withBlendshapes">If true, blendshapes will be downloaded.</param>
        /// <returns></returns>
        public AsyncRequest MoveAvatarModelToLocalStorageAsync(string avatarCode, bool withHaircutPointClouds, bool withBlendshapes)
        {
            var request = new AsyncRequest <AvatarData>(AvatarSdkMgr.Str(Strings.DownloadingAvatar));

            AvatarSdkMgr.SpawnCoroutine(MoveAvatarModelToLocalStorage(avatarCode, withHaircutPointClouds, withBlendshapes, request));
            return(request);
        }
コード例 #17
0
        private AsyncRequest DownloadAvatarAsync(AvatarData avatar, PipelineType pipelineType)
        {
            var request = new AsyncRequest();

            AvatarSdkMgr.SpawnCoroutine(DownloadAvatarFunc(avatar, pipelineType, request));
            return(request);
        }
コード例 #18
0
        /// <summary>
        /// Downloads from the server haircut preview image and saves it locally.
        /// Note: this method isn't implemented yet.
        /// </summary>
        /// <param name="haircutId">Haircut identity</param>
        public AsyncRequest <byte[]> GetHaircutPreviewAsync(string avatarCode, string haircutId)
        {
            var request = new AsyncRequest <byte[]>(AvatarSdkMgr.Str(Strings.GettingHaircutPreview));

            AvatarSdkMgr.SpawnCoroutine(GetHaircutPreviewFunc(avatarCode, haircutId, request));
            return(request);
        }
コード例 #19
0
        /// <summary>
        /// DeleteAvatarAsync implementation
        /// </summary>
        private IEnumerator DeleteAvatarFunc(string avatarCode, AsyncRequest request)
        {
            var avatarRequest = GetAvatarAsync(avatarCode);

            yield return(avatarRequest);

            if (avatarRequest.IsError)
            {
                request.SetError(avatarRequest.ErrorMessage);
                yield break;
            }

            var deleteRequest = connection.DeleteAvatarAsync(avatarRequest.Result);

            yield return(request.AwaitSubrequest(deleteRequest, 0.5f));

            if (request.IsError)
            {
                yield break;
            }

            CoreTools.DeleteAvatarFiles(avatarCode);

            request.IsDone = true;
        }
コード例 #20
0
        private AsyncRequest <AvatarData> GenerateAvatarAsync(byte[] selectedImageBytes, PipelineType pipelineType)
        {
            var request = new AsyncRequest <AvatarData>();

            AvatarSdkMgr.SpawnCoroutine(GenerateAvatarFunc(selectedImageBytes, pipelineType, request));
            return(request);
        }
コード例 #21
0
        /// <summary>
        /// Requests from the server identities of the latest "maxItems" avatars.
        /// </summary>
        public AsyncRequest <string[]> GetAllAvatarsAsync(int maxItems)
        {
            var request = new AsyncRequest <string[]>(AvatarSdkMgr.Str(Strings.GettingAvatarList));

            AvatarSdkMgr.SpawnCoroutine(GetAllAvatarsFunc(maxItems, request));
            return(request);
        }
コード例 #22
0
        /// <summary>
        /// Download haircut preview and save it to disk
        /// </summary>
        public AsyncRequest DownloadAndSaveHaircutPreviewAsync(AvatarHaircutData haircutData)
        {
            var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GettingHaircutPreview));

            AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveHaircutPreviewFunc(haircutData, request));
            return(request);
        }
コード例 #23
0
        /// <summary>
        /// StartAndAwaitAvatarCalculationAsync implementation
        /// </summary>
        private IEnumerator StartAndAwaitAvatarCalculationFunc(string avatarCode, AsyncRequest request)
        {
            var avatarRequest = GetAvatarAsync(avatarCode);

            yield return(avatarRequest.Await());

            if (avatarRequest.IsError)
            {
                request.SetError(avatarRequest.ErrorMessage);
                yield break;
            }

            var awaitCalculations = connection.AwaitAvatarCalculationsAsync(avatarRequest.Result);

            yield return(request.AwaitSubrequest(awaitCalculations, finalProgress: 1.0f));

            if (request.IsError)
            {
                yield break;
            }

            if (Strings.BadFinalStates.Contains(awaitCalculations.Result.status))
            {
                request.SetError(string.Format("Avatar {0} calculation finished with status: {1}", awaitCalculations.Result.code, awaitCalculations.Result.status));
                yield break;
            }

            request.IsDone = true;
        }
コード例 #24
0
        /// <summary>
        /// Get haircut info
        /// </summary>
        /// <param name="avatarCode">Avatar code</param>
        /// <param name="haircutId">Haircut identity</param>
        public AsyncRequest <AvatarHaircutData> GetHaircutDataAsync(string avatarCode, string haircutId)
        {
            var request = new AsyncRequest <AvatarHaircutData>(AvatarSdkMgr.Str(Strings.GettingHaircutInfo));

            AvatarSdkMgr.SpawnCoroutine(GetHaircutDataFunc(avatarCode, haircutId, request));
            return(request);
        }
コード例 #25
0
        /// <summary>
        /// Download haircut points and save them to disk
        /// </summary>
        public AsyncRequest DownloadAndSaveHaircutPointsAsync(string avatarCode, AvatarHaircutData haircutData)
        {
            var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GettingHaircutPointCloud));

            AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveHaircutPointsFunc(avatarCode, haircutData, request));
            return(request);
        }
コード例 #26
0
    /// <summary> Build a async request for import a clip. This request handles downloading and notifications. </summary>
    public static AsyncRequest Make(string url, string savePath)
    {
        //Build request
        AsyncRequest request = new AsyncRequest();

        request.status          = Status.BuildRequest;
        request.saveDirectory   = Path.GetDirectoryName(savePath);
        request.fileName        = Path.GetFileName(savePath);
        request.deleteClipAtEnd = false;
        request.requestName     = "Import > " + request.fileName.Remove(request.fileName.Length - 4);

        //Generate placeholder
        request.status = Status.GeneratePlaceHolder;
        request.GeneratePlaceHolder();

        //Send request
        DownloadClip(request, url);

        //Register request into pool
        Resources.instance.requests.Add(request);
        EditorUtility.SetDirty(Resources.instance);

        //Return the request
        return(request);
    }
コード例 #27
0
        /// <summary>
        /// Download all avatar files, unzip and save to disk.
        /// </summary>
        /// <param name="connection">Connection session.</param>
        /// <param name="avatar">Avatar to download.</param>
        /// <param name="withHaircutPointClouds">If set to true, download all haircut point clouds too.</param>
        /// <param name="withBlendshapes">If set to true, download blendshapes too.</param>
        public AsyncRequest DownloadAndSaveAvatarModelAsync(AvatarData avatar, bool withHaircutPointClouds, bool withBlendshapes)
        {
            var request = new AsyncRequest <AvatarData>(AvatarSdkMgr.Str(Strings.DownloadingAvatar));

            AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveAvatarModel(avatar, withHaircutPointClouds, withBlendshapes, request));
            return(request);
        }
コード例 #28
0
        private IEnumerator Await(AsyncRequest r, PipelineType pipelineType)
        {
            while (!r.IsDone)
            {
                yield return(null);

                if (r.IsError)
                {
                    Debug.LogError(r.ErrorMessage);
                    yield break;
                }

                if (pipelineType == PipelineType.HEAD)
                {
                    var          progress = new List <string>();
                    AsyncRequest request  = r;
                    while (request != null)
                    {
                        progress.Add(string.Format("{0}: {1}%", request.State, request.ProgressPercent.ToString("0.0")));
                        request = request.CurrentSubrequest;
                    }

                    progressText.text = string.Join("\n", progress.ToArray());
                }
            }

            if (pipelineType == PipelineType.HEAD)
            {
                progressText.text = string.Empty;
            }
        }
コード例 #29
0
        /// <summary>
        /// Checks is queue contains request in loop and process request
        /// </summary>
        /// <param name="notUsed">Not used</param>
        private void ProcessRequests(Object notUsed)
        {
            // Execute while object is not disposed
            while (!this.disposed)
            {
                AsyncRequest task = null;

                // Lock task queue
                lock (this.taskQueueLocker)
                {
                    // If no requests is queue wait for task
                    if (this.tasksQueue.Count == 0)
                    {
                        Monitor.Wait(this.taskQueueLocker);
                    }

                    // Get task from queue
                    task = this.tasksQueue.Dequeue();
                }

                if (task != null)
                {
                    // If task exist process him
                    ProcessAsyncRequest(task);
                }
                else
                {
                    // Empty task instruct for stop working
                    return;
                }
            }
        }
コード例 #30
0
        /// <summary>
        /// Helper function that allows to yield on multiple async requests in a coroutine.
        /// It also tracks progress on the current request(s) and updates it in UI.
        /// </summary>
        protected IEnumerator Await(params AsyncRequest[] requests)
        {
            foreach (var r in requests)
            {
                while (!r.IsDone)
                {
                    // yield null to wait until next frame (to avoid blocking the main thread)
                    yield return(null);

                    // This function will throw on any error. Such primitive error handling only provided as
                    // an example, the production app probably should be more clever about it.
                    if (r.IsError)
                    {
                        Debug.LogError(r.ErrorMessage);
                        throw new Exception(r.ErrorMessage);
                    }

                    // Each requests may or may not contain "subrequests" - the asynchronous subtasks needed to
                    // complete the request. The progress for the requests can be tracked overall, as well as for
                    // every subtask. The code below shows how to recursively iterate over current subtasks
                    // to display progress for them.
                    var          progress = new List <string>();
                    AsyncRequest request  = r;
                    while (request != null)
                    {
                        progress.Add(string.Format("{0}: {1}%", request.State, request.ProgressPercent.ToString("0.0")));
                        request = request.CurrentSubrequest;
                    }
                    progressText.text = string.Join("\n", progress.ToArray());
                }
            }
        }
コード例 #31
0
        //
        // methods
        //

        /// <summary>
        /// If instance can process request execute success callback
        /// otherwise execute failure callback
        /// </summary>
        /// <param name="object">AsyncRequest</param>
        private void ProcessRequest(Object @object)
        {
            AsyncRequest request = @object as AsyncRequest;

            lock (this.dataLocker)
            {
                // If instance waits for the new data
                if (this.state == FileLinesCheckerState.Pending)
                {
                    //Wait new data
                    Monitor.Wait(this.dataLocker);
                }

                // If instance can return the answer
                if (this.state == FileLinesCheckerState.Ready)
                {
                    // Execite success callback
                    request.SuccessCallback(this.data.Contains(request.Line));
                }
                else
                {
                    // Execute failure callback
                    request.FailureCallback(this.state.ToString());
                }
            }
        }
コード例 #32
0
ファイル: XWebClient.cs プロジェクト: Bumbadawg/extraQL
 public byte[] DownloadData(Uri url)
 {
     var request = new AsyncRequest(url, null);
       this.DownloadDataWithTimeout(request);
       if (request.DataResult.Error != null)
     throw request.DataResult.Error;
       return request.DataResult.Result;
 }
コード例 #33
0
ファイル: XWebClient.cs プロジェクト: Bumbadawg/extraQL
 public string DownloadString(Uri url)
 {
     var request = new AsyncRequest(url, null);
       this.DownloadStringWithTimeout(request);
       if (request.StringResult.Error != null)
     throw request.StringResult.Error;
       return request.StringResult.Result;
 }
コード例 #34
0
 private void BeginRequest(string method, HttpWebRequest httpRequest, AsyncRequest rawRequestData)
 {
     if (method == "PUT" || method == "POST")
     {
         httpRequest.BeginGetRequestStream(WriteStream, rawRequestData);
     }
     else
     {
         httpRequest.BeginGetResponse(ReadCallback, rawRequestData);
     }
 }
コード例 #35
0
 public void Execute(CreateTagRequest request, Action<CreateTagResponse> responseCallback, Action<Exception> exceptionCallback)
 {
     var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/tags/" + request.Tag);
     webRequest.Method = "PUT";
     var asyncRequest = new AsyncRequest
     {
         Request = webRequest,
         ReadFromResponse = o => responseCallback(new CreateTagResponse()),
         ExceptionCallback = exceptionCallback,
     };
     asyncRequest.Execute();
 }
コード例 #36
0
 public void Execute(DeleteTagRequest request, Action<DeleteTagResponse> responseCallback, Action<Exception> exceptionCallback)
 {
     var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/tags/" + request.Tag);
     webRequest.Method = "DELETE";
     var asyncRequest = new AsyncRequest
     {
         Request = webRequest,
         ReadFromResponse = o => responseCallback(new DeleteTagResponse()),
         ExceptionCallback = exceptionCallback,
         RequestContentType = "application/json"
     };
     asyncRequest.Execute();
 }
コード例 #37
0
        public void Execute(AddTagToDeviceRequest request, Action<AddTagToDeviceResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var url = string.Format("https://go.urbanairship.com/api/device_tokens/{0}/tags/{1}", request.DeviceToken, request.Tag);
            var webRequest = RequestBuilder.Build(url);
            webRequest.Method = "PUT";

            var asyncRequest = new AsyncRequest
            {
                Request = webRequest,
                ReadFromResponse = o => responseCallback(new AddTagToDeviceResponse()),
                ExceptionCallback = exceptionCallback,
            };
            asyncRequest.Execute();
        }
コード例 #38
0
        public void Execute(Action<GetTagsResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var request = RequestBuilder.Build("https://go.urbanairship.com/api/tags/");
            request.Method = "GET";
            request.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                                   {
                                       ReadFromResponse = stream => responseCallback(new GetTagsResponse { Tags = TagDeSerializer.DeSerialize(stream).ToList() }),
                                       Request = request,
                                       ExceptionCallback = exceptionCallback,
                                   };
            asyncRequest.Execute();
        }
コード例 #39
0
 public void Execute(AddRegistrationRequest registrationRequest, Action<AddRegistrationResponse> responseCallback, Action<Exception> exceptionCallback)
 {
     var request = RequestBuilder.Build("https://go.urbanairship.com/api/apids/" + registrationRequest.PushId);
     request.Method = "PUT";
     var asyncRequest = new AsyncRequest
         {
             Request = request,
             ReadFromResponse = o => responseCallback(new AddRegistrationResponse()),
             ExceptionCallback = exceptionCallback,
             WriteToRequest = stream => stream.WriteToStream(registrationRequest.Serialize),
             RequestContentType = "application/json"
         };
     asyncRequest.Execute();
 }
コード例 #40
0
        public void Execute(GetRegistrationRequest request, Action<GetRegistrationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/apids/" + request.PushId);
            webRequest.Method = "Get";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
            {
                Request = webRequest,
                ReadFromResponse = stream => responseCallback(GetRegistrationResponseDeSerializer.DeSerialize(stream)),
                ExceptionCallback = exceptionCallback,
            };
            asyncRequest.Execute();
        }
コード例 #41
0
        public void Execute(GetTagsForDeviceRequest request, Action<GetTagsForDeviceResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build(string.Format("https://go.urbanairship.com/api/device_tokens/{0}/tags/", request.DeviceToken));
            webRequest.Method = "GET";

            var asyncRequest = new AsyncRequest
                                   {
                                       ReadFromResponse = stream => responseCallback(new GetTagsForDeviceResponse { Tags = TagDeSerializer.DeSerialize(stream).ToList() }),
                                       Request = webRequest,
                                       ExceptionCallback = exceptionCallback,
                                       RequestContentType = "application/json"
                                   };
            asyncRequest.Execute();
        }
コード例 #42
0
        public void Execute(Action<GetAllFeedsResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var request = RequestBuilder.Build("https://go.urbanairship.com/api/feeds/");
            request.Method = "Get";
            request.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
            {
                ReadFromResponse = stream => responseCallback(FeedDeSerializer.DeSerializeMultiple(stream)),
                Request = request,
                ExceptionCallback = exceptionCallback,
            };
            asyncRequest.Execute();
        }
コード例 #43
0
        public void Execute(PushNotificationRequest notification, Action<PushNotificationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var request = RequestBuilder.Build("https://go.urbanairship.com/api/push/");
            request.Method = "POST";
            request.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                {
                    Request = request,
                    ReadFromResponse = o => responseCallback(new PushNotificationResponse()),
                    ExceptionCallback = exceptionCallback,
                    WriteToRequest = stream => stream.WriteToStream(notification.Serialize),
                };
            asyncRequest.Execute();
        }
コード例 #44
0
        public void Execute(ModifyTagRequest request, Action<ModifyTagResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/tags/" + request.Tag);
            webRequest.Method = "POST";

            var asyncRequest = new AsyncRequest
            {
                WriteToRequest = stream => stream.WriteToStream(request.Serialize),
                Request = webRequest,
                ReadFromResponse = o => responseCallback(new ModifyTagResponse()),
                ExceptionCallback = exceptionCallback,
                RequestContentType = "application/json"
            };
            asyncRequest.Execute();
        }
コード例 #45
0
        public void Execute(FeedbackRequest request, Action<FeedbackResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var url = "https://go.urbanairship.com/api/device_tokens/feedback/?since=" + request.Since.ToIso8601();
            var webRequest = RequestBuilder.Build(url);
            webRequest.Method = "GET";

            var asyncRequest = new AsyncRequest
                {
                    ReadFromResponse = stream => responseCallback(FeedbackResponseDeSerializer.DeSerialize(stream)),
                    Request = webRequest,
                    ExceptionCallback = exceptionCallback,
                    RequestContentType = "application/json"
                };
            asyncRequest.Execute();
        }
コード例 #46
0
        public void Execute(GetRegistrationsRequest request, Action<GetRegistrationsResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var url = string.Format("https://go.urbanairship.com/api/device_tokens/?Limit={0}&start={1}", request.Limit, request.Start);
            var webRequest = RequestBuilder.Build(url);
            webRequest.Method = "GET";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                {
                    ReadFromResponse = stream => responseCallback(GetRegistrationsResponseDeSerializer.DeSerialize(stream)),
                    Request = webRequest,
                    ExceptionCallback = exceptionCallback,
                };
            asyncRequest.Execute();
        }
コード例 #47
0
        public void Execute(RemoveTagFromDeviceRequest request, Action<RemoveTagFromDeviceResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var url = string.Format("https://go.urbanairship.com/api/device_tokens/{0}/tags/{1}", request.DeviceToken, request.TagToRemove);
            var webRequest = RequestBuilder.Build(url);
            webRequest.Method = "DELETE";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
            {
                Request = webRequest,
                ReadFromResponse = o => responseCallback(new RemoveTagFromDeviceResponse()),
                ExceptionCallback = exceptionCallback,
            };
            asyncRequest.Execute();
        }
コード例 #48
0
        public void Execute(ModifyFeedRequest newFeed, Action<ModifyFeedResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/feeds/" + newFeed.FeedId);
            webRequest.Method = "PUT";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                                   {
                                       WriteToRequest = stream => stream.WriteToStream(newFeed.Serialize),
                                       Request = webRequest,
                                       ReadFromResponse = o => responseCallback(new ModifyFeedResponse()),
                                       ExceptionCallback = exceptionCallback,
                                  };
            asyncRequest.Execute();
        }
コード例 #49
0
        public void Execute(DeleteRegistrationRequest request, Action<DeleteRegistrationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/device_tokens/" + request.DeviceToken);
            webRequest.Method = "Delete";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
            {
                Request = webRequest,
                ReadFromResponse = o => responseCallback(new DeleteRegistrationResponse()),
                ExceptionCallback = exceptionCallback,
            };

            asyncRequest.Execute();
        }
コード例 #50
0
        public void Execute(DeleteRegistrationRequest request, Action<DeleteRegistrationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            //TODO: validate args
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/apids/" + request.PushId);
            webRequest.Method = "Delete";

            var asyncRequest = new AsyncRequest
            {
                Request = webRequest,
                ReadFromResponse = o => responseCallback(new DeleteRegistrationResponse()),
                ExceptionCallback = exceptionCallback,
                RequestContentType = "application/json"
            };
            asyncRequest.Execute();
        }
コード例 #51
0
        public void Execute(BroadcastNotificationRequest request, Action<BroadcastNotificationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/push/broadcast/");
            webRequest.Method = "POST";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                                   {
                                       WriteToRequest = stream => stream.WriteToStream(request.Serialize),
                                       Request = webRequest,
                                       ReadFromResponse = o => responseCallback(new BroadcastNotificationResponse()),
                                       ExceptionCallback = exceptionCallback,
                                   };

            asyncRequest.Execute();
        }
コード例 #52
0
        public void Execute(CreateFeedRequest request, Action<CreateFeedResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/feeds/");
            webRequest.Method = "POST";
            webRequest.ContentType = "application/json";

            var asyncRequest = new AsyncRequest
                                   {
                                       WriteToRequest = stream => stream.WriteToStream(request.Serialize),
                                       Request = webRequest,
                                       ReadFromResponse = stream => responseCallback(CreateFeedResponseDeSerializer.DeSerialize(stream)),
                                       ExceptionCallback = exceptionCallback,
                                   };

            asyncRequest.Execute();
        }
コード例 #53
0
        public void Execute(PushNotificationRequest request, Action<PushNotificationResponse> responseCallback, Action<Exception> exceptionCallback)
        {
            var webRequest = RequestBuilder.Build("https://go.urbanairship.com/api/push/");
            webRequest.Method = "POST";
            webRequest.ContentType = "application/json";
            //TODO: must have tags or tokens... validate

            var asyncRequest = new AsyncRequest
                                   {
                                       WriteToRequest = stream => stream.WriteToStream(request.Serialize),
                                       Request = webRequest,
                                       ReadFromResponse = o => responseCallback(new PushNotificationResponse()),
                                       ExceptionCallback = exceptionCallback,
                                   };

            asyncRequest.Execute();
        }
コード例 #54
0
ファイル: Connection.cs プロジェクト: nolith/internetpack
        public override IAsyncResult BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
        {
            if (!fBufferedAsync)
                return IntBeginRead(buffer, offset, count, callback, state);

            AsyncRequest lRequest = new AsyncRequest();
            lRequest.AsyncBuffer = buffer;
            lRequest.AsyncOffset = offset;
            lRequest.AsyncCount = count;
            lRequest.AsyncRest = count;
            lRequest.AsyncCallback = callback;
            lRequest.AsyncState = state;

            try
            {
                IntBeginRead(buffer, offset, count, new AsyncCallback(IntReadCallback), lRequest);
            }
            catch (ObjectDisposedException) // disconnect from this side
            {
                TriggerAsyncDisconnect();
                throw;
            }
            catch (SocketException) // disconnect
            {
                TriggerAsyncDisconnect();
                throw;
            }

            return lRequest;
        }
コード例 #55
0
 public void SendAsync(string method, Uri uri, DataPackets.HttpContent postData, Action<DataPackets.HttpResponseMessage> httpClientCallback)
 {
     var httpRequestMessage = new HttpRequestMessage(method, uri, HttpContent.Create(postData.Content, postData.ContentType)) { Headers = { ContentType = postData.ContentType } };
     var rawRequestData = new AsyncRequest { PostData = postData, HttpClientCallback = httpClientCallback };
     _httpClient.BeginSend(httpRequestMessage, SendAsyncEnd, rawRequestData);
 }
コード例 #56
0
ファイル: ServerTree.cs プロジェクト: paladin74/Dapple
        /// <summary>
        /// Send an async request
        /// </summary>
        protected void SendAsyncRequest()
        {
            AsyncRequest oRequest;
             do
             {
            oRequest = new AsyncRequest();
            oRequest.m_bValid = false;

            // --- Safety try/catch so that a thread will not terminate, and not clean itself up ---

            try
            {
               oRequest = (AsyncRequest)m_oAsyncQueue.Dequeue();

               if (oRequest.m_eType == AsyncRequestType.GetCatalogHierarchy)
               {
                  GetCatalogHierarchy();
                  GetCatalogCount();
               }
               else if (oRequest.m_eType == AsyncRequestType.GetDatasetList)
               {
                  GetDatasetList((string)oRequest.m_oParam1, (int)oRequest.m_oParam2);
               }
               else if (oRequest.m_eType == AsyncRequestType.FilterChanged)
               {
                  FilterChanged((SearchModeEnum)oRequest.m_oParam1, (BoundingBox)oRequest.m_oParam2, (string)oRequest.m_oParam3, (bool)oRequest.m_oParam4, (bool)oRequest.m_oParam5);
                  GetCatalogCount();
               }
            }
            catch (Exception e)
            {
                    if (oRequest.m_bValid)
                        GetDapError.Instance.Write("Failed to send request " + oRequest.m_eType.ToString() + " - " + e.Message);
            }

             } while (!oRequest.m_bValid || oRequest.m_eType != AsyncRequestType.Stop);
        }
コード例 #57
0
ファイル: ServerTree.cs プロジェクト: paladin74/Dapple
 /// <summary>
 /// Enqueue a request onto the queue
 /// </summary>
 /// <param name="eRequest"></param>
 internal void EnqueueRequest(AsyncRequestType eRequest)
 {
     AsyncRequest oRequest = new AsyncRequest();
      oRequest.m_bValid = true;
      oRequest.m_eType = eRequest;
      oRequest.m_oParam1 = null;
      oRequest.m_oParam2 = null;
      oRequest.m_oParam3 = null;
      oRequest.m_oParam4 = null;
      oRequest.m_oParam5 = null;
      m_oAsyncQueue.Enqueue(oRequest);
 }
コード例 #58
0
ファイル: ServerTree.cs プロジェクト: paladin74/Dapple
 /// <summary>
 /// Enqueue a request onto the queue
 /// </summary>
 /// <param name="eRequest"></param>
 /// <param name="oParam1"></param>
 /// <param name="oParam2"></param>
 /// <param name="oParam3"></param>
 /// <param name="oParam4"></param>
 /// <param name="oParam5"></param>
 internal void EnqueueRequest(AsyncRequestType eRequest, object oParam1, object oParam2, object oParam3, object oParam4, object oParam5)
 {
     AsyncRequest oRequest = new AsyncRequest();
      oRequest.m_bValid = true;
      oRequest.m_eType = eRequest;
      oRequest.m_oParam1 = oParam1;
      oRequest.m_oParam2 = oParam2;
      oRequest.m_oParam3 = oParam3;
      oRequest.m_oParam4 = oParam4;
      oRequest.m_oParam5 = oParam5;
      m_oAsyncQueue.Enqueue(oRequest);
 }
コード例 #59
0
        private void ProcessAsyncRequest(AsyncRequest request)
        {
            request.Error = null;

            try
            {
                request.Result = request.Method();
            }
            catch (Exception ex)
            {
                _log.Error("Call to requested method failed with exception.", ex);
                request.Result = null;
                request.Error = ex;
                // do nothing here we will send error info when invoking callback
            }

            try
            {
                if (_synchronizationContext == SynchronizationContext.Current)
                {
                    // Execute callback on the current thread
                    request.Callback(request.Result, request.Error);
                }
                else
                {
                    // Post the callback on the creator thread
                    _synchronizationContext.Post(new SendOrPostCallback(delegate(object state)
                    {
                        var r = state as AsyncRequest;
                        r.Callback(r.Result, r.Error);
                    }), request);
                }
            }
            catch (Exception ex)
            {
                _log.Error("Unable to invoke callback method.", ex);
            }
        }
コード例 #60
0
 public void SendAsync(string method, Uri uri, HttpContent postData, Action<HttpResponseMessage> httpClientCallback)
 {
     var httpRequest = ConfigureWebRequest(uri, method);
     var rawRequestData = new AsyncRequest { PostData = postData, HttpClientCallback = httpClientCallback, WebRequest = httpRequest };
     BeginRequest(method, httpRequest, rawRequestData);
 }