1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-08 16:36:15 +00:00

Updated json.net, some fixes in socket events

This commit is contained in:
JKorf 2018-11-28 15:42:18 +01:00
parent 596b28dd47
commit 850a0a91b6
3 changed files with 24 additions and 15 deletions

View File

@ -16,7 +16,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="WebSocket4Net" Version="0.15.2" /> <PackageReference Include="WebSocket4Net" Version="0.15.2" />
</ItemGroup> </ItemGroup>

View File

@ -67,6 +67,9 @@ namespace CryptoExchange.Net
socket.DataInterpreter = dataInterpreter; socket.DataInterpreter = dataInterpreter;
socket.OnClose += () => socket.OnClose += () =>
{ {
foreach (var sub in sockets)
sub.ResetEvents();
SocketOnClose(socket); SocketOnClose(socket);
}; };
socket.OnError += (e) => socket.OnError += (e) =>

View File

@ -65,7 +65,12 @@ namespace CryptoExchange.Net.Sockets
public void SetEvent(string name, bool success, Error error) public void SetEvent(string name, bool success, Error error)
{ {
Events.SingleOrDefault(e => e.Name == name)?.Set(success, error); var waitingEvent = waitingForEvents.SingleOrDefault(e => e.Name == name);
if (waitingEvent != null)
{
waitingEvent.Set(success, error);
waitingForEvents.Remove(waitingEvent);
}
} }
public void SetEvent(int id, bool success, Error error) public void SetEvent(int id, bool success, Error error)
@ -85,23 +90,24 @@ namespace CryptoExchange.Net.Sockets
public Task<CallResult<bool>> WaitForEvent(string name, int timeout) public Task<CallResult<bool>> WaitForEvent(string name, int timeout)
{ {
return Task.Run(() => var evnt = Events.Single(e => e.Name == name);
{ waitingForEvents.Add(evnt);
var evnt = Events.Single(e => e.Name == name); return Task.Run(() => evnt.Wait(timeout));
waitingForEvents.Add(evnt);
return evnt.Wait(timeout);
});
} }
public Task<CallResult<bool>> WaitForEvent(string name, int id, int timeout) public Task<CallResult<bool>> WaitForEvent(string name, int id, int timeout)
{ {
return Task.Run(() => var evnt = Events.Single(e => e.Name == name);
{ evnt.WaitingId = id;
var evnt = Events.Single(e => e.Name == name); waitingForEvents.Add(evnt);
evnt.WaitingId = id; return Task.Run(() => evnt.Wait(timeout));
waitingForEvents.Add(evnt); }
return evnt.Wait(timeout);
}); public void ResetEvents()
{
foreach (var waiting in new List<SocketEvent>(waitingForEvents))
waiting.Set(false, new UnknownError("Connection reset"));
waitingForEvents.Clear();
} }
public async Task Close() public async Task Close()