위와 내용 같음
This commit is contained in:
@@ -21,6 +21,8 @@ namespace BitgetAPI.WebService
|
||||
{
|
||||
public class WebConnection
|
||||
{
|
||||
public Thread th_PingTimer {get; set;} = null;
|
||||
|
||||
public static object SendWebServer(CommonProperty.ExchangeWebReqType exchangeWebReqType, string url = "",
|
||||
MarketCandleDataList marketCandleDataList = null, CommonProperty.MCandleTimeType interval = MCandleTimeType.M1,
|
||||
string postData = "", string subUri = "")
|
||||
@@ -147,21 +149,29 @@ namespace BitgetAPI.WebService
|
||||
candleData.Vol_USD = Convert.ToDouble(item[6]);
|
||||
|
||||
// 같은 시간이 존재하면 업데이트 : 1개밖에 없음
|
||||
var sameCandleData = candleDataList.Find(i => i.Argument.Minute == candleData.Argument.Minute &&
|
||||
i.Argument.Hour == candleData.Argument.Hour);
|
||||
var sameCandleData_WebService = candleDataList.Find(i => i.Argument.Minute == candleData.Argument.Minute &&
|
||||
i.Argument.Hour == candleData.Argument.Hour && i.WebSocketUpdate == true);
|
||||
|
||||
if (sameCandleData != null)
|
||||
// 기존 웹소켓으로 부터 받은 데이터에 수정 등록
|
||||
if (sameCandleData_WebService != null)
|
||||
{
|
||||
// 종가 => 웹소켓 데이터 사용 (웹 서비스 호출 데이터 중 마지막 데이터는 캔들이 완성되지 않음)
|
||||
// 시가 => 웹 서비스 데이터 사용
|
||||
sameCandleData.Open = candleData.Open;
|
||||
sameCandleData_WebService.Open = candleData.Open;
|
||||
// 저가, 고가 => 비교해서 사용
|
||||
sameCandleData.Low = Math.Min(sameCandleData.Low, candleData.Low);
|
||||
sameCandleData.High = Math.Max(sameCandleData.High, candleData.High);
|
||||
}
|
||||
}
|
||||
sameCandleData_WebService.Low = Math.Min(sameCandleData_WebService.Low, candleData.Low);
|
||||
sameCandleData_WebService.High = Math.Max(sameCandleData_WebService.High, candleData.High);
|
||||
|
||||
return candleDatas;
|
||||
sameCandleData_WebService.WebServiceUpdate = true;
|
||||
}
|
||||
// 웹 서비스로 받은 데이터를 새로 추가
|
||||
else
|
||||
{
|
||||
candleDataList.Add(candleData);
|
||||
candleData.WebServiceUpdate = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
@@ -211,9 +221,9 @@ namespace BitgetAPI.WebService
|
||||
string WebSocketUrl = "wss://ws.bitget.com/v2/ws/public";
|
||||
string message = "";
|
||||
var tempStrData = "";
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
await webSocket.ConnectAsync(new Uri(WebSocketUrl), CancellationToken.None);
|
||||
// 연결이 성공적으로 이루어지면 처리할 코드 작성
|
||||
Console.WriteLine("WebSocket 연결 성공");
|
||||
@@ -240,12 +250,9 @@ namespace BitgetAPI.WebService
|
||||
|
||||
var jsonData = JsonConvert.SerializeObject(dic);
|
||||
|
||||
|
||||
//await SendMessage(webSocket, jsonData);
|
||||
|
||||
// Ping 유지용 (25초)
|
||||
var pingTimer = new Thread(() => ContinuePing(webSocket));
|
||||
pingTimer.Start();
|
||||
th_PingTimer = new Thread(() => ContinuePing(webSocket));
|
||||
th_PingTimer.Start();
|
||||
|
||||
await SendMessage(webSocket, jsonData);
|
||||
|
||||
@@ -313,8 +320,10 @@ namespace BitgetAPI.WebService
|
||||
candleDataList.Add(candleData);
|
||||
else
|
||||
{
|
||||
var lastCandleData_Edit = candleDataList.ToList();
|
||||
|
||||
// 마지막 시간 데이터 가져오기
|
||||
var lastCandleData = candleDataList.Find(j=>j.Argument == candleDataList.Max(i => i.Argument));
|
||||
var lastCandleData = lastCandleData_Edit.Find(j=>j.Argument == lastCandleData_Edit.Max(i => i.Argument));
|
||||
|
||||
// 업데이트 or 추가
|
||||
bool updateFlag = true;
|
||||
@@ -372,6 +381,8 @@ namespace BitgetAPI.WebService
|
||||
if(lastCandleData.Low == 0 || lastCandleData.Low > candleData.Close) lastCandleData.Low = candleData.Close;
|
||||
// 고가 등록
|
||||
if (lastCandleData.High == 0 || lastCandleData.High < candleData.Close) lastCandleData.High = candleData.Close;
|
||||
|
||||
lastCandleData.WebSocketUpdate = true;
|
||||
}
|
||||
// 없는 경우 추가
|
||||
else
|
||||
@@ -379,9 +390,11 @@ namespace BitgetAPI.WebService
|
||||
// 새 데이터 등록
|
||||
candleDataList.Add(candleData);
|
||||
|
||||
// 시가 등록
|
||||
// 1분 이상 Ticker가 없는 겨우는 Open 가만 가격이 등록됨
|
||||
candleData.Open = candleData.Close;
|
||||
|
||||
candleData.WebSocketUpdate = true;
|
||||
|
||||
// 기존 데이터 삭제
|
||||
if (candleDataList.Count > 250)
|
||||
{
|
||||
@@ -499,36 +512,10 @@ namespace BitgetAPI.WebService
|
||||
#endregion
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
//var sendTime = dt.AddMilliseconds(Convert.ToDouble(datalist["ts"])).ToLocalTime();
|
||||
|
||||
// Candle 리스트에 데이터 쌓기
|
||||
//var marketCandleList = commonProperty.candleDataLists.Find(i => i.ConGoodsData.MarketName == candleInfo[0]["instId"].ToString());
|
||||
|
||||
|
||||
// 분 업데이트 (1,3,5,10,15,30)
|
||||
//if(recieveTime.Second == 0)
|
||||
{
|
||||
|
||||
}
|
||||
// 시 업데이트 (1,4,6)
|
||||
//if(recieveTime.Minute == 0)
|
||||
{
|
||||
|
||||
}
|
||||
//else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// 요청시간
|
||||
|
||||
// Candle 시간
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
@@ -539,13 +526,15 @@ namespace BitgetAPI.WebService
|
||||
{
|
||||
if (webSocket.State == WebSocketState.Open)
|
||||
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
|
||||
|
||||
webSocket.Dispose();
|
||||
|
||||
// 웹소켓 재귀
|
||||
BitGetWebSocektStart(bitgetWebSocketType, chnnelType);
|
||||
}
|
||||
}
|
||||
|
||||
// Ping 테스트 (25초), 30초에 한번 응답 확인 필요
|
||||
private async void ContinuePing(ClientWebSocket webSocket)
|
||||
public static async void ContinuePing(ClientWebSocket webSocket)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
@@ -556,9 +545,15 @@ namespace BitgetAPI.WebService
|
||||
|
||||
private static async Task SendMessage(ClientWebSocket webSocket, string message)
|
||||
{
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(message);
|
||||
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
|
||||
Console.WriteLine("메시지 전송: " + message);
|
||||
try
|
||||
{
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(message);
|
||||
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
|
||||
Console.WriteLine("메시지 전송: " + message);
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ValidateJSON(string s)
|
||||
|
||||
Reference in New Issue
Block a user