Beispiel #1
0
 private Task <object> Callback(RpcMethodMetadata methodMetadata, int requestId, int timeout, object[] parameters, CodecAttribute codec)
 {
     return(callBackHandler.AddCallBack(requestId, timeout)
            .ContinueWith(t =>
     {
         if (t.Result.Ret != Const.ServerSuccess)
         {
             throw new TarsException(t.Result.Ret, t.Result.ResultDesc);
         }
         var info = codec.DecodeReturnValue(t.Result, methodMetadata);
         if (info.Item2 == null)
         {
             return info.Item1;
         }
         var index = 0;
         foreach (var item in methodMetadata.Parameters.Where(i => i.ParameterType.IsByRef))
         {
             if (index >= info.Item2.Length)
             {
                 break;
             }
             parameters[item.Position] = info.Item2[index++];
         }
         return info.Item1;
     }));
 }
Beispiel #2
0
        private object HandleResult(Task task, RpcMethodMetadata methodMetadata, int requestId, int timeout, object[] parameters, CodecAttribute codec)
        {
            switch (methodMetadata.InvokeStatus)
            {
            case InvokeStatus.SyncCall:
                return(Callback(methodMetadata, requestId, timeout, parameters, codec).Result);

            case InvokeStatus.AsyncCall:
                return(Callback(methodMetadata, requestId, timeout, parameters, codec));

            case InvokeStatus.Oneway:
            default:
                return(null);
            }
        }