/// <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(); } }
/// <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); }
/// <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(); } }
/// <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(); } }
/// <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(); } }