Exemple #1
0
        /// <summary>
        /// Serialize this entity's live data to a binary stream
        /// </summary>
        /// <returns>the binary stream</returns>
        public override byte[] Serialize()
        {
            var settings = new XmlWriterSettings {
                OmitXmlDeclaration = true, Encoding = Encoding.UTF8
            };
            var charData = (IInanimateData)DataTemplate;

            var entityData = new XDocument(
                new XElement("root",
                             new XAttribute("formattingVersion", liveDataVersion),
                             new XAttribute("Birthmark", BirthMark),
                             new XAttribute("Birthdate", Birthdate),
                             new XElement("BackingData",
                                          new XAttribute("ID", charData.ID),
                                          new XAttribute("Name", charData.Name),
                                          new XAttribute("LastRevised", charData.LastRevised),
                                          new XAttribute("Created", charData.Created),
                                          new XElement("MobileContainers"),
                                          new XElement("InanimateContainers"),
                                          new XElement("InternalComposition", JsonConvert.SerializeObject(charData.InternalComposition))),
                             new XElement("LiveData",
                                          new XAttribute("Keywords", string.Join(",", Keywords)),
                                          new XElement("DimensionalModel",
                                                       new XAttribute("Length", Model.Length),
                                                       new XAttribute("Height", Model.Height),
                                                       new XAttribute("Width", Model.Width),
                                                       new XAttribute("ID", charData.Model.ModelBackingData.ID),
                                                       new XElement("ModellingData", Model.ModelBackingData.SerializeModel()),
                                                       new XElement("MaterialCompositions", Model.SerializeMaterialCompositions()))),
                             new XElement("Contents"),
                             new XElement("MobilesInside")
                             ));

            foreach (var item in Contents.EntitiesContainedByName())
            {
                entityData.Root.Element("Contents").Add(new XElement("Item",
                                                                     new XAttribute("Birthmark", item.Item2.BirthMark),
                                                                     new XAttribute("Container", item.Item1)));
            }

            foreach (var item in MobilesInside.EntitiesContainedByName().Where(ent => ent.Item2.GetType() != typeof(Player)))
            {
                entityData.Root.Element("MobilesInside").Add(new XElement("Item",
                                                                          new XAttribute("Birthmark", item.Item2.BirthMark),
                                                                          new XAttribute("Container", item.Item1)));
            }

            foreach (var item in charData.MobileContainers)
            {
                entityData.Root.Element("BackingData").Element("MobileContainers").Add(new XElement("Container",
                                                                                                    new XAttribute("Name", item.Name),
                                                                                                    new XAttribute("CapacityVolume", item.CapacityVolume),
                                                                                                    new XAttribute("CapacityWeight", item.CapacityWeight)));
            }
            foreach (var item in charData.InanimateContainers)
            {
                entityData.Root.Element("BackingData").Element("InanimateContainers").Add(new XElement("Container",
                                                                                                       new XAttribute("Name", item.Name),
                                                                                                       new XAttribute("CapacityVolume", item.CapacityVolume),
                                                                                                       new XAttribute("CapacityWeight", item.CapacityWeight)));
            }

            var entityBinaryConvert = new DataUtility.EntityFileData(entityData);

            using (var memoryStream = new MemoryStream())
                using (var xmlWriter = XmlWriter.Create(memoryStream, settings))
                {
                    entityData.WriteTo(xmlWriter);
                    xmlWriter.Flush();
                    entityBinaryConvert.XmlBinary = memoryStream.ToArray();
                }

            return(entityBinaryConvert.XmlBinary);
        }