Пример #1
0
        protected override void OnStart(IConnection con, string conData, CancellationToken disconToken)
        {
            connection     = con;
            connectionData = conData;

            var connectUrl = UrlBuilder.BuildConnect(connection, Name, connectionData);

            if (websocket != null)
            {
                DisposeWebSocket();
            }

            // SignalR uses https, websocket4net uses wss
            connectUrl = connectUrl.Replace("http://", "ws://").Replace("https://", "wss://");

            IDictionary <string, string> cookies = new Dictionary <string, string>();

            if (connection.CookieContainer != null)
            {
                var container = connection.CookieContainer.GetCookies(new Uri(connection.Url));
                foreach (Cookie cookie in container)
                {
                    cookies.Add(cookie.Name, cookie.Value);
                }
            }

            websocket                       = new BaseSocket(log, connectUrl, cookies, connection.Headers);
            websocket.OnError              += WebSocketOnError;
            websocket.OnClose              += WebSocketOnClosed;
            websocket.OnMessage            += WebSocketOnMessageReceived;
            websocket.DataInterpreterString = interpreter;

            if (connection.Proxy != null)
            {
                var proxy = connection.Proxy.GetProxy(new Uri(connectUrl));
                websocket.SetProxy(proxy.Host, proxy.Port);
            }

            if (!websocket.Connect().Result)
            {
                TransportFailed(new Exception("Can't connect"));
            }
        }
        private void PerformConnect(string url)
        {
            if (websocket != null)
            {
                DisposeWebSocket();
            }

            webSocketTokenSource = new CancellationTokenSource();
            webSocketTokenSource.Token.Register(WebSocketTokenSourceCanceled);
            CancellationTokenSource.CreateLinkedTokenSource(webSocketTokenSource.Token, disconnectToken);

            // SignalR uses https, websocket4net uses wss
            url = url.Replace("http://", "ws://").Replace("https://", "wss://");

            IDictionary <string, string> cookies = new Dictionary <string, string>();

            if (connection.CookieContainer != null)
            {
                var container = connection.CookieContainer.GetCookies(new Uri(connection.Url));
                foreach (Cookie cookie in container)
                {
                    cookies.Add(cookie.Name, cookie.Value);
                }
            }

            websocket            = new BaseSocket(url, cookies, connection.Headers);
            websocket.OnError   += WebSocketOnError;
            websocket.OnOpen    += WebSocketOnOpened;
            websocket.OnClose   += WebSocketOnClosed;
            websocket.OnMessage += WebSocketOnMessageReceived;

            if (connection.Proxy != null)
            {
                var proxy = connection.Proxy.GetProxy(new Uri(url));
                websocket.SetProxy(proxy.Host, proxy.Port);
            }

            websocket.Connect().Wait(webSocketTokenSource.Token);
        }