BTool.CommParser.ParseData C# (CSharp) Méthode

ParseData() public méthode

public ParseData ( byte &type, ushort &opCode, ushort &eventOpCode, byte &length, byte &data ) : bool
type byte
opCode ushort
eventOpCode ushort
length byte
data byte
Résultat bool
        public bool ParseData(ref byte type, ref ushort opCode, ref ushort eventOpCode, ref byte length, ref byte[] data)
        {
            bool data_presents = false;
            bufferMutex.WaitOne();
            if (dataBuffer.Count != 0)
            {
                switch (parserState)
                {
                    case CommParser.ParserStateEnum.packet_type_token:
                        if ((byte)dataBuffer.Peek() == 4)
                        {
                            type = (byte)dataBuffer.Dequeue();
                            parserState = CommParser.ParserStateEnum.event_code_token;
                        }
                        else
                            dataBuffer.Dequeue();
                        break;
                    case CommParser.ParserStateEnum.event_code_token:
                        opCode = (ushort)(byte)dataBuffer.Dequeue();
                        parserState = CommParser.ParserStateEnum.length_token;
                        break;
                    case CommParser.ParserStateEnum.eop0_token:
                        eventOpCode = (ushort)(byte)dataBuffer.Dequeue();
                        parserState = CommParser.ParserStateEnum.eop1_token;
                        break;
                    case CommParser.ParserStateEnum.eop1_token:
                        eventOpCode |= (ushort)((ushort)(byte)dataBuffer.Dequeue() << 8);
                        parserState = CommParser.ParserStateEnum.data_token;
                        break;
                    case CommParser.ParserStateEnum.length_token:
                        length = (byte)dataBuffer.Dequeue();
                        parserState =
                            (opCode == 19 || opCode == 0xff)
                            ? CommParser.ParserStateEnum.eop0_token
                            : CommParser.ParserStateEnum.data_token;
                        break;
                    case CommParser.ParserStateEnum.data_token:
                        if (type == 4)
                        {
                            int pack_length =
                                (opCode == 19 || opCode == 0xff)
                                ? length - 2
                                : length;
                            if (dataBuffer.Count >= pack_length)
                            {
                                data = new byte[pack_length];
                                for (int index = 0; index < data.Length; ++index)
                                    data[index] = (byte)dataBuffer.Dequeue();
                                data_presents = true;
                                parserState = CommParser.ParserStateEnum.packet_type_token;
                            }
                        }
                        else
                        {
                            data_presents = false;
                            parserState = CommParser.ParserStateEnum.packet_type_token;
                        }
                        break;
                }
            }
            bufferMutex.ReleaseMutex();
            return data_presents;
        }