/// <summary> /// Asynchronously executes function and returns response /// </summary> public override Task <TResult> ExecuteAsync <TResult>(UApi.Function <TResult> function) { if (_receiver == null) { throw new ObjectDisposedException("Userizyon client was disposed"); } var id = Interlocked.Increment(ref _taskId); var tcs = new TaskCompletionSource <TResult>(TaskCreationOptions.RunContinuationsAsynchronously); function.Extra = id.ToString(); _tasks.TryAdd(id, structure => { if (structure is UApi.Error error) { tcs.SetException(new UException(error)); } else if (structure is TResult result) { tcs.SetResult(result); } }); Send(function); return(tcs.Task); }
/// <summary> /// Executes function and ignores response /// </summary> public override void Send <TResut>(UApi.Function <TResut> function) { if (_receiver == null) { throw new ObjectDisposedException("Userizyon client was disposed"); } var data = JsonConvert.SerializeObject(function); _tdJsonClient.Send(data); }
/// <summary> /// Synchronously executes function and returns response /// </summary> public override TResult Execute <TResult>(UApi.Function <TResult> function) { if (_receiver == null) { throw new ObjectDisposedException("Userizyon client was disposed"); } var data = JsonConvert.SerializeObject(function); data = _tdJsonClient.Execute(data); var structure = JsonConvert.DeserializeObject <UApi.Object>(data, new Converter()); if (structure is UApi.Error error) { throw new UException(error); } return((TResult)structure); }