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); }