Пример #1
0
        private void OnOrderBookEventReceived(RealtimeMessage message)
        {
            if (message is RealtimeReceived)
            {
                var receivedMessage = message as RealtimeReceived;
                OnReceived(receivedMessage);
            }

            else if (message is RealtimeOpen)
            {
            }

            else if (message is RealtimeDone)
            {
                var doneMessage = message as RealtimeDone;
                OnDone(doneMessage);
            }

            else if (message is RealtimeMatch)
            {
            }

            else if (message is RealtimeChange)
            {
            }

            else if (message is RealtimeOpen)
            {
            }

            OnUpdated();
        }
Пример #2
0
        private static async void Subscribe(string product, Action <RealtimeMessage> onMessageReceived)
        {
            if (String.IsNullOrWhiteSpace(product))
            {
                throw new ArgumentNullException("product");
            }

            if (onMessageReceived == null)
            {
                throw new ArgumentNullException("onMessageReceived", "Message received callback must not be null.");
            }

            var uri               = new Uri("wss://ws-feed.exchange.coinbase.com");
            var webSocketClient   = new ClientWebSocket();
            var cancellationToken = new CancellationToken();
            var requestString     = String.Format(@"{{""type"": ""subscribe"",""product_id"": ""{0}""}}", product);
            var requestBytes      = UTF8Encoding.UTF8.GetBytes(requestString);
            await webSocketClient.ConnectAsync(uri, cancellationToken);

            if (webSocketClient.State == WebSocketState.Open)
            {
                var subscribeRequest      = new ArraySegment <byte>(requestBytes);
                var sendCancellationToken = new CancellationToken();
                await webSocketClient.SendAsync(subscribeRequest, WebSocketMessageType.Text, true, sendCancellationToken);

                while (webSocketClient.State == WebSocketState.Open)
                {
                    var receiveCancellationToken = new CancellationToken();
                    var receiveBuffer            = new ArraySegment <byte>(new byte[1024 * 1024 * 5]); // 5MB buffer
                    var webSocketReceiveResult   = await webSocketClient.ReceiveAsync(receiveBuffer, receiveCancellationToken);

                    if (webSocketReceiveResult.Count == 0)
                    {
                        continue;
                    }

                    var jsonResponse = Encoding.UTF8.GetString(receiveBuffer.Array, 0, webSocketReceiveResult.Count);
                    var jToken       = JToken.Parse(jsonResponse);

                    var typeToken = jToken["type"];
                    if (typeToken == null)
                    {
                        continue;
                    }

                    var             type            = typeToken.Value <string>();
                    RealtimeMessage realtimeMessage = null;

                    switch (type)
                    {
                    case "received":
                        realtimeMessage = new RealtimeReceived(jToken);
                        break;

                    case "open":
                        realtimeMessage = new RealtimeOpen(jToken);
                        break;

                    case "done":
                        realtimeMessage = new RealtimeDone(jToken);
                        break;

                    case "match":
                        realtimeMessage = new RealtimeMatch(jToken);
                        break;

                    case "change":
                        realtimeMessage = new RealtimeChange(jToken);
                        break;

                    default:
                        break;
                    }

                    if (realtimeMessage == null)
                    {
                        continue;
                    }

                    onMessageReceived(realtimeMessage);
                }
            }
        }
