imBMW.iBus.MessageParser.Parse C# (CSharp) Method

Parse() public method

public Parse ( byte data ) : void
data byte
return void
        public void Parse(byte[] data)
        {
            if (buffer == null)
            {
                buffer = data;
            }
            else
            {
                buffer = buffer.Combine(data);
            }
            if (!CanStartWith(buffer))
            {
                if (CanStartWith(data))
                {
                    buffer = data;
                }
                else
                {
                    var tmp = buffer;
                    buffer = null;
                    throw new Exception("Wrong data: " + tmp.ToHex(' '));
                }
            }
            Message m;
            while (buffer != null && (m = TryCreate(buffer)) != null)
            {
                if (GetPacketLength(m) == buffer.Length)
                {
                    buffer = null;
                }
                else
                {
                    buffer = buffer.Skip(GetPacketLength(m));
                }
                try
                {
                    var e = MessageReceived;
                    if (e != null)
                    {
                        e(m);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "processing message by MessageParser");
                }
            }
        }

Usage Example

Exemplo n.º 1
0
        public static void Register(BluetoothWT32 wt32)
        {
            if (client != null)
            {
                throw new Exception("InternalCommunications already registered.");
            }
            client = wt32;

            var wt32Parser = new MessageParser();
            wt32Parser.MessageReceived += m =>
            {
                if (m is InternalMessage)
                {
                    ProcessInternalMessage((InternalMessage)m);
                }
                else
                {
                    Manager.EnqueueMessage(m);
                }
            };
            wt32.BTCommandReceived += (s, l, c) =>
            {
                if (l == wt32.SPPLink)
                {
                    try
                    {
                        wt32Parser.Parse(c);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "iBus from WT32", "BT <");
                    }
                }
            };
            Manager.AfterMessageReceived += (m) =>
            {
                if (HasConnection)
                {
                    try
                    {
                        wt32.SendCommand(m.Message.Packet, wt32.SPPLink, "iBus data");
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "iBus to WT32", "> BT");
                    }
                }
            };
        }
All Usage Examples Of imBMW.iBus.MessageParser::Parse