Beispiel #1
0
        public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)
        {
            IBaseMessagePart bodyPart = pInMsg.BodyPart;

            if (bodyPart != null)
            {
                Stream       originalStream = bodyPart.GetOriginalDataStream();
                MemoryStream memStream      = new MemoryStream();
                byte[]       buffer         = new Byte[1024];
                int          bytesRead      = 1024;

                while (bytesRead != 0)
                {
                    bytesRead = originalStream.Read(buffer, 0, buffer.Length);
                    memStream.Write(buffer, 0, bytesRead);
                }

                memStream.Position = 0;

                if (originalStream != null)
                {
                    using (ZipArchive zipArchive = new ZipArchive(memStream, ZipArchiveMode.Read))
                    {
                        foreach (ZipArchiveEntry entry in zipArchive.Entries)
                        {
                            MemoryStream entryStream           = new MemoryStream();
                            byte[]       entrybuffer           = new Byte[1024];
                            int          entryBytesRead        = 1024;
                            Stream       zipArchiveEntryStream = entry.Open();
                            while (entryBytesRead != 0)
                            {
                                entryBytesRead = zipArchiveEntryStream.Read(entrybuffer, 0, entrybuffer.Length);
                                entryStream.Write(entrybuffer, 0, entryBytesRead);
                            }

                            IBaseMessage outMessage;
                            outMessage = pContext.GetMessageFactory().CreateMessage();
                            outMessage.AddPart("Body", pContext.GetMessageFactory().CreateMessagePart(), true);
                            entryStream.Position     = 0;
                            outMessage.BodyPart.Data = entryStream;
                            ContextExtensions.Promote(pInMsg.Context, new ContextProperty(FileProperties.ReceivedFileName), entry.Name);
                            outMessage.Context = PipelineUtil.CloneMessageContext(pInMsg.Context);
                            _qOutMessages.Enqueue(outMessage);
                        }
                    }
                }
            }
        }