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

added locks to socket

This commit is contained in:
JKorf 2018-12-18 13:41:40 +01:00
parent 90dac4a0d6
commit 4b382ed480

View File

@ -115,7 +115,7 @@ namespace CryptoExchange.Net.Sockets
{ {
while (true) while (true)
{ {
if (socket == null || socket.State != WebSocketState.Open) if (socket?.State != WebSocketState.Open)
return; return;
if (DateTime.UtcNow - LastActionTime > Timeout) if (DateTime.UtcNow - LastActionTime > Timeout)
@ -165,30 +165,37 @@ namespace CryptoExchange.Net.Sockets
public virtual void Reset() public virtual void Reset()
{ {
socket.Dispose(); lock (socketLock)
socket = null; {
socket.Dispose();
socket = null;
}
} }
public virtual void Send(string data) public virtual void Send(string data)
{ {
socket.Send(data); lock (socketLock)
socket?.Send(data);
} }
public virtual async Task<bool> Connect() public virtual async Task<bool> Connect()
{ {
if (socket == null) lock (socketLock)
{ {
socket = new WebSocket(Url, cookies: cookies.ToList(), customHeaderItems: headers.ToList()) if (socket == null)
{ {
EnableAutoSendPing = true, socket = new WebSocket(Url, cookies: cookies.ToList(), customHeaderItems: headers.ToList())
AutoSendPingInterval = 10 {
}; EnableAutoSendPing = true,
socket.Security.EnabledSslProtocols = SSLProtocols; AutoSendPingInterval = 10
socket.Opened += (o, s) => Handle(openHandlers); };
socket.Closed += (o, s) => Handle(closeHandlers); socket.Security.EnabledSslProtocols = SSLProtocols;
socket.Error += (o, s) => Handle(errorHandlers, s.Exception); socket.Opened += (o, s) => Handle(openHandlers);
socket.MessageReceived += (o, s) => Handle(messageHandlers, s.Message); socket.Closed += (o, s) => Handle(closeHandlers);
socket.DataReceived += (o, s) => HandleByteData(s.Data); socket.Error += (o, s) => Handle(errorHandlers, s.Exception);
socket.MessageReceived += (o, s) => Handle(messageHandlers, s.Message);
socket.DataReceived += (o, s) => HandleByteData(s.Data);
}
} }
return await Task.Run(() => return await Task.Run(() =>