Exemplo n.º 1
0
        /// <summary>
        /// Connects to a Websocket endpoint.
        /// </summary>
        /// <typeparam name="T">Type used to parsed the response message.</typeparam>
        /// <param name="parameters">Paremeters to send to the Websocket.</param>
        /// <param name="messageDelegate">Deletage to callback after receive a message.</param>
        /// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
        public WebSocket ConnectToWebSocket <T>(string parameters, MessageHandler <T> messageHandler, Action <CloseEventArgs> onClose = null, bool useCustomParser = false)
        {
            var finalEndpoint = _webSocketEndpoint + parameters;

            var ws = new WebSocket(finalEndpoint);

            ws.OnMessage += (sender, e) =>
            {
                dynamic eventData = null;

                if (useCustomParser)
                {
                    var customParser = new CustomParser();
                    var datum        = JsonConvert.DeserializeObject <dynamic>(e.Data);
                    if (datum is JObject jobject)
                    {
                        if (jobject["lastUpdateId"] != null)
                        {
                            eventData = customParser.GetParsedDepthPartialMessage(jobject);
                        }
                        else
                        {
                            eventData = customParser.GetParsedDepthMessage(jobject);
                        }
                    }
                }
                else
                {
                    eventData = JsonConvert.DeserializeObject <T>(e.Data);
                }

                messageHandler(eventData);
            };

            ws.OnClose += (sender, e) =>
            {
                _openSockets.Remove(ws);
                onClose?.Invoke(e);
            };

            ws.OnError += (sender, e) =>
            {
                if (ws.ReadyState != WebSocketState.Open)
                {
                    _openSockets.Remove(ws);
                }
            };
            ws.OnOpen += (s, e) => _openSockets.Add(ws);
            ws.Connect();
            return(ws);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Connects to a Websocket endpoint.
        /// </summary>
        /// <typeparam name="T">Type used to parsed the response message.</typeparam>
        /// <param name="parameters">Paremeters to send to the Websocket.</param>
        /// <param name="messageDelegate">Deletage to callback after receive a message.</param>
        /// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
        public void ConnectToWebSocket <T>(string parameters, MessageHandler <T> messageHandler, int useCustomParser = 0)
        {
            var finalEndpoint = _webSocketEndpoint + parameters;

            var ws = new WebSocket(finalEndpoint);

            ws.OnMessage += (sender, e) =>
            {
                dynamic eventData;

                if (useCustomParser == 0)
                //DEPTH
                {
                    var customParser = new CustomParser();
                    eventData = customParser.GetParsedDepthMessage(JsonConvert.DeserializeObject <dynamic>(e.Data));
                }
                else if (useCustomParser == 1)
                //TRADEAGG
                {
                    //eventData = JsonConvert.DeserializeObject<T>(e.Data);
                    var customParser = new CustomParser();
                    eventData = customParser.GetAggTradeMessage(JsonConvert.DeserializeObject <dynamic>(e.Data));
                }
                else// if (useCustomParser == 2)
                //PARTIAL_DEPTH
                {
                    var customParser = new CustomParser();
                    eventData = customParser.GetParsedPartialDepthMessage(JsonConvert.DeserializeObject <dynamic>(e.Data));
                }

                messageHandler(eventData);
            };

            ws.OnClose += (sender, e) =>
            {
                _openSockets.Remove(ws);
            };

            ws.OnError += (sender, e) =>
            {
                _openSockets.Remove(ws);
            };

            ws.Connect();
            _openSockets.Add(ws);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Connects to a Websocket endpoint.
        /// </summary>
        /// <typeparam name="T">Type used to parsed the response message.</typeparam>
        /// <param name="parameters">Paremeters to send to the Websocket.</param>
        /// <param name="messageDelegate">Deletage to callback after receive a message.</param>
        /// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
        public string ConnectToWebSocket <T>(string parameters, MessageHandler <T> messageHandler, Action <string> openHandler, bool useCustomParser = false)
        {
            string finalEndpoint = _webSocketEndpoint + parameters;

            WebSocket ws  = new WebSocket(finalEndpoint);
            string    sid = ws.GetHashCode().ToString();

            ws.OnMessage += (sender, e) =>
            {
                dynamic eventData;

                if (useCustomParser)
                {
                    CustomParser customParser = new CustomParser();
                    var          test         = JsonConvert.DeserializeObject <dynamic>(e.Data);
                    eventData = customParser.GetParsedDepthMessage(test);
                }
                else
                {
                    eventData = JsonConvert.DeserializeObject <T>(e.Data);
                }
                messageHandler(eventData);
            };

            ws.OnOpen += (sender, e) =>
            {
                _openSockets.Add(sid, ws);
                //openHandler(sid);
            };

            ws.OnClose += (sender, e) =>
            {
                //throw new Exception("on close" + e.Reason + " - " + sender.ToString());
                _openSockets.Remove(sid);
            };

            ws.OnError += (sender, e) =>
            {
                //throw new Exception("on error" + e.Message);
                _openSockets.Remove(sid);
            };

            ws.Connect();
            return(sid);
        }
        /// <summary>
        /// Connects to a Websocket endpoint.
        /// </summary>
        /// <typeparam name="T">Type used to parsed the response message.</typeparam>
        /// <param name="parameters">Paremeters to send to the Websocket.</param>
        /// <param name="messageDelegate">Deletage to callback after receive a message.</param>
        /// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
        public void ConnectToWebSocket <T>(string parameters, MessageHandler <T> messageHandler, bool useCustomParser = false)
        {
            var finalEndpoint = _webSocketEndpoint + parameters;

            var ws = new PureWebSocket(finalEndpoint, new PureWebSocketOptions()
            {
                DebugMode           = false,//true,
                SendDelay           = 10,
                IgnoreCertErrors    = true,
                MyReconnectStrategy = new ReconnectStrategy(2000, 4000, 20)
            });

            ws.OnMessage += (data) =>
            {
                dynamic eventData;

                if (useCustomParser)
                {
                    var customParser = new CustomParser();
                    eventData = customParser.GetParsedDepthMessage(JsonConvert.DeserializeObject <dynamic>(data));
                }
                else
                {
                    eventData = JsonConvert.DeserializeObject <T>(data);
                }

                messageHandler(eventData);
            };

            ws.OnClosed += (reason) =>
            {
                _openSockets.Remove(ws);
            };

            ws.OnError += (error) =>
            {
                _openSockets.Remove(ws);
            };

            ws.Connect();
            _openSockets.Add(ws);
        }
        /// <summary>
        /// Connects to a Websocket endpoint.
        /// </summary>
        /// <typeparam name="T">Type used to parsed the response message.</typeparam>
        /// <param name="parameters">Paremeters to send to the Websocket.</param>
        /// <param name="messageDelegate">Deletage to callback after receive a message.</param>
        /// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
        public WebSocket ConnectToWebSocket <T>(string parameters, MessageHandler <T> messageHandler, bool useCustomParser = false)
        {
            var finalEndpoint = _webSocketEndpoint + parameters;

            var ws = new WebSocket(finalEndpoint);

            ws.OnMessage += (sender, e) =>
            {
                dynamic eventData;

                if (useCustomParser)
                {
                    var customParser = new CustomParser();
                    eventData = customParser.GetParsedDepthMessage(JsonConvert.DeserializeObject <dynamic>(e.Data));
                }
                else
                {
                    eventData = JsonConvert.DeserializeObject <T>(e.Data);
                }

                messageHandler(eventData);
            };

            ws.OnClose += (sender, e) =>
            {
                _openSockets.Remove(ws);
            };

            ws.OnError += (sender, e) =>
            {
                _openSockets.Remove(ws);
            };

            ws.Connect();
            _openSockets.Add(ws);
            return(ws);
        }