Пример #3
0
        private static async void Subscribe(string product, Action <RealtimeMessage> onMessageReceived)
        {
            if (String.IsNullOrWhiteSpace(product))
            {
                throw new ArgumentNullException("product");
            }

            if (onMessageReceived == null)
            {
                throw new ArgumentNullException("onMessageReceived", "Message received callback must not be null.");
            }
            JArray aj = new JArray();


            var uri               = new Uri("wss://ws-feed.gdax.com");
            var webSocketClient   = new ClientWebSocket();
            var cancellationToken = new CancellationToken();

            //jStr.Append()
            var requestString = string.Format("");

            //String.Format(@"{{""type"": ""subscribe"",""product_id"": ""{0}""}}", product);


            //JObject jObj = new JObject(
            //    new JProperty(
            //        "type", "subscribe"),
            //    new JProperty(
            //        "product_ids", new JArray(
            //        "BTC-USD")),
            //    new JProperty(
            //        "channels", new JArray(
            //        "level2", "heartbeat", new JObject(
            //            new JProperty(
            //                "name", "ticker"), new JProperty(
            //                    "product_ids", new JArray(
            //                        "BTC-USD"))))));

            //JObject jObj = new JObject(
            //    new JProperty(
            //        "type", "subscribe"),
            //    new JProperty(
            //        "product_ids", new JArray(
            //        "BTC-USD")),
            //    new JProperty(
            //        "channels", new JArray(
            //        "heartbeat", new JObject(
            //            new JProperty(
            //                "name", "ticker"), new JProperty(
            //                    "product_ids", new JArray(
            //                        "BTC-USD"))))));


            //JObject jObj = new JObject(
            //    new JProperty(
            //        "type", "subscribe"),
            //    new JProperty(
            //        "product_ids", new JArray(
            //        "BTC-USD")),
            //    new JProperty(
            //        "channels", new JArray(
            //        "matches", "heartbeat", new JObject(
            //            new JProperty(
            //                "name", "ticker"), new JProperty(
            //                    "product_ids", new JArray(
            //                        "BTC-USD"))))));


            JObject jObj = new JObject(
                new JProperty(
                    "type", "subscribe"),
                new JProperty(
                    "product_ids", new JArray(
                        "BTC-USD", product)),
                new JProperty(
                    "channels", new JArray(
                        "matches")));

            //Console.WriteLine(jObj.ToString());

            var requestBytes = UTF8Encoding.UTF8.GetBytes(jObj.ToString());
            await webSocketClient.ConnectAsync(uri, cancellationToken);

            if (webSocketClient.State == WebSocketState.Open)
            {
                var subscribeRequest      = new ArraySegment <byte>(requestBytes);
                var sendCancellationToken = new CancellationToken();
                await webSocketClient.SendAsync(subscribeRequest, WebSocketMessageType.Text, true, sendCancellationToken);

                while (webSocketClient.State == WebSocketState.Open)
                {
                    var receiveCancellationToken = new CancellationToken();
                    var receiveBuffer            = new ArraySegment <byte>(new byte[1024 * 1024 * 1]); // 5MB buffer 1024 * 1024 * 5
                    var webSocketReceiveResult   = await webSocketClient.ReceiveAsync(receiveBuffer, receiveCancellationToken);

                    if (webSocketReceiveResult.Count == 0)
                    {
                        continue;
                    }

                    var jsonResponse = Encoding.UTF8.GetString(receiveBuffer.Array, 0, webSocketReceiveResult.Count);
                    //var jToken = JToken.Parse(jsonResponse);
                    var jToken = JObject.Parse(jsonResponse);

                    var typeToken = jToken["type"];
                    if (typeToken == null)
                    {
                        continue;
                    }

                    var             type            = typeToken.Value <string>();
                    RealtimeMessage realtimeMessage = null;

                    //Console.WriteLine("MSG TYPE: {0}", type);

                    switch (type)
                    {
                    case "received":
                        realtimeMessage = new RealtimeReceived(jToken);
                        break;

                    case "open":
                        realtimeMessage = new RealtimeOpen(jToken);
                        break;

                    case "done":
                        realtimeMessage = new RealtimeDone(jToken);
                        break;

                    case "match":
                        realtimeMessage = new RealtimeMatch(jToken);
                        break;

                    case "change":
                        realtimeMessage = new RealtimeChange(jToken);
                        break;

                    default:
                        break;
                    }

                    if (realtimeMessage == null)
                    {
                        continue;
                    }

                    onMessageReceived(realtimeMessage);
                }
            }
        }
        private void OnOrderBookEventReceived(RealtimeMessage message)
        {
            if (message is RealtimeReceived)
            {
                var receivedMessage = message as RealtimeReceived;
                OnReceived(receivedMessage);
            }

            else if (message is RealtimeOpen)
            {

            }

            else if (message is RealtimeDone)
            {
                var doneMessage = message as RealtimeDone;
                OnDone(doneMessage);
            }

            else if (message is RealtimeMatch)
            {

            }

            else if (message is RealtimeChange)
            {

            }

            else if (message is RealtimeOpen)
            {

            }

            OnUpdated();
        }