Example #1
0
        /// <summary>
        /// Notifies this object instance to make a copy of this object's data from the Owner.Stream and then start deserializing this instance.
        /// </summary>
        public void BeginDeserializing()
        {
            #if THIEFDEADLYSHADOWS
            // FIXME: Objects deserialization is not supported for Thief's Deadly Shadows!
            if (Package.Build == UnrealPackage.GameBuild.BuildName.Thief_DS)
            {
                return;
            }
            #endif

            // Imported objects cannot be deserialized!
            if (ImportTable != null)
            {
                return;
            }

            // e.g. None.
            if (ExportTable.SerialSize == 0)
            {
                DeserializationState |= ObjectState.Deserialied;
                return;
            }

            InitBuffer();
            try
            {
#if DEBUG || BINARYMETADATA
                BinaryMetaData = new BinaryMetaData();
#endif
                DeserializationState |= ObjectState.Deserializing;
                Deserialize();
                DeserializationState |= ObjectState.Deserialied;
            }
            catch (Exception e)
            {
                ThrownException       = e;
                ExceptionPosition     = _Buffer != null ? _Buffer.Position : -1;
                DeserializationState |= ObjectState.Errorlized;

                Console.WriteLine(e.Source + ":" + Name + ":" + e.GetType().Name + " occurred while deserializing;"
                                  + "\r\n" + e.StackTrace
                                  + "\r\n" + e.Message
                                  );
            }
            finally
            {
                DeserializationState &= ~ObjectState.Deserializing;
                MaybeDisposeBuffer();
            }
        }
Example #2
0
        /// <summary>
        /// Notifies this object instance to make a copy of this object's data from the Owner.Stream and then start deserializing this instance.
        /// </summary>
        public void BeginDeserializing()
        {
            // Imported objects cannot be deserialized!
            if (ImportTable != null)
            {
                return;
            }

            // e.g. None.
            if (ExportTable.SerialSize == 0)
            {
                DeserializationState |= ObjectState.Deserialied;
                return;
            }

            InitBuffer();
            try
            {
#if DEBUG || BINARYMETADATA
                BinaryMetaData = new BinaryMetaData();
#endif
                DeserializationState |= ObjectState.Deserializing;
                Deserialize();
                DeserializationState |= ObjectState.Deserialied;
            }
            catch (Exception e)
            {
                ThrownException            = e;
                ExceptionPosition          = _Buffer != null ? _Buffer.Position : -1;
                DeserializationState      |= ObjectState.Errorlized;
                Log.DeserializationErrors += 1;

                Log.Error(
                    $"Deserialization error!:"
                    + $"\r\n{Package}:{Name}:{e.GetType().Name} with object index:{ExportTable.Index}"
                    + $"\r\nError occurred at {ExceptionPosition}/{ExportTable.SerialSize} from offset {ExportTable.SerialOffset}"
                    + $"\r\n{e.StackTrace}"
                    + $"\r\n{e.Message}" +
                    $"\r\n"
                    );
            }
            finally
            {
                DeserializationState &= ~ObjectState.Deserializing;
                MaybeDisposeBuffer();
            }
        }
        public void ProcessBinaryMetaData(BinaryMetaData metaData)
        {
            if (metaData == null)
            {
                throw new ArgumentNullException(nameof(metaData));
            }

            var descriptor = _descriptors.Find(desc => desc.ClrType.FullName == metaData.TypeName);

            //This doesn't use Type.GetType to prevent malicious server messages from using unregistered messages
            if (descriptor == null)
            {
                throw new InvalidOperationException($"String list binary data descriptor for type {metaData.TypeName} has not been registered");
            }

            _binaryIndexToDescriptor.Add(metaData.Index, descriptor);
        }
