protected IFrame Pop(NetContext context) { lock (this) { return(ProtocolProcessor.GetFrame(context, ref holder)); } }
public void Send(string message) { if (EnsureWebSocketOpen()) { ProtocolProcessor.SendMessage(this, message); } }
public void Send(byte[] data, int offset, int length) { if (EnsureWebSocketOpen()) { ProtocolProcessor.SendData(this, data, offset, length); } }
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); }
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()); }
private void OnConnected() { CommandReader = ProtocolProcessor.CreateHandshakeReader(this); if (Items.Count > 0) { Items.Clear(); } ProtocolProcessor.SendHandshake(this); }
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 } }
/// <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); } }
/// <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); } }
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); }
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); }
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 } } }
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); }
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); }
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)); }
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); } } } }
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); } }
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; }
void OnConnected() { ProtocolProcessor.SendHandshake(this); }
public void Close(int statusCode, string reason) { State = WebSocketState.Closing; ProtocolProcessor.SendCloseHandshake(this, statusCode, reason); }