private void ComDataReceived(ICommunication icommunication) { int bytesToRead = icommunication.BytesToRead; var buffer = new byte[bytesToRead]; icommunication.Read(buffer, 0, bytesToRead); if (_dataList.Count > ReadBufferSize) { _dataList.Clear(); } _dataList.AddRange(buffer); if (OnRawDataReceived != null) { _listRawDataReceivedHandler.Clear(); Delegate[] invocationList = OnRawDataReceived.GetInvocationList(); int index = 0; while (true) { if (index >= invocationList.Length) { break; } RawDataReceivedHandler item = (RawDataReceivedHandler)invocationList[index]; try { item(buffer); } catch (InvalidOperationException) { _listRawDataReceivedHandler.Add(item); } index++; } foreach (RawDataReceivedHandler handler2 in _listRawDataReceivedHandler) { OnRawDataReceived = (RawDataReceivedHandler)Delegate.Remove(OnRawDataReceived, handler2); } } bool needContinue = true; while (needContinue) { foreach (IAnalyzer analyzer in Analyzers) { analyzer.SearchBuffer(_dataList); if (analyzer.Raw.Length > 0) { analyzer.Analyze(); analyzer.Raw = new byte[0]; needContinue = _dataList.Count > 0; } else { needContinue = false; } } } }
private void Connection_DataReceived(object sender, DataReceivedEventArgs e) { if (string.IsNullOrWhiteSpace(e.Data)) { return; } var rawData = e.Data; OnRawDataReceived?.Invoke(this, e.Data); var parsedIRCMessage = new ParsedIrcMessage(rawData); OnIrcMessageParsed?.Invoke(this, parsedIRCMessage); var serverMessage = IrcMessage.Create(parsedIRCMessage); EventHub.Trigger(serverMessage); }