private async Task ConvertHalcyonPrimToBabylon(HttpListenerContext context, HttpListenerRequest request)
        {
            //halcyon gemoetry is coming in as a primitive flatbuffer object
            //as binary in the body. deserialize and convert using the prim exporter
            ByteBuffer body = await StreamUtil.ReadStreamFullyAsync(request.InputStream);

            ExportResult             babylonExport     = null;
            Tuple <byte[], int, int> babylonFlatbuffer = null;

            //The actual conversion is CPU intensive. Use a thread task
            await Task.Run(() =>
            {
                var prim = HalcyonPrimitive.GetRootAsHalcyonPrimitive(body);
                var part = Mapper.MapFlatbufferPrimToPart(prim);

                var displayData = GroupLoader.Instance.ExtractPrimMesh(part, new GroupLoader.LoaderParams(), null);
                BabylonFlatbufferFormatter formatter = new BabylonFlatbufferFormatter();

                babylonExport     = formatter.Export(displayData);
                babylonFlatbuffer = babylonExport.FaceBlob;
            });

            context.Response.StatusCode = 200;
            context.Response.AddHeader("Content-Type", "application/octet-stream");
            context.Response.AddHeader("Etag", babylonExport.Hash.ToString());

            await context.Response.OutputStream.WriteAsync(babylonFlatbuffer.Item1, babylonFlatbuffer.Item2,
                                                           babylonFlatbuffer.Item3);

            await context.Response.OutputStream.FlushAsync();

            context.Response.Close();
        }
        public void TestSerializeDeserialize()
        {
            var sops = new[]
            {
                Util.RandomSOP("sop1", 1),
                Util.RandomSOP("sop2", 2),
                Util.RandomSOP("sop3", 3)
            };

            var group = new SceneObjectGroup(sops[0]);

            group.AddPart(sops[1]);
            group.AddPart(sops[2]);

            var loaderParams     = new GroupLoader.LoaderParams();
            GroupDisplayData gdd = GroupLoader.Instance.GroupDisplayDataFromSOG(UUID.Zero, loaderParams, group, null, null, null);
            var formatter        = new BabylonFlatbufferFormatter();

            var rawResult = formatter.Export(gdd);
            var result    = rawResult.FaceBlob;

            CompareLogic comp = new CompareLogic
            {
                Config =
                {
                    CompareStaticFields     = false,
                    CompareStaticProperties = false,
                    MembersToIgnore         = PrimCompareIgnoreList
                }
            };

            var fbGroup =
                BabylonFileFlatbuffer.GetRootAsBabylonFileFlatbuffer(new ByteBuffer(result.Item1, result.Item2));

            Assert.NotNull(fbGroup);
        }