Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }