private IEnumerator SendRequest <TReq, TRes>(string method, TReq parameters, JsonRpcCallOutput output)
        {
            string id = (++Id).ToString();

            Request <TReq>  request  = new Request <TReq>(id, method, parameters);
            Response <TRes> response = null;

            string requestTransport = JsonUtility.ToJson(request);

            Exception error             = null;
            string    responseTransport = null;

            yield return(this.transport.Request(requestTransport, (JsonRpcTransportException err, string res) => { error = err; responseTransport = res; }));

            if (string.IsNullOrEmpty(responseTransport))
            {
                error = new JsonRpcException(ERR_MSG_EMPTY_TRANSPORT_RESPONSE);
            }

            if (error != null)
            {
                output.error = (JsonRpcException)error;
                yield break;
            }

            response = JsonUtility.FromJson <Response <TRes> >(responseTransport);
            if (response.error.code != Int32.MinValue)
            {
                output.error = (JsonRpcException)error;
                yield break;
            }

            output.result = response.result;
        }
        public IEnumerator Send()
        {
            var output = new JsonRpcCallOutput();

            yield return(this.client.Send <TReq, TRes>(this.type, this.method, this.parameters, output));

            this.error  = output.error;
            this.result = (TRes)output.result;
        }