Ejemplo n.º 1
0
        public Task <IObjectState> GetSessionAsync(string sessionToken, CancellationToken cancellationToken)
        {
            var command = new AVCommand("sessions/me",
                                        method: "GET",
                                        sessionToken: sessionToken,
                                        data: null);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t => {
                return AVObjectCoder.Instance.Decode(t.Result.Item2, AVDecoder.Instance);
            }));
        }
Ejemplo n.º 2
0
        public virtual Task <FileState> SaveAsync(FileState state,
                                                  Stream dataStream,
                                                  String sessionToken,
                                                  IProgress <AVUploadProgressEventArgs> progress,
                                                  CancellationToken cancellationToken = default(CancellationToken))
        {
            if (state.Url != null)
            {
                // !isDirty
                return(Task <FileState> .FromResult(state));
            }

            if (cancellationToken.IsCancellationRequested)
            {
                var tcs = new TaskCompletionSource <FileState>();
                tcs.TrySetCanceled();
                return(tcs.Task);
            }

            var oldPosition = dataStream.Position;
            var command     = new AVCommand("files/" + state.Name,
                                            method: "POST",
                                            sessionToken: sessionToken,
                                            contentType: state.MimeType,
                                            stream: dataStream);

            return(commandRunner.RunCommandAsync(command,
                                                 uploadProgress: progress,
                                                 cancellationToken: cancellationToken).OnSuccess(uploadTask =>
            {
                var result = uploadTask.Result;
                var jsonData = result.Item2;
                cancellationToken.ThrowIfCancellationRequested();

                return new FileState
                {
                    Name = jsonData["name"] as string,
                    Url = new Uri(jsonData["url"] as string, UriKind.Absolute),
                    MimeType = state.MimeType
                };
            }).ContinueWith(t =>
            {
                // Rewind the stream on failure or cancellation (if possible)
                if ((t.IsFaulted || t.IsCanceled) && dataStream.CanSeek)
                {
                    dataStream.Seek(oldPosition, SeekOrigin.Begin);
                }
                return t;
            }).Unwrap());
        }
        public Task <IObjectState> FetchAsync(IObjectState state,
                                              string sessionToken,
                                              CancellationToken cancellationToken)
        {
            var command = new AVCommand(string.Format("/classes/{0}/{1}",
                                                      Uri.EscapeDataString(state.ClassName),
                                                      Uri.EscapeDataString(state.ObjectId)),
                                        method: "GET",
                                        sessionToken: sessionToken,
                                        data: null);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t => {
                return AVObjectCoder.Instance.Decode(t.Result.Item2, AVDecoder.Instance);
            }));
        }
Ejemplo n.º 4
0
        public Task SendPushNotificationAsync(IAVState state, CancellationToken cancellationToken)
        {
            return(currentUserController.GetCurrentSessionTokenAsync(cancellationToken).OnSuccess(sessionTokenTask => {
                var command = new AVCommand("push",
                                            method: "POST",
                                            sessionToken: sessionTokenTask.Result,
                                            data: AVPushEncoder.Instance.Encode(state));

                return commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken);
            }).Unwrap());
        }
Ejemplo n.º 5
0
        public Task <T> CallFunctionAsync <T>(String name,
                                              IDictionary <string, object> parameters,
                                              string sessionToken,
                                              CancellationToken cancellationToken)
        {
            var command = new AVCommand(string.Format("functions/{0}", Uri.EscapeUriString(name)),
                                        method: "POST",
                                        sessionToken: sessionToken,
                                        data: NoObjectsEncoder.Instance.Encode(parameters) as IDictionary <string, object>);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t =>
            {
                var decoded = AVDecoder.Instance.Decode(t.Result.Item2) as IDictionary <string, object>;
                if (!decoded.ContainsKey("result"))
                {
                    return default(T);
                }
                return Conversion.To <T>(decoded["result"]);
            }));
        }
        public Task TrackEventAsync(string name,
                                    IDictionary <string, string> dimensions,
                                    string sessionToken,
                                    CancellationToken cancellationToken)
        {
            IDictionary <string, object> data = new Dictionary <string, object> {
                { "at", DateTime.Now },
                { "name", name },
            };

            if (dimensions != null)
            {
                data["dimensions"] = dimensions;
            }

            var command = new AVCommand("/events/" + name,
                                        method: "POST",
                                        sessionToken: sessionToken,
                                        data: PointerOrLocalIdEncoder.Instance.Encode(data) as IDictionary <string, object>);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken));
        }
Ejemplo n.º 7
0
        public Task <AVConfig> FetchConfigAsync(String sessionToken, CancellationToken cancellationToken)
        {
            var command = new AVCommand("config",
                                        method: "GET",
                                        sessionToken: sessionToken,
                                        data: null);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(task => {
                cancellationToken.ThrowIfCancellationRequested();
                return new AVConfig(task.Result.Item2);
            }).OnSuccess(task => {
                cancellationToken.ThrowIfCancellationRequested();
                CurrentConfigController.SetCurrentConfigAsync(task.Result);
                return task;
            }).Unwrap());
        }
Ejemplo n.º 8
0
        private Task <IDictionary <string, object> > FindAsync(string relativeUri,
                                                               IDictionary <string, object> parameters,
                                                               string sessionToken,
                                                               CancellationToken cancellationToken)
        {
            var command = new AVCommand(string.Format("{0}?{1}",
                                                      relativeUri,
                                                      AVClient.BuildQueryString(parameters)),
                                        method: "GET",
                                        sessionToken: sessionToken,
                                        data: null);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t =>
            {
                return t.Result.Item2;
            }));
        }
Ejemplo n.º 9
0
        public Task <IObjectState> SignUpAsync(IObjectState state,
                                               IDictionary <string, IAVFieldOperation> operations,
                                               CancellationToken cancellationToken)
        {
            var objectJSON = AVObject.ToJSONObjectForSaving(operations);

            var command = new AVCommand("classes/_User",
                                        method: "POST",
                                        data: objectJSON);

            return(commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t =>
            {
                var serverState = AVObjectCoder.Instance.Decode(t.Result.Item2, AVDecoder.Instance);
                serverState = serverState.MutatedClone(mutableClone =>
                {
                    mutableClone.IsNew = true;
                });
                return serverState;
            }));
        }