예제 #1
0
        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;
                    }
                }
            }
        }
예제 #2
0
        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);
        }