public BaseWebSocket(InstanceLogger logger) { if (logger == null) { throw new ArgumentNullException("logger"); } this.logger = logger; dataBuilder = new ThresholdedDataBuilder(logger); }
/// <summary> /// Push new data into the parser /// </summary> /// <param name="s"></param> public void Receive(IDataStream s) { lock (contentLock) { while (s.Length > 0) { while (!readingPayload && s.Length > 0) { missing = parser.ParseHeader(s); if (missing <= 0) { var inner = s; if (missing < 0) { var split = s.Length + missing; inner = new StreamSegment(s, 0, split); s = new StreamSegment(s, split); } else { s = EmptyData.Instance; } var ret = parser.Close(inner); parser = new WebSocketMessage.Parser(); onMessageParsed(ret); } else { readingPayload = true; dataBuilder.Append(s); return; } } if (readingPayload) { if (s.Length < missing) { dataBuilder.Append(s); missing -= s.Length; return; } else { dataBuilder.Append(new StreamSegment(s, 0, missing)); s = new StreamSegment(s, missing); missing = 0; readingPayload = false; var bin = dataBuilder.Close(); dataBuilder = new ThresholdedDataBuilder(logger); var msg = parser.Close(bin); parser = new WebSocketMessage.Parser(); onMessageParsed(msg); } } } } }
public HttpMessageParser(InstanceLogger logger, bool isResponse) { if (logger == null) { throw new ArgumentNullException("logger"); } this.logger = logger; this.isResponse = isResponse; dataBuilder = new ThresholdedDataBuilder(logger); }