Esempio n. 1
0
        public void Serialize(Resource res, Stream outputStream)
        {
            var buffer = new BinaryDataWriter(outputStream);

            buffer.Write(Signature.ToCharArray());
            buffer.Write((ushort)res.Version);
            foreach (var layer in res.GetLayers())
            {
                var serializer = handlerProvider.Get(layer);
                if (serializer == null)
                {
                    throw new ResourceException("Unsupported layer type " + layer.GetType().FullName);
                }
                buffer.WriteCString(serializer.LayerName);
                // write each layer to the temporary buffer
                // to be able to prefix layer length
                using (var ms = new MemoryStream())
                    using (var layerBuffer = new BinaryDataWriter(ms))
                    {
                        serializer.Serialize(layerBuffer, layer);
                        buffer.Write((int)ms.Length);
                        buffer.Write(ms.ToArray());
                    }
            }
        }
Esempio n. 2
0
        public ILayerHandler Get(object data)
        {
            var handler = handlers.Find(x => x.DataType == data.GetType());

            if (handler != null)
            {
                return(handler);
            }
            var binaryHandler = binaryHandlerProvider.Get(data);

            if (binaryHandler != null)
            {
                return(new BinLayerHandler(binaryHandler));
            }
            return(null);
        }