Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }