1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-08 08:26:20 +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>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="WebSocket4Net" Version="0.15.2" />
</ItemGroup>

View File

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

View File

@ -65,7 +65,12 @@ namespace CryptoExchange.Net.Sockets
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)
@ -85,23 +90,24 @@ namespace CryptoExchange.Net.Sockets
public Task<CallResult<bool>> WaitForEvent(string name, int timeout)
{
return Task.Run(() =>
{
var evnt = Events.Single(e => e.Name == name);
waitingForEvents.Add(evnt);
return evnt.Wait(timeout);
});
var evnt = Events.Single(e => e.Name == name);
waitingForEvents.Add(evnt);
return Task.Run(() => evnt.Wait(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;
waitingForEvents.Add(evnt);
return evnt.Wait(timeout);
});
var evnt = Events.Single(e => e.Name == name);
evnt.WaitingId = id;
waitingForEvents.Add(evnt);
return Task.Run(() => 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()