protected IFrame Pop(NetContext context)
 {
     lock (this)
     {
         return(ProtocolProcessor.GetFrame(context, ref holder));
     }
 }
示例#2
0
 public void Send(string message)
 {
     if (EnsureWebSocketOpen())
     {
         ProtocolProcessor.SendMessage(this, message);
     }
 }
示例#3
0
 public void Send(byte[] data, int offset, int length)
 {
     if (EnsureWebSocketOpen())
     {
         ProtocolProcessor.SendData(this, data, offset, length);
     }
 }
示例#4
0
        public void Close(int statusCode, string reason)
        {
            //The websocket never be opened
            if (Interlocked.CompareExchange(ref m_StateCode, WebSocketStateConst.Closed, WebSocketStateConst.None)
                == WebSocketStateConst.None)
            {
                OnClosed();
                return;
            }

            //The websocket is connecting or in handshake
            if (Interlocked.CompareExchange(ref m_StateCode, WebSocketStateConst.Closing, WebSocketStateConst.Connecting)
                == WebSocketStateConst.Connecting)
            {
                var client = Client;

                if (client != null && client.IsConnected)
                {
                    client.Close();
                    return;
                }

                OnClosed();
                return;
            }

            m_StateCode = WebSocketStateConst.Closing;

            //Disable auto ping
            ClearTimer();
            //Set closing hadnshake checking timer
            m_WebSocketTimer = new Timer(CheckCloseHandshake, null, 5 * 1000, Timeout.Infinite);

            ProtocolProcessor.SendCloseHandshake(this, statusCode, reason);
        }
示例#5
0
 public void Send(IList <ArraySegment <byte> > segments)
 {
     if (EnsureWebSocketOpen())
     {
         ProtocolProcessor.SendData(this, segments);
     }
 }
        public void TypeNameTest()
        {
            Protocol p = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.Inspector10 }, "Chrome-1.0");

            var evaluateCommand = p.GetDomain("Page").GetCommand("searchInResource");
            var result          = evaluateCommand.Returns.Single();

            Assert.AreEqual("SearchMatch[]", result.TypeName.ToString());
        }
示例#7
0
 private void OnConnected()
 {
     CommandReader = ProtocolProcessor.CreateHandshakeReader(this);
     if (Items.Count > 0)
     {
         Items.Clear();
     }
     ProtocolProcessor.SendHandshake(this);
 }
示例#8
0
        public void ToStringTest()
        {
            Protocol p = ProtocolProcessor.LoadProtocol(DeploymentItems.Inspector10, "Chrome-1.0");

            var evaluateCommand = p.GetDomain("Page").GetCommand("searchInResource");
            var result          = evaluateCommand.Returns.Single();
            var items           = result.Items;

            Assert.AreEqual("SearchMatch", items.ToString());
        }
        protected void SendData(NetContext context, IFrame frame)
        {
            lock (this)
            {
                ProtocolProcessor.AddFrame(context, ref dataQueue, frame);
#if VERBOSE
                Debug.WriteLine("pushed (data): " + frame);
#endif
            }
        }
示例#10
0
 /// <summary>
 /// Add a listener to the list
 /// </summary>
 /// <param name="name"> the ProtoName</param>
 /// <param name="callBack">the feed back method</param>
 public void AddListenerEvent(ProtoName name, ProtocolProcessor callBack)
 {
     try
     {
         proDic[(int)name] += callBack;
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
示例#11
0
 /// <summary>
 /// Add once listener
 /// </summary>
 /// <param name="name">name of the listener</param>
 /// <param name="callBack">the call back function</param>
 public void AddOnceListener(ProtoName _name, ProtocolProcessor callBack)
 {
     if (onceListeners.Keys.Contains(_name))
     {
         onceListeners[_name] += callBack;
     }
     else
     {
         onceListeners.Add(_name, callBack);
     }
 }
示例#12
0
        public void ResolveTypeReferencesCommandParameterTest2()
        {
            Protocol p = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.Inspector10 }, "Chrome-1.0");

            ProtocolProcessor.ResolveTypeReferences(p, new Dictionary <string, string>());

            var addInspectedNodeCommand = p.GetDomain("Console").GetCommand("addInspectedNode");
            var nodeId = addInspectedNodeCommand.GetParameter("nodeId");

            Assert.AreEqual("integer", nodeId.TypeName);
        }