Example #4
0
        /// <summary>
        /// Notifies this object instance to make a copy of this object's data from the Owner.Stream and then start deserializing this instance.
        /// </summary>
        public void BeginDeserializing()
        {
            // Imported objects cannot be deserialized!
            if (ImportTable != null)
            {
                return;
            }

            // e.g. None.
            if (ExportTable.SerialSize == 0)
            {
                DeserializationState |= ObjectState.Deserialied;
                return;
            }

            InitBuffer();
            try
            {
#if DEBUG || BINARYMETADATA
                BinaryMetaData = new BinaryMetaData();
#endif
                DeserializationState |= ObjectState.Deserializing;
                Deserialize();
                DeserializationState |= ObjectState.Deserialied;
            }
            catch (Exception e)
            {
                ThrownException       = e;
                ExceptionPosition     = _Buffer != null ? _Buffer.Position : -1;
                DeserializationState |= ObjectState.Errorlized;

                Console.WriteLine(e.Source + ":" + Name + ":" + e.GetType().Name + " occurred while deserializing;"
                                  + "\r\n" + e.StackTrace
                                  + "\r\n" + e.Message
                                  );
            }
            finally
            {
                DeserializationState &= ~ObjectState.Deserializing;
                MaybeDisposeBuffer();
            }
        }
Example #5
0
        /// <summary>
        /// Notifies this object instance to make a copy of this object's data from the Owner.Stream and then start deserializing this instance.
        /// </summary>
        public void BeginDeserializing()
        {
            #if THIEFDEADLYSHADOWS
            // FIXME: Objects deserialization is not supported for Thief's Deadly Shadows!
            if( Package.Build == UnrealPackage.GameBuild.BuildName.Thief_DS )
            {
                return;
            }
            #endif

            // Imported objects cannot be deserialized!
            if( ImportTable != null )
            {
                return;
            }

            // e.g. None.
            if( ExportTable.SerialSize == 0 )
            {
                DeserializationState |= ObjectState.Deserialied;
                return;
            }

            InitBuffer();
            try
            {
#if DEBUG || BINARYMETADATA
                BinaryMetaData = new BinaryMetaData();
#endif
                DeserializationState |= ObjectState.Deserializing;
                Deserialize();
                DeserializationState |= ObjectState.Deserialied;
            }
            catch( Exception e )
            {
                ThrownException = e;
                ExceptionPosition = _Buffer != null ? _Buffer.Position : -1;
                DeserializationState |= ObjectState.Errorlized;

                Console.WriteLine( e.Source + ":" + Name + ":" + e.GetType().Name + " occurred while deserializing;"
                    + "\r\n" + e.StackTrace
                    + "\r\n" + e.Message
                );
            }
            finally
            {
                DeserializationState &= ~ObjectState.Deserializing;
                MaybeDisposeBuffer();
            }
        }
Example #6
0
        /// <summary>
        /// Notifies this object instance to make a copy of this object's data from the Owner.Stream and then start deserializing this instance.
        /// </summary>
        public void BeginDeserializing()
        {
            // Imported objects cannot be deserialized!
            if( ImportTable != null )
            {
                return;
            }

            // e.g. None.
            if( ExportTable.SerialSize == 0 )
            {
                DeserializationState |= ObjectState.Deserialied;
                return;
            }

            InitBuffer();
            try
            {
            #if DEBUG || BINARYMETADATA
                BinaryMetaData = new BinaryMetaData();
            #endif
                DeserializationState |= ObjectState.Deserializing;
                Deserialize();
                DeserializationState |= ObjectState.Deserialied;
            }
            catch( Exception e )
            {
                ThrownException = e;
                ExceptionPosition = _Buffer != null ? _Buffer.Position : -1;
                DeserializationState |= ObjectState.Errorlized;

                Console.WriteLine( e.Source + ":" + Name + ":" + e.GetType().Name + " occurred while deserializing;"
                    + "\r\n" + e.StackTrace
                    + "\r\n" + e.Message
                );
            }
            finally
            {
                DeserializationState &= ~ObjectState.Deserializing;
                MaybeDisposeBuffer();
            }
        }