static void OnMessageCreateAndInit(ref CreateAndInitMsg msg, MyNetworkClient sender) { MemoryStream stream = new MemoryStream(msg.ObjectBuilder, 0, msg.BuilderLength); MyObjectBuilder_EntityBase entityBuilder; if (MyObjectBuilderSerializer.DeserializeGZippedXML(stream, out entityBuilder)) { if (entityBuilder == null) { Debug.Fail("Object builder was not deserialized"); return; } } else { Debug.Fail("Deserialization failed"); return; } MyPhysicalItemDefinition entityDefinition; if (!MyDefinitionManager.Static.TryGetDefinition(msg.DefinitionId, out entityDefinition)) { Debug.Fail("Can not find definition with id:" + msg.DefinitionId.ToString()); return; } MyEntities.CreateAndAddFromDefinition(entityBuilder, entityDefinition); }
public static void SendEntityCreated(MyObjectBuilder_EntityBase entityBuilder, MyDefinitionId myDefinitionId) { var msg = new CreateAndInitMsg(); MemoryStream stream = new MemoryStream(); MyObjectBuilderSerializer.SerializeXML(stream, (MyObjectBuilder_Base)entityBuilder, MyObjectBuilderSerializer.XmlCompression.Gzip, typeof(MyObjectBuilder_EntityBase)); Debug.Assert(stream.Length <= int.MaxValue); if (stream.Length > int.MaxValue) { MySandboxGame.Log.WriteLine("Cannot synchronize created entity: number of bytes when serialized is larger than int.MaxValue!"); return; } msg.ObjectBuilder = stream.ToArray(); msg.BuilderLength = (int)stream.Length; msg.DefinitionId = myDefinitionId; MySession.Static.SyncLayer.SendMessageToAll(ref msg); }
static void OnMessageCreateAndInit(ref CreateAndInitMsg msg, MyNetworkClient sender) { Debug.Fail("Use replication instead of this!"); MemoryStream stream = new MemoryStream(msg.ObjectBuilder, 0, msg.BuilderLength); MyObjectBuilder_EntityBase entityBuilder; if (MyObjectBuilderSerializer.DeserializeGZippedXML(stream, out entityBuilder)) { if (entityBuilder == null) { Debug.Fail("Object builder was not deserialized"); return; } } else { Debug.Fail("Deserialization failed"); return; } MyEntities.CreateAndAddFromDefinition(entityBuilder, msg.DefinitionId); }
public static void SendEntityCreated(MyObjectBuilder_EntityBase entityBuilder, MyDefinitionId myDefinitionId) { Debug.Fail("Use replication instead of this!"); var msg = new CreateAndInitMsg(); MemoryStream stream = new MemoryStream(); MyObjectBuilderSerializer.SerializeXML(stream, (MyObjectBuilder_Base)entityBuilder, MyObjectBuilderSerializer.XmlCompression.Gzip, typeof(MyObjectBuilder_EntityBase)); Debug.Assert(stream.Length <= int.MaxValue); if (stream.Length > int.MaxValue) { MySandboxGame.Log.WriteLine("Cannot synchronize created entity: number of bytes when serialized is larger than int.MaxValue!"); return; } msg.ObjectBuilder = stream.ToArray(); msg.BuilderLength = (int)stream.Length; msg.DefinitionId = myDefinitionId; MySession.Static.SyncLayer.SendMessageToAll(ref msg); }