示例#13
0
        public void ResolveTypeReferencesCommandParameterTest()
        {
            Protocol p = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.Inspector10 }, "Chrome-1.0");

            ProtocolProcessor.ResolveTypeReferences(p, new Dictionary <string, string>());

            var evaluateCommand  = p.GetDomain("Runtime").GetCommand("evaluate");
            var frameIdParameter = evaluateCommand.GetParameter("frameId");

            Assert.AreEqual("string", frameIdParameter.TypeName);
        }
示例#14
0
        protected void SendData(NetContext context, IList <IFrame> batch)
        {
            lock (this)
            {
                foreach (var frame in batch)
                {
                    ProtocolProcessor.AddFrame(context, ref dataQueue, frame);
#if VERBOSE
                    Debug.WriteLine("pushed (data): " + frame);
#endif
                }
            }
        }
示例#15
0
        public void ResolveTypeReferencesCommandReturnValueTest()
        {
            Dictionary <string, string> explicitMappings = new Dictionary <string, string>();

            explicitMappings.Add("Page.Cookie", "Network.Cookie");

            Protocol p = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.InspectoriOS8 }, "iOS-8.0");

            ProtocolProcessor.ResolveTypeReferences(p, explicitMappings);

            var getCookiesCommand = p.GetDomain("Page").GetCommand("getCookies");
            var cookieArray       = getCookiesCommand.Returns.Single();

            Assert.AreEqual("Network.Cookie[]", cookieArray.TypeName);
        }
示例#16
0
        public void ResolveTypeReferencesCommandReturnValueTest2()
        {
            Dictionary <string, string> explicitMappings = new Dictionary <string, string>();

            explicitMappings.Add("GenericTypes.SearchMatch", "Debugger.SearchMatch");

            Protocol p = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.InspectoriOS8 }, "iOS-8.0");

            ProtocolProcessor.ResolveTypeReferences(p, explicitMappings);

            var searchInResourceCommand = p.GetDomain("Page").GetCommand("searchInResource");
            var searchMatchArray        = searchInResourceCommand.Returns.Single();

            Assert.AreEqual("Debugger.SearchMatch[]", searchMatchArray.TypeName);
        }
示例#17
0
 protected void Push(NetContext context, WebSocketsFrame frame)
 {
     lock (this)
     {
         int maxQuota = context.Handler.MaxIncomingQuota;
         if (maxQuota > 0 && ProtocolProcessor.Sum(holder, f =>
         {
             var typed = f as WebSocketsFrame;
             return(typed == null ? 0 : typed.GetLengthEstimate());
         }) + frame.GetLengthEstimate() > maxQuota)
         {
             throw new InvalidOperationException("Inbound quota exceeded");
         }
         ProtocolProcessor.AddFrame(context, ref holder, frame);
     }
 }
        public void EqualsTest()
        {
            var inspector11 = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.Inspector11 }, "inspector-1.1");
            var protocol    = ProtocolProcessor.LoadProtocol(new[] { DeploymentItems.BrowserProtocol, DeploymentItems.JsProtocol }, "protocol");

            ProtocolProcessor.ResolveTypeReferences(inspector11, new Dictionary <string, string>());
            ProtocolProcessor.ResolveTypeReferences(protocol, new Dictionary <string, string>());

            var stopScreencast10  = inspector11.GetDomain("Page").GetCommand("stopScreencast");
            var stopScreencastTip = protocol.GetDomain("Page").GetCommand("stopScreencast");

            // Quick fact check: both methods have the same string equivalent,
            // void stopScreencast()
            Assert.AreEqual <string>(stopScreencast10.ToString(), stopScreencastTip.ToString());

            Assert.IsTrue(stopScreencast10.Equals(stopScreencastTip));
            Assert.IsTrue(stopScreencastTip.Equals(stopScreencast10));
        }
示例#19
0
 public void Close(int statusCode, string reason)
 {
     m_ClosedArgs = new ClosedEventArgs((short)statusCode, reason);
     if (Interlocked.CompareExchange(ref m_StateCode, 3, -1) == -1)
     {
         OnClosed();
     }
     else if (Interlocked.CompareExchange(ref m_StateCode, 2, 0) == 0)
     {
         TcpClientSession client = Client;
         if (client != null && client.IsConnected)
         {
             client.Close();
         }
         else
         {
             OnClosed();
         }
     }
     else
     {
         m_StateCode = 2;
         ClearTimer();
         m_WebSocketTimer = new Timer(CheckCloseHandshake, null, 5000, -1);
         try
         {
             ProtocolProcessor.SendCloseHandshake(this, statusCode, reason);
         }
         catch (Exception e)
         {
             if (Client != null)
             {
                 OnError(e);
             }
         }
     }
 }
示例#20
0
        IFrame IProtocolProcessor.GetOutboundFrame(NetContext context)
        {
            lock (this)
            {
                var result = ProtocolProcessor.GetFrame(context, ref controlQueue);
                if (result != null)
                {
#if VERBOSE
                    Debug.WriteLine("popped (control): " + result);
#endif
                }
                else
                {
                    result = ProtocolProcessor.GetFrame(context, ref dataQueue);
                    if (result != null)
                    {
#if VERBOSE
                        Debug.WriteLine("popped (data): " + result);
#endif
                    }
                }
                return(result);
            }
        }
示例#21
0
        private void Initialize(string uri, string subProtocol, List <KeyValuePair <string, string> > cookies, List <KeyValuePair <string, string> > customHeaderItems, string userAgent, string origin, WebSocketVersion version)
        {
            if (version == WebSocketVersion.None)
            {
                NotSpecifiedVersion = true;
                version             = WebSocketVersion.Rfc6455;
            }

            Version           = version;
            ProtocolProcessor = GetProtocolProcessor(version);
            CommandReader     = ProtocolProcessor.CreateHandshakeReader(this);

            Cookies = cookies;

            Origin = origin;

            if (!string.IsNullOrEmpty(userAgent))
            {
                if (customHeaderItems == null)
                {
                    customHeaderItems = new List <KeyValuePair <string, string> >();
                }

                customHeaderItems.Add(new KeyValuePair <string, string>(UserAgentKey, userAgent));
            }

            if (customHeaderItems != null && customHeaderItems.Count > 0)
            {
                CustomHeaderItems = customHeaderItems;
            }

            var handshakeCmd = new Command.Handshake();

            m_CommandDict.Add(handshakeCmd.Name, handshakeCmd);
            var textCmd = new Command.Text();

            m_CommandDict.Add(textCmd.Name, textCmd);
            var dataCmd = new Command.Binary();

            m_CommandDict.Add(dataCmd.Name, dataCmd);
            var closeCmd = new Command.Close();

            m_CommandDict.Add(closeCmd.Name, closeCmd);
            var pingCmd = new Command.Ping();

            m_CommandDict.Add(pingCmd.Name, pingCmd);
            var pongCmd = new Command.Pong();

            m_CommandDict.Add(pongCmd.Name, pongCmd);
            var badRequestCmd = new Command.BadRequest();

            m_CommandDict.Add(badRequestCmd.Name, badRequestCmd);

            State = WebSocketState.None;

            SubProtocol = subProtocol;

            Items = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

            TcpClientSession client;

            if (uri.StartsWith(m_UriPrefix, StringComparison.OrdinalIgnoreCase))
            {
                client = CreateClient(uri);
            }
            else if (uri.StartsWith(m_SecureUriPrefix, StringComparison.OrdinalIgnoreCase))
            {
#if SILVERLIGHT
                throw new ArgumentException("WebSocket4Net (Silverlight/WindowsPhone) cannot support wss yet.", "uri");
#else
                client = CreateSecureClient(uri);
#endif
            }
            else
            {
                throw new ArgumentException("Invalid uri", "uri");
            }

            client.Connected    += new EventHandler(client_Connected);
            client.Closed       += new EventHandler(client_Closed);
            client.Error        += new EventHandler <ErrorEventArgs>(client_Error);
            client.DataReceived += new EventHandler <DataEventArgs>(client_DataReceived);

            Client = client;
        }
示例#22
0
 void OnConnected()
 {
     ProtocolProcessor.SendHandshake(this);
 }
示例#23
0
 public void Close(int statusCode, string reason)
 {
     State = WebSocketState.Closing;
     ProtocolProcessor.SendCloseHandshake(this, statusCode, reason);
 }