コード例 #1
0
        private void ParseFrames()
        {
            using (var process = new TSharkProcess(new FramesQuery(NetworkTrace.FullName, mProtocols)))
            {
                var frames = process.StandartOutput.ReadAllFrames();
                var packer = new FramePacker(FrameList);

                int frameIndex      = 0;
                int frameListLength = FrameList.Count;

                foreach (var frame in frames)
                {
                    if (frameIndex < frameListLength - 1)
                    {
                        ++frameIndex;
                    }

                    SetStatusMessage(String.Format("Processing frame {0}/{1}", frameIndex, frameListLength));

                    bool isPacked = packer.PackFrame(frame);
                    //TODO remove frame from the FrameList if not packed

                    Progress = frameIndex * 90 / frameListLength;
                }
            }
        }
コード例 #2
0
        public void TestInputNullData()
        {
            var       packer = new FramePacker();
            Exception ex;
            var       data = packer.Input(null, out ex);

            Assert.AreEqual(0, data);
        }
コード例 #3
0
        public void DecodeTest()
        {
            var       packer = new FramePacker();
            Exception ex;
            var       data = packer.Decode(Arr.Merge(BitConverter.GetBytes(14), Encoding.Default.GetBytes("helloworld")), out ex);

            Assert.AreEqual("helloworld", Encoding.Default.GetString((byte[])data));
        }
コード例 #4
0
        public void InputTests()
        {
            var       packer = new FramePacker();
            Exception ex;
            var       length = packer.Input(Arr.Merge(BitConverter.GetBytes(14), Encoding.Default.GetBytes("helloworld")), out ex);

            Assert.AreEqual(14, length);
        }
コード例 #5
0
        public void TestEncodeNullData()
        {
            var       packer = new FramePacker();
            Exception ex;
            var       data = packer.Encode(null, out ex);

            Assert.AreEqual(null, data);
            Assert.AreNotEqual(null, ex);
        }
コード例 #6
0
        public void EncodeTest()
        {
            var       packer = new FramePacker();
            Exception ex;
            var       data = packer.Encode(Encoding.Default.GetBytes("helloworld"), out ex);

            Assert.AreEqual("14helloworld",
                            BitConverter.ToInt32(Arr.Slice(data, 0, 4), 0) + Encoding.Default.GetString(Arr.Slice(data, 4)));
        }
コード例 #7
0
ファイル: TwitchEmoteProvider.cs プロジェクト: Tankooni/zeebs
        private void AddEmote(string emoteName, Library.ILibraryInternal library, string url)
        {
            if (loadedEmotes.Contains(emoteName))
            {
                return;
            }

            string encodedEmoteName = Utility.EncodeStringForFileName(emoteName);

            byte[] data = null;

            if (Library.FolderExists(TWITCH_CACHE_PATH))
            {
                var qualifiedFilename = string.Format("{0}{1}", TWITCH_CACHE_PATH, encodedEmoteName);
                if (Library.FileExists(qualifiedFilename))
                {
                    data = File.ReadAllBytes(Library.GetFilename(qualifiedFilename));
                }
            }
            MemoryStream imageStream = new MemoryStream();

            if (data == null)
            {
                data = client.DownloadData(url);
                var folder = Library.GetFolderName(TWITCH_CACHE_PATH);

                MagickReadSettings settings = new MagickReadSettings();
                settings.ColorSpace = ColorSpace.sRGB;
                settings.SetDefine(MagickFormat.Png, "format", "png8");

                MagickImageInfo mImageInfo = new MagickImageInfo(data);

                if (mImageInfo.Format != MagickFormat.Gif)
                {
                    using (MagickImage mImage = new MagickImage(data, settings))
                    {
                        mImage.Write(imageStream);
                        imageStream.Position = 0;
                    }
                }
                else
                {
                    using (MagickImageCollection mImages = new MagickImageCollection(data, settings))
                    {
                        //Background is PepePls
                        //SourPls is None
                        var width  = mImages.Max(x => x.Page.Width);
                        var height = mImages.Max(y => y.Page.Height);
                        FramePacker.FrameDisposal frameDisposal;

                        switch (mImages[0].GifDisposeMethod)
                        {
                        case GifDisposeMethod.None:
                            frameDisposal = FramePacker.FrameDisposal.Composite;
                            break;

                        case GifDisposeMethod.Undefined:
                        case GifDisposeMethod.Background:
                        case GifDisposeMethod.Previous:
                        default:
                            frameDisposal = FramePacker.FrameDisposal.Replace;
                            break;
                        }

                        var packedImage = FramePacker.PackListOfImagesToMemStream(
                            mImages.Select(imageFrame => new FramePacker.Frame
                        {
                            Image  = imageFrame.ToBitmap(ImageFormat.Png),
                            X      = imageFrame.Page.X,
                            Y      = imageFrame.Page.Y,
                            Width  = imageFrame.BaseWidth,
                            Height = imageFrame.BaseHeight
                        }).ToArray(),
                            imageStream,
                            width,
                            height,
                            frameDisposal
                            );

                        packedImage.FPS = 1 / ((float)mImages.Select(x => x.AnimationDelay).Average() / 100.0f);

                        JsonWriter.Save(packedImage, string.Format("{0}{1}", TWITCH_CACHE_PATH, encodedEmoteName), true);
                        //mImages[0].Write(imageStream);
                        imageStream.Position = 0;
                    }
                }

                File.WriteAllBytes(string.Format("{0}/{1}", folder, encodedEmoteName), data = imageStream.ToArray());
            }

            library.AddTexture(string.Format("twitch//{0}", emoteName), imageStream);
            loadedEmotes.Add(emoteName);
        }