BACSharp.BacNetListener.ReassembleMessage C# (CSharp) Метод

ReassembleMessage() приватный Метод

private ReassembleMessage ( ArrayList messageList, byte invokeId ) : BacNetRawMessage
messageList System.Collections.ArrayList
invokeId byte
Результат BACSharp.Types.BacNetRawMessage
        private BacNetRawMessage ReassembleMessage(ArrayList messageList, byte invokeId)
        {
            bool firstMsg = true;
            ArrayList resMsg = new ArrayList();
            foreach (var message in messageList)
            {
                BacNetRawMessage msg = message as BacNetRawMessage;
                if (msg == null || msg.Apdu[1] != invokeId) continue;

                if (firstMsg)
                {
                    resMsg.AddRange(msg.Bvlc);
                    resMsg.AddRange(msg.Npdu);
                    byte[] firstApdu = new byte[msg.Apdu.Length - 2];
                    firstApdu[0] = msg.Apdu[0];
                    firstApdu[1] = msg.Apdu[1];
                    for (int i = 4;i< msg.Apdu.Length; i++)
                        firstApdu[i - 2] = msg.Apdu[i];
                    resMsg.AddRange(firstApdu);
                    firstMsg = false;
                }
                else
                {
                    byte[] anyApdu = new byte[msg.Apdu.Length - 5];
                    Array.Copy(msg.Apdu, 5, anyApdu, 0, anyApdu.Length);
                    resMsg.AddRange(anyApdu);
                }
            }
            BacNetRawMessage res = new BacNetRawMessage();
            byte[] length = ByteConverter.GetBytes((ushort)resMsg.Count);
            resMsg[2] = length[0];
            resMsg[3] = length.Length == 2 ? length[1] : (byte)0;
            res.All = (byte[]) resMsg.ToArray(typeof (byte));
            return res;
        }