private void receive() { Task.Factory.StartNew( async() => { while (ws.State == WebSocketState.Open) { byte[] buffer = new byte[1024]; var result = await ws.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Binary) { closeCheckTimer.Interval = 31000; var resultStr = Decompress(buffer); WebSocketPush.Invoke(resultStr); continue; } if (result.MessageType == WebSocketMessageType.Close) { try { await ws.CloseOutputAsync(WebSocketCloseStatus.Empty, null, cts.Token); } catch (Exception) { break; } break; } } }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
private void receive() { Task.Factory.StartNew( async() => { while (ws.State == WebSocketState.Open) { byte[] buffer = new byte[1024 * 1024]; var result = await ws.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Binary) { closeCheckTimer.Interval = 31000; var resultStr = Decompress(buffer); //If is depth try { if (resultStr.IndexOf("event") < 0 && !(resultStr.IndexOf("depth5") > 0) && resultStr.IndexOf("depth") > 0) { int index_asksStart = resultStr.IndexOf(asks_start); int index_asksEnd = resultStr.IndexOf(asks_end); int index_bidsStart = resultStr.IndexOf(bids_start); int index_bidsEnd = resultStr.IndexOf(bids_end); string beforeAsks = "", asks = "", bids = "", afterBids = ""; if (index_asksStart > 0) { beforeAsks = resultStr.Substring(0, index_asksStart + 8); asks = resultStr.Substring(index_asksStart + 8, index_asksEnd - (index_asksStart + 8)); } if (index_bidsStart > 0 && index_bidsEnd > 0) { bids = resultStr.Substring(index_bidsStart + 8, index_bidsEnd - index_bidsStart - 8); afterBids = resultStr.Substring(index_bidsEnd); } List <string> list_askContents = asks.Split(new[] { "],[" }, StringSplitOptions.None).ToList(); List <string> list_bidContents = bids.Split(new[] { "],[" }, StringSplitOptions.None).ToList(); combineIncrementalData(list_askContents, "asks"); combineIncrementalData(list_bidContents, "bids"); if (list_askContents.Count != 200 && (!list_askContents.Contains("partial"))) { var obj = buildStr_checksum_asks_bids(); int crc32 = getCRC32(obj.Item1); resultStr = "增量数据:" + resultStr + "\n" + "checksum值:" + crc32.ToString() + "\n" + "合并后的" + beforeAsks + obj.Item2 + "],\"bids\":[" + obj.Item3 + afterBids + "\n\n"; } } } catch (Exception e) { resultStr = e.Message + e.StackTrace; } WebSocketPush.Invoke(resultStr); continue; } if (result.MessageType == WebSocketMessageType.Close) { try { await ws.CloseOutputAsync(WebSocketCloseStatus.Empty, null, cts.Token); } catch (Exception) { break; } break; } } }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }