internal virtual void Reset() { // Resetting object reference cache ObjectReferenceCache.Clear(); // Resetting type metadata TypeMetadata.Reset(); }
private void RegisterObject(object _object, out UInt32 _referenceID, out bool _firstTime) { // Check if this object already exists if (ObjectReferenceCache.TryGetValue(_object, out _referenceID)) { _firstTime = false; return; } // Cache this new object _referenceID = ObjectReferenceCounter++; _firstTime = true; ObjectReferenceCache.Add(_object, _referenceID); }
private object ReadClassTypeValue(RSBinaryReader _binaryReader, out Type _objectType, object _object) { // Read properties UInt32 _typeID = _binaryReader.ReadUInt32(); UInt32 _objectReferenceID = _binaryReader.ReadUInt32(); // Get object type _objectType = TypeMetadata.GetType(_typeID); // Read object refernece Dictionary <string, RuntimeSerializationEntry> _initValuesContainer = new Dictionary <string, RuntimeSerializationEntry>(); Dictionary <string, RuntimeSerializationEntry> _serValuesContainer = new Dictionary <string, RuntimeSerializationEntry>(); RuntimeSerializationInfo _serializationInfo = new RuntimeSerializationInfo(_objectType, _initValuesContainer, _serValuesContainer); // Read initializers and create instance, if required ReadSerializationContainer(_binaryReader, ref _initValuesContainer); if (_object == null) { _object = CreateInstance(_binaryReader, _serializationInfo); } ObjectReferenceCache.Add(_object, _objectReferenceID); // Read properties ReadSerializationContainer(_binaryReader, ref _serValuesContainer); // Set object value _object = SetObjectData(_object, _serializationInfo); // Trigger deserialization callback if (typeof(IRuntimeSerializationCallback).IsAssignableFrom(_objectType)) { ((IRuntimeSerializationCallback)_object).OnAfterRuntimeDeserialize(); } return(_object); }
private object ReadObjectReferenceValue(RSBinaryReader _binaryReader, out Type _objectType) { UInt32 _objectReferenceID = _binaryReader.ReadUInt32(); object _object; // Find object using reference ID Dictionary <object, UInt32> .Enumerator _dictEnumerator = ObjectReferenceCache.GetEnumerator(); while (_dictEnumerator.MoveNext()) { KeyValuePair <object, UInt32> _keyValuePair = _dictEnumerator.Current; UInt32 _currentReferenceID = _keyValuePair.Value; if (_currentReferenceID == _objectReferenceID) { _object = _keyValuePair.Key; _objectType = _object.GetType(); return(_object); } } throw new Exception(string.Format("[RS] Object Reference not found for ID={0}.", _objectReferenceID)); }