internal static object QueryInternal(this FastRpcClient fastRpcClient, string title, ICustomTuple customTuple, Type returnType, IRpcSerializer rpcSerializer, string extention = null, bool throwIfErrorResponseCode = false)
        {
            if (rpcSerializer == null)
            {
                throw new ArgumentNullException(nameof(rpcSerializer));
            }

            if (customTuple == null)
            {
                throw new ArgumentNullException(nameof(customTuple));
            }

            var encoding = RpcExtentionSettings.DefaultEncoding;

            var response = fastRpcClient.Query(
                encoding.GetBytes(title),
                encoding.GetBytes(rpcSerializer.Serialize(customTuple)),
                extention == null ? FrameFormat.EmptyBytes : encoding.GetBytes(extention),
                throwIfErrorResponseCode);

            if (returnType == typeof(void))
            {
                return(null);
            }

            var responseContent = response.ReadContentString();

            if (string.IsNullOrEmpty(responseContent))
            {
                return(null);
            }

            return(rpcSerializer.Deserialize(responseContent, returnType));
        }
        internal static object QueryInternal(this FastRpcClient fastRpcClient, string title, ICustomTuple customTuple, Type returnType, IBinarySerializer serializer, string extention = null, bool throwIfErrorResponseCode = true)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            if (customTuple == null)
            {
                throw new ArgumentNullException(nameof(customTuple));
            }

            var encoding = NetworkSettings.TitleExtentionEncoding;

            var response = fastRpcClient.Query(
                encoding.GetBytes(title),
                serializer.Serialize(customTuple),
                extention == null ? FrameFormat.EmptyBytes : encoding.GetBytes(extention),
                throwIfErrorResponseCode);

            if (returnType == typeof(void))
            {
                return(null);
            }

            if (response.ContentBytes == null)
            {
                return(null);
            }

            return(serializer.Deserialize(response.ContentBytes, returnType));
        }