|
|
@@ -70,7 +70,7 @@ namespace ETModel
|
|
|
|
|
|
foreach (Action<IResponse> action in this.requestCallback.Values.ToArray())
|
|
|
{
|
|
|
- action.Invoke(new ResponseMessage { Error = this.Error });
|
|
|
+ action.Invoke(new ErrorResponse { Error = this.Error });
|
|
|
}
|
|
|
|
|
|
//int error = this.channel.Error;
|
|
|
@@ -174,54 +174,83 @@ namespace ETModel
|
|
|
|
|
|
action(response);
|
|
|
}
|
|
|
-
|
|
|
- public ETTask<IResponse> Call(IRequest request)
|
|
|
+
|
|
|
+ public ETTask<IResponse> CallWithoutException(IRequest request)
|
|
|
{
|
|
|
int rpcId = ++RpcId;
|
|
|
var tcs = new ETTaskCompletionSource<IResponse>();
|
|
|
|
|
|
this.requestCallback[rpcId] = (response) =>
|
|
|
{
|
|
|
- try
|
|
|
+ if (response is ErrorResponse errorResponse)
|
|
|
{
|
|
|
- if (ErrorCode.IsRpcNeedThrowException(response.Error))
|
|
|
- {
|
|
|
- throw new RpcException(response.Error, response.Message);
|
|
|
- }
|
|
|
-
|
|
|
- tcs.SetResult(response);
|
|
|
+ tcs.SetException(new Exception($"session close, errorcode: {errorResponse.Error} {errorResponse.Message}"));
|
|
|
+ return;
|
|
|
}
|
|
|
- catch (Exception e)
|
|
|
+ tcs.SetResult(response);
|
|
|
+ };
|
|
|
+
|
|
|
+ request.RpcId = rpcId;
|
|
|
+ this.Send(request);
|
|
|
+ return tcs.Task;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ETTask<IResponse> CallWithoutException(IRequest request, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ int rpcId = ++RpcId;
|
|
|
+ var tcs = new ETTaskCompletionSource<IResponse>();
|
|
|
+
|
|
|
+ this.requestCallback[rpcId] = (response) =>
|
|
|
+ {
|
|
|
+ if (response is ErrorResponse errorResponse)
|
|
|
{
|
|
|
- tcs.SetException(new Exception($"Rpc Error: {request.GetType().FullName}", e));
|
|
|
+ tcs.SetException(new Exception($"session close, errorcode: {errorResponse.Error} {errorResponse.Message}"));
|
|
|
+ return;
|
|
|
}
|
|
|
+ tcs.SetResult(response);
|
|
|
};
|
|
|
|
|
|
+ cancellationToken.Register(() => this.requestCallback.Remove(rpcId));
|
|
|
+
|
|
|
request.RpcId = rpcId;
|
|
|
this.Send(request);
|
|
|
return tcs.Task;
|
|
|
}
|
|
|
|
|
|
- public ETTask<IResponse> Call(IRequest request, CancellationToken cancellationToken)
|
|
|
+ public ETTask<IResponse> Call(IRequest request)
|
|
|
{
|
|
|
int rpcId = ++RpcId;
|
|
|
var tcs = new ETTaskCompletionSource<IResponse>();
|
|
|
|
|
|
this.requestCallback[rpcId] = (response) =>
|
|
|
{
|
|
|
- try
|
|
|
+ if (ErrorCode.IsRpcNeedThrowException(response.Error))
|
|
|
{
|
|
|
- if (ErrorCode.IsRpcNeedThrowException(response.Error))
|
|
|
- {
|
|
|
- throw new RpcException(response.Error, response.Message);
|
|
|
- }
|
|
|
-
|
|
|
- tcs.SetResult(response);
|
|
|
+ tcs.SetException(new Exception($"Rpc Error: {request.GetType().FullName} {response.Error}"));
|
|
|
+ return;
|
|
|
}
|
|
|
- catch (Exception e)
|
|
|
+
|
|
|
+ tcs.SetResult(response);
|
|
|
+ };
|
|
|
+
|
|
|
+ request.RpcId = rpcId;
|
|
|
+ this.Send(request);
|
|
|
+ return tcs.Task;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ETTask<IResponse> Call(IRequest request, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ int rpcId = ++RpcId;
|
|
|
+ var tcs = new ETTaskCompletionSource<IResponse>();
|
|
|
+
|
|
|
+ this.requestCallback[rpcId] = (response) =>
|
|
|
+ {
|
|
|
+ if (ErrorCode.IsRpcNeedThrowException(response.Error))
|
|
|
{
|
|
|
- tcs.SetException(new Exception($"Rpc Error: {request.GetType().FullName}", e));
|
|
|
+ tcs.SetException(new Exception($"Rpc Error: {request.GetType().FullName} {response.Error}"));
|
|
|
}
|
|
|
+
|
|
|
+ tcs.SetResult(response);
|
|
|
};
|
|
|
|
|
|
cancellationToken.Register(() => this.requestCallback.Remove(rpcId));
|