/// <summary>
        /// Combines segments into text product.
        /// </summary>
        /// <param name="segments">The segments.</param>
        /// <returns>TextProduct.</returns>
        /// <exception cref="System.ArgumentNullException"></exception>
        public static TextProduct AsTextProduct(this QuickBlockTransferSegment[] segments)
        {
            if (segments == null)
            {
                throw new ArgumentNullException(nameof(segments));
            }

            var lastSegment = segments[segments.Length - 1];
            var content     = segments.Select(b => b.Content).ToList().Combine(true);

            return(TextProduct.Create(lastSegment.Filename, lastSegment.TimeStamp, content, lastSegment.ReceivedAt, lastSegment.Source));
        }
예제 #2
0
        private static void UnZip(CompressedProduct product, IEventPublisher ctx)
        {
            using (var zip = new ZipArchive(product.GetStream(), ZipArchiveMode.Read))
            {
                foreach (var file in zip.Entries)
                {
                    using (var fileStream = file.Open())
                    {
                        var fileName    = file.Name.ToUpperInvariant();
                        var contentType = ContentTypeParser.GetFileContentType(fileName);
                        switch (contentType)
                        {
                        case ContentFileType.Text:
                            using (var text = new StreamReader(fileStream))
                            {
                                var textProduct = TextProduct.Create(fileName, file.LastWriteTime, text.ReadToEnd(),
                                                                     product.ReceivedAt, product.Source);
                                ctx.SendMessage(textProduct);
                                ProcessorEventSource.Log.Info(nameof(ZipExtractor), textProduct.ToString());
                            }
                            break;

                        case ContentFileType.Image:
                            var imageProduct = ImageProduct.Create(
                                fileName, file.LastWriteTime, ReadAllBytes(fileStream), product.ReceivedAt, product.Source);
                            ctx.SendMessage(imageProduct);
                            ProcessorEventSource.Log.Info(nameof(ZipExtractor), imageProduct.ToString());
                            break;

                        // There are no zips within zips :-)

                        default:
                            ProcessorEventSource.Log.Warning(nameof(ZipExtractor),
                                                             "Unknown content file type: " + file.Name);
                            return;
                        }
                    }
                }
            }
        }
예제 #3
0
 private static TextProduct GetFloodWarning() => TextProduct.Create(
     "FLWOAXXXXX.TXT",
     new DateTimeOffset(2015, 6, 5, 23, 45, 0, TimeSpan.Zero),
     Encoding.ASCII.GetBytes(WarningProducts.FloodWarning),
     DateTimeOffset.UtcNow, string.Empty);
예제 #4
0
 private static TextProduct GetTornadoWarning() => TextProduct.Create(
     "TORDDCXXXX.TXT",
     new DateTimeOffset(2015, 6, 5, 0, 56, 0, TimeSpan.Zero),
     Encoding.ASCII.GetBytes(WarningProducts.TornadoWarning),
     DateTimeOffset.UtcNow, string.Empty);