//  Read this object from message-in
        internal override bool Read(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion)
        {
            if (base.Read(binaryReader, senderEndPoint, gameVersion) == false)
            {
                return(NetworkError());
            }

            // TODO: remove
            Color?dustColor = MyMwcMessageIn.ReadColorEx(binaryReader, senderEndPoint);

            if (dustColor == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("dustColor: " + dustColor.ToString());

            int?countSectorObjects = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countSectorObjects == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("Sector object count: " + countSectorObjects);
            SectorObjects = new List <MyMwcObjectBuilder_Base>(countSectorObjects.Value);
            for (int i = 0; i < countSectorObjects; i++)
            {
                MyMwcObjectBuilder_Base sectorObject = MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint);
                if (sectorObject == null)
                {
                    return(NetworkError());
                }
                if (sectorObject.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                SectorObjects.Add(sectorObject);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Sector objects read");

            // Read object groups
            int?countObjectGroups = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countObjectGroups == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("Object groups count: " + countObjectGroups);
            ObjectGroups = new List <MyMwcObjectBuilder_ObjectGroup>();
            for (int i = 0; i < countObjectGroups; i++)
            {
                MyMwcObjectBuilder_ObjectGroup objectGroup = MyMwcObjectBuilder_ObjectGroup.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_ObjectGroup;
                if (objectGroup == null)
                {
                    return(NetworkError());
                }
                if (objectGroup.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                ObjectGroups.Add(objectGroup);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Object groups read");

            // Read snap point links
            int?countSnapPointLinks = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countSnapPointLinks == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("Snap point links count: " + countSnapPointLinks);
            SnapPointLinks = new List <MyMwcObjectBuilder_SnapPointLink>();
            for (int i = 0; i < countSnapPointLinks; i++)
            {
                MyMwcObjectBuilder_SnapPointLink snapPointLink = MyMwcObjectBuilder_SnapPointLink.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_SnapPointLink;
                if (snapPointLink == null)
                {
                    return(NetworkError());
                }
                if (snapPointLink.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                SnapPointLinks.Add(snapPointLink);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Snap point links read");

            bool?fromGenerator = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!fromGenerator.HasValue)
            {
                return(NetworkError());
            }
            FromGenerator = fromGenerator.Value;
            MyMwcLog.IfNetVerbose_AddToLog("From generator read: " + FromGenerator);

            // Version
            int?version = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (!version.HasValue)
            {
                return(NetworkError());
            }
            this.Version = version.Value;

            var position = MyMwcMessageIn.ReadVector3IntEx(binaryReader, senderEndPoint);

            if (!position.HasValue)
            {
                return(NetworkError());
            }
            Position = position.Value;
            MyMwcLog.IfNetVerbose_AddToLog("Position: " + Position);

            Dictionary = MyMessageHelper.ReadStringDictionary(binaryReader, senderEndPoint);
            if (Dictionary == null)
            {
                return(NetworkError());
            }

            return(true);
        }
Beispiel #2
0
        internal override bool Read(System.IO.BinaryReader binaryReader, System.Net.EndPoint senderEndPoint, int gameVersion)
        {
            if (!base.Read(binaryReader, senderEndPoint, gameVersion))
            {
                return(NetworkError());
            }

            // Sector ob
            bool?sectorBuilderExists = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!sectorBuilderExists.HasValue)
            {
                return(NetworkError());
            }

            MyMwcLog.IfNetVerbose_AddToLog("Sector exists " + (SectorObjectBuilder != null));

            if (sectorBuilderExists.Value)
            {
                SectorObjectBuilder = MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_Sector;
                if (SectorObjectBuilder == null || !SectorObjectBuilder.Read(binaryReader, senderEndPoint, gameVersion))
                {
                    return(NetworkError());
                }
                MyMwcLog.IfNetVerbose_AddToLog("Sector read");
            }

            // Gametime
            DateTime?dateTime = MyMwcMessageIn.ReadDateTimeEx(binaryReader, senderEndPoint);

            if (!dateTime.HasValue)
            {
                return(NetworkError());
            }
            this.GameTime = dateTime.Value;
            MyMwcLog.IfNetVerbose_AddToLog("Gametime: " + this.GameTime);

            // Player ob
            bool?playerBuilderExists = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!playerBuilderExists.HasValue)
            {
                return(NetworkError());
            }

            MyMwcLog.IfNetVerbose_AddToLog("Player exists " + (PlayerObjectBuilder != null));

            if (playerBuilderExists.Value)
            {
                PlayerObjectBuilder = MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_Player;
                if (PlayerObjectBuilder == null || !PlayerObjectBuilder.Read(binaryReader, senderEndPoint, gameVersion))
                {
                    return(NetworkError());
                }
                MyMwcLog.IfNetVerbose_AddToLog("Player read");
            }

            // Session ob
            bool?sessionBuilderExists = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!sessionBuilderExists.HasValue)
            {
                return(NetworkError());
            }

            MyMwcLog.IfNetVerbose_AddToLog("Session exists " + (SessionObjectBuilder != null));

            if (sessionBuilderExists.Value)
            {
                SessionObjectBuilder = MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_Session;
                if (SessionObjectBuilder == null || !SessionObjectBuilder.Read(binaryReader, senderEndPoint, gameVersion))
                {
                    return(NetworkError());
                }
                MyMwcLog.IfNetVerbose_AddToLog("Session read");
            }

            // Active mission
            int?activeMissionID = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (!activeMissionID.HasValue)
            {
                return(NetworkError());
            }
            this.ActiveMissionID = activeMissionID.Value;
            MyMwcLog.IfNetVerbose_AddToLog("Active Mission ID: " + this.ActiveMissionID);

            // Events
            int?countEvents = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countEvents == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("Count Events: " + countEvents);
            EventLogObjectBuilder = new List <MyMwcObjectBuilder_Event>(countEvents.Value);
            for (int i = 0; i < countEvents; i++)
            {
                var eventItem = ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_Event;
                if (eventItem == null)
                {
                    return(NetworkError());
                }
                if (eventItem.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                EventLogObjectBuilder.Add(eventItem);
            }

            // Faction relation changes
            int?countFactionRelationChanges = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countFactionRelationChanges == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("Factoin Relation Changes: " + countFactionRelationChanges);
            FactionRelationChangesBuilder = new List <MyMwcObjectBuilder_FactionRelationChange>(countFactionRelationChanges.Value);
            for (int i = 0; i < countFactionRelationChanges; i++)
            {
                var factionRelationChangeItem = ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_FactionRelationChange;
                if (factionRelationChangeItem == null)
                {
                    return(NetworkError());
                }
                if (factionRelationChangeItem.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                FactionRelationChangesBuilder.Add(factionRelationChangeItem);
            }

            // Inventory
            bool?inventoryBuilderExists = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!inventoryBuilderExists.HasValue)
            {
                return(NetworkError());
            }

            MyMwcLog.IfNetVerbose_AddToLog("Inventory exists " + (InventoryObjectBuilder != null));

            if (inventoryBuilderExists.Value)
            {
                InventoryObjectBuilder = MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as MyMwcObjectBuilder_Inventory;
                if (InventoryObjectBuilder == null || !InventoryObjectBuilder.Read(binaryReader, senderEndPoint, gameVersion))
                {
                    return(NetworkError());
                }
                MyMwcLog.IfNetVerbose_AddToLog("Inventory read");
            }

            // Current sector identifier
            MyMwcSectorIdentifier?currentSector = MyMwcMessageIn.ReadSectorIdentifierEx(binaryReader, senderEndPoint);

            if (!currentSector.HasValue)
            {
                return(NetworkError());
            }
            this.CurrentSector = currentSector.Value;

            // Checkpoint name
            bool?hasName = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!hasName.HasValue)
            {
                return(NetworkError());
            }

            if (hasName.Value)
            {
                CheckpointName = MyMwcMessageIn.ReadStringEx(binaryReader, senderEndPoint);
                if (CheckpointName == null)
                {
                    return(NetworkError());                        // Has name set and name null? That's can't happen
                }
            }
            else
            {
                CheckpointName = null;
            }

            Dictionary = MyMessageHelper.ReadStringDictionary(binaryReader, senderEndPoint);
            if (Dictionary == null)
            {
                return(NetworkError());
            }

            return(true);
        }
        //  Write this object into message-out
        internal override void Write(BinaryWriter binaryWriter)
        {
            base.Write(binaryWriter);

            // TODO: remove
            MyMwcLog.IfNetVerbose_AddToLog("DustColor: " + Color.White.ToString());
            MyMwcMessageOut.WriteColor(Color.White, binaryWriter);

            List <MyMwcObjectBuilder_Base> objectToWrite = SectorObjects;

            int countSectorObjects = objectToWrite == null ? 0 : objectToWrite.Count;

            MyMwcLog.IfNetVerbose_AddToLog("Sector object count: " + countSectorObjects);
            MyMwcMessageOut.WriteInt32(countSectorObjects, binaryWriter);

            for (int i = 0; i < countSectorObjects; i++)
            {
                objectToWrite[i].Write(binaryWriter);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Sector objects written");

            // Write object groups
            int countObjectGroups = 0;

            if (ObjectGroups != null)
            {
                countObjectGroups = ObjectGroups.Count;
            }
            MyMwcLog.IfNetVerbose_AddToLog("Object groups count: " + countObjectGroups);
            MyMwcMessageOut.WriteInt32(countObjectGroups, binaryWriter);

            for (int i = 0; i < countObjectGroups; i++)
            {
                ObjectGroups[i].Write(binaryWriter);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Object groups written");

            // Write snap point links
            int countSnapPointLinks = 0;

            if (SnapPointLinks != null)
            {
                countSnapPointLinks = SnapPointLinks.Count;
            }
            MyMwcLog.IfNetVerbose_AddToLog("Snap point links count: " + countSnapPointLinks);
            MyMwcMessageOut.WriteInt32(countSnapPointLinks, binaryWriter);

            for (int i = 0; i < countSnapPointLinks; i++)
            {
                SnapPointLinks[i].Write(binaryWriter);
            }
            MyMwcLog.IfNetVerbose_AddToLog("Snap point links written");

            MyMwcMessageOut.WriteBool(FromGenerator, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("From generator: " + FromGenerator);

            // Version
            MyMwcMessageOut.WriteInt32(Version, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Current sector version: " + Version.ToString());

            MyMwcMessageOut.WriteVector3Int(Position, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Position written: " + Position);

            MyMessageHelper.WriteStringDictionary(Dictionary, binaryWriter);
        }
Beispiel #4
0
        internal override void Write(System.IO.BinaryWriter binaryWriter)
        {
            base.Write(binaryWriter);

            // Sector ob
            bool sectorObjectBuilderExists = SectorObjectBuilder != null;

            MyMwcMessageOut.WriteBool(sectorObjectBuilderExists, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Sector exists " + sectorObjectBuilderExists);

            if (sectorObjectBuilderExists)
            {
                SectorObjectBuilder.Write(binaryWriter);
                MyMwcLog.IfNetVerbose_AddToLog("Sector written");
            }

            // Gametime
            MyMwcMessageOut.WriteDateTime(this.GameTime, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Gametime: " + this.GameTime);

            // Player ob
            bool playerObjectBuilderExists = PlayerObjectBuilder != null;

            MyMwcMessageOut.WriteBool(playerObjectBuilderExists, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Player exists " + playerObjectBuilderExists);

            if (playerObjectBuilderExists)
            {
                PlayerObjectBuilder.Write(binaryWriter);
                MyMwcLog.IfNetVerbose_AddToLog("Player written");
            }

            // Session ob
            bool sessionObjectBuilderExists = SessionObjectBuilder != null;

            MyMwcMessageOut.WriteBool(sessionObjectBuilderExists, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Session exists " + sessionObjectBuilderExists);

            if (sessionObjectBuilderExists)
            {
                SessionObjectBuilder.Write(binaryWriter);
                MyMwcLog.IfNetVerbose_AddToLog("Session written");
            }

            // Active Mission
            MyMwcMessageOut.WriteInt32(ActiveMissionID, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Active Mission ID: " + this.ActiveMissionID);

            //  Events
            int countEvents = EventLogObjectBuilder == null ? 0 : EventLogObjectBuilder.Count;

            MyMwcLog.IfNetVerbose_AddToLog("Count Events: " + countEvents);
            MyMwcMessageOut.WriteInt32(countEvents, binaryWriter);
            for (int i = 0; i < countEvents; i++)
            {
                EventLogObjectBuilder[i].Write(binaryWriter);
            }

            //  Faction relation changes
            int countFactionRelationChanges = FactionRelationChangesBuilder == null ? 0 : FactionRelationChangesBuilder.Count;

            MyMwcLog.IfNetVerbose_AddToLog("Faction Relation Changes : " + countFactionRelationChanges);
            MyMwcMessageOut.WriteInt32(countFactionRelationChanges, binaryWriter);
            for (int i = 0; i < countFactionRelationChanges; i++)
            {
                FactionRelationChangesBuilder[i].Write(binaryWriter);
            }

            // Inventory
            bool inventoryObjectBuilderExists = InventoryObjectBuilder != null;

            MyMwcMessageOut.WriteBool(inventoryObjectBuilderExists, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Inventory exists " + inventoryObjectBuilderExists);

            if (inventoryObjectBuilderExists)
            {
                InventoryObjectBuilder.Write(binaryWriter);
                MyMwcLog.IfNetVerbose_AddToLog("Inventory written");
            }

            // Current sector identifier
            MyMwcMessageOut.WriteSectorIdentifier(this.CurrentSector, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Current sector: " + CurrentSector.ToString());

            // Checkpoint name
            bool hasName = CheckpointName != null;

            MyMwcMessageOut.WriteBool(hasName, binaryWriter);
            MyMwcLog.IfNetVerbose_AddToLog("Has name: " + hasName);
            if (hasName)
            {
                MyMwcMessageOut.WriteString(CheckpointName, binaryWriter);
                MyMwcLog.IfNetVerbose_AddToLog("Name: " + CheckpointName.ToString());
            }

            MyMessageHelper.WriteStringDictionary(Dictionary, binaryWriter);
        }