Add timeout option to JRPC-Api
This commit is contained in:
parent
fea830b295
commit
4465c62163
42
JsonRPC.sln
Normal file
42
JsonRPC.sln
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.002.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "templates", "templates", "{ECEBC2A1-9382-44B5-94A6-305DC8235859}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharp", "templates\CSharp\CSharp.csproj", "{16231421-DB23-46D0-AFA8-81099E3CF97A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{B6AB75C7-58FC-4F62-AFAA-ED8FEEBF2E1C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{833192BE-67E8-425F-9AA7-23532485682A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharp_Example", "examples\CSharp\Example\CSharp_Example.csproj", "{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{16231421-DB23-46D0-AFA8-81099E3CF97A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{16231421-DB23-46D0-AFA8-81099E3CF97A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{16231421-DB23-46D0-AFA8-81099E3CF97A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{16231421-DB23-46D0-AFA8-81099E3CF97A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{16231421-DB23-46D0-AFA8-81099E3CF97A} = {ECEBC2A1-9382-44B5-94A6-305DC8235859}
|
||||
{833192BE-67E8-425F-9AA7-23532485682A} = {B6AB75C7-58FC-4F62-AFAA-ED8FEEBF2E1C}
|
||||
{3BD8D8BF-46ED-4F52-BD78-8B22FF3A77A2} = {833192BE-67E8-425F-9AA7-23532485682A}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {ED59162F-B7E7-4EA2-91D4-7F6D1BFBB820}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
@ -6,7 +6,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hibas123/jrpcgen",
|
||||
"version": "1.2.17",
|
||||
"version": "1.2.18",
|
||||
"main": "lib/index.js",
|
||||
"license": "MIT",
|
||||
"packageManager": "yarn@3.1.1",
|
||||
@ -48,4 +48,4 @@
|
||||
"dependencies": {
|
||||
"fs-extra": "^10.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
packages-microsoft-prod.deb
Normal file
BIN
packages-microsoft-prod.deb
Normal file
Binary file not shown.
@ -1,9 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>10.0</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -11,10 +11,12 @@ public class JRpcClient
|
||||
{
|
||||
private JRpcTransport Transport;
|
||||
private IDictionary<string, TaskCompletionSource<JsonNode?>> Requests;
|
||||
private int? Timeout = null;
|
||||
|
||||
public JRpcClient(JRpcTransport transport)
|
||||
public JRpcClient(JRpcTransport transport, int? timeout = null)
|
||||
{
|
||||
this.Transport = transport;
|
||||
this.Timeout = timeout;
|
||||
this.Requests = new Dictionary<string, TaskCompletionSource<JsonNode?>>();
|
||||
|
||||
this.Transport.OnPacket += this.HandlePacket;
|
||||
@ -87,9 +89,28 @@ public class JRpcClient
|
||||
|
||||
var task = new TaskCompletionSource<JsonNode?>();
|
||||
this.Requests.Add(id, task);
|
||||
await this.Transport.Write(request.ToJsonString());
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await this.Transport.Write(request.ToJsonString());
|
||||
});
|
||||
|
||||
return await task.Task;
|
||||
if (this.Timeout.HasValue)
|
||||
{
|
||||
if (await Task.WhenAny(task.Task, Task.Delay(this.Timeout.Value)) == task.Task)
|
||||
{
|
||||
return await task.Task;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Requests.Remove(id);
|
||||
throw new JRpcException("Request Timeout");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return await task.Task;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<TResult?> SendRequest<TResult>(string method, JsonArray param)
|
||||
|
Loading…
Reference in New Issue
Block a user