사용자가 의도치 않게 websocket 종료 될경우 다시 실행되도록 함

This commit is contained in:
kyh
2023-07-03 14:32:59 +09:00
parent 1cefd84298
commit 10c95ba0a0

View File

@@ -210,48 +210,51 @@ namespace Million.Manager
private async void ThreadEventAsync()
{
string WebSocketUrl = "wss://api.upbit.com/websocket/v1";
ClientWebSocket webSocket = new ClientWebSocket();
try
realtimeConclusions.Clear();
while (Flag)
{
await webSocket.ConnectAsync(new Uri(WebSocketUrl), CancellationToken.None);
var dic = new List<Dictionary<string, object>>();
dic.Add(new Dictionary<string, object>() { { "ticket", "test" } });
dic.Add(new Dictionary<string, object>() { { "type", "trade" }, { "codes", CommonProperty.recentlyMarketOfPlaceList.Where(t=>t.CoinFullName.Contains("KRW-")).Select(t=>t.CoinFullName).ToList() } });
ClientWebSocket webSocket = new ClientWebSocket();
await SendMessage(webSocket, JsonConvert.SerializeObject(dic));
// 데이터 수신을 위한 반복문 시작
while (webSocket.State == WebSocketState.Open && Flag)
try
{
byte[] buffer = new byte[1024 * 10];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
// 수신한 데이터 처리
var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
await webSocket.ConnectAsync(new Uri(WebSocketUrl), CancellationToken.None);
var dic = new List<Dictionary<string, object>>();
dic.Add(new Dictionary<string, object>() { { "ticket", "test" } });
dic.Add(new Dictionary<string, object>() { { "type", "trade" }, { "codes", CommonProperty.recentlyMarketOfPlaceList.Where(t => t.CoinFullName.Contains("KRW-")).Select(t => t.CoinFullName).ToList() } });
if (!DataManager.ValidateJSON(message)) continue;
var data = JsonConvert.DeserializeObject<RealtimeConclusion>(message);
await SendMessage(webSocket, JsonConvert.SerializeObject(dic));
lock (obj)
// 데이터 수신을 위한 반복문 시작
while (webSocket.State == WebSocketState.Open && Flag)
{
realtimeConclusions.Add(data);
byte[] buffer = new byte[1024 * 10];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
// 수신한 데이터 처리
var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
if (!DataManager.ValidateJSON(message)) continue;
var data = JsonConvert.DeserializeObject<RealtimeConclusion>(message);
lock (obj)
{
realtimeConclusions.Add(data);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (webSocket.State == WebSocketState.Open)
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
catch (Exception ex)
{
LogManager.WriteLog(ex.Message);
}
finally
{
if (webSocket.State == WebSocketState.Open)
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
webSocket.Dispose();
webSocket.Dispose();
}
}
}