using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using LeanCloud.Utilities; using LeanCloud.Storage.Internal; namespace LeanCloud.Storage.Internal { public class AVCloudCodeController : IAVCloudCodeController { private readonly IAVCommandRunner commandRunner; public AVCloudCodeController(IAVCommandRunner commandRunner) { this.commandRunner = commandRunner; } public Task CallFunctionAsync(String name, IDictionary 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); return commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t => { var decoded = AVDecoder.Instance.Decode(t.Result.Item2) as IDictionary; if (!decoded.ContainsKey("result")) { return default(T); } return Conversion.To(decoded["result"]); }); } public Task RPCFunction(string name, IDictionary parameters, string sessionToken, CancellationToken cancellationToken) { var command = new AVCommand(string.Format("call/{0}", Uri.EscapeUriString(name)), method: "POST", sessionToken: sessionToken, data: PointerOrLocalIdEncoder.Instance.Encode(parameters) as IDictionary); return commandRunner.RunCommandAsync(command, cancellationToken: cancellationToken).OnSuccess(t => { var decoded = AVDecoder.Instance.Decode(t.Result.Item2) as IDictionary; if (!decoded.ContainsKey("result")) { return default(T); } return Conversion.To(decoded["result"]); }); } } }