public override IRedHandle <T> ReadCHandle <T>() { var handle = new CHandle <T>(); int pointer; if (header.version == 2) { pointer = _reader.ReadInt16(); } else if (header.version == 3 || header.version == 04) { pointer = _reader.ReadInt32(); } else { throw new NotImplementedException(nameof(ReadCHandle)); } if (!HandleQueue.ContainsKey(pointer)) { HandleQueue.Add(pointer, new List <IRedBaseHandle>()); } HandleQueue[pointer].Add(handle); return(handle); }
public override void Enable() { Singleton = this; NetworkThread = new Thread(Network.Init); NetworkThread.Start(); Timing.RunCoroutine(HandleQueue.Handle()); Timing.RunCoroutine(Methods.UpdateStatus()); AddEventHandler(new Events()); Events = Config.GetStringList("enabled_events"); CustomChannelIds = GetStringULongDictionary(Config.GetStringDictionary("custom_channel_ids")); CommandsChannelId = Config.GetULong("commands_channel_id"); EventsId = Config.GetULong("events_channel_id"); Info("Succesfully enabled!"); }
public override IRedWeakHandle <T> ReadCWeakHandle <T>() { var handle = new CWeakHandle <T>(); var pointer = _reader.ReadInt32(); if (!HandleQueue.ContainsKey(pointer)) { HandleQueue.Add(pointer, new List <IRedBaseHandle>()); } HandleQueue[pointer].Add(handle); return(handle); }
public DataQueueWriter() { Q = new ManagedQueue<Expression<Action>>(); LocateDataService(); locked = false; Q.Changed += new EventHandler(delegate(object s, EventArgs ex) { if (Q.Count > 0) { var handle = new HandleQueue(HQueue); handle.BeginInvoke(null, null); } }); }
public EFileReadErrorCodes ReadBuffer(RedBuffer buffer, Type fileRootType) { _hashService = Locator.Current.GetService <IHashService>(); var _chunks = new List <RedBaseClass>(); var result = new Package04(); _outputFile = result; header.version = BaseReader.ReadUInt16(); if (header.version < 2 || header.version > 4) { return(EFileReadErrorCodes.UnsupportedVersion); } header.numSections = _reader.ReadUInt16(); if (header.numSections < 6 || header.numSections > 7) { return(EFileReadErrorCodes.UnsupportedVersion); } result.Version = header.version; result.Sections = header.numSections; header.numComponents = _reader.ReadUInt32(); if (header.numSections == 7) { header.refPoolDescOffset = _reader.ReadUInt32(); header.refPoolDataOffset = _reader.ReadUInt32(); } header.namePoolDescOffset = _reader.ReadUInt32(); header.namePoolDataOffset = _reader.ReadUInt32(); header.chunkDescOffset = _reader.ReadUInt32(); header.chunkDataOffset = _reader.ReadUInt32(); if (header.numSections == 7 && header.refPoolDescOffset != 0) { return(EFileReadErrorCodes.NoCr2w); } if (header.refPoolDescOffset != 0) { return(EFileReadErrorCodes.NoCr2w); } if (fileRootType == typeof(gamePersistentStateDataResource)) { var numCruids = _reader.ReadUInt32(); for (var i = 0; i < numCruids; i++) { result.RootCruids.Add(_reader.ReadUInt64()); } } else if (fileRootType != typeof(inkWidgetLibraryResource)) { result.CruidIndex = _reader.ReadInt16(); var numCruids = _reader.ReadUInt16(); for (var i = 0; i < numCruids; i++) { result.RootCruids.Add(_reader.ReadUInt64()); } } var baseOff = BaseStream.Position; // read refs var refCount = (header.refPoolDataOffset - header.refPoolDescOffset) / 4; BaseStream.Position = baseOff + header.refPoolDescOffset; var refDesc = BaseStream.ReadStructs <Package04ImportHeader>(refCount); var readAsHash = fileRootType == typeof(appearanceAppearanceResource); foreach (var r in refDesc) { BaseStream.Position = baseOff + r.offset; importsList.Add(ReadImport(r, readAsHash)); } // read strings var nameCount = (header.namePoolDataOffset - header.namePoolDescOffset) / 4; BaseStream.Position = baseOff + header.namePoolDescOffset; var nameDesc = BaseStream.ReadStructs <Package04NameHeader>(nameCount); foreach (var s in nameDesc) { BaseStream.Position = baseOff + s.offset; _namesList.Add(ReadName(s)); } // read chunks var chunkCount = (header.chunkDataOffset - header.chunkDescOffset) / 8; BaseStream.Position = baseOff + header.chunkDescOffset; var chunkDesc = BaseStream.ReadStructs <Package04ChunkHeader>(chunkCount); for (var i = 0; i < chunkDesc.Length; i++) { _chunks.Add(ReadChunk(chunkDesc[i])); } var newChunks = new List <RedBaseClass>(); for (var i = 0; i < _chunks.Count; i++) { if (!HandleQueue.ContainsKey(i)) { newChunks.Add(_chunks[i]); continue; } foreach (var handle in HandleQueue[i]) { handle.SetValue(_chunks[i]); } } result.Chunks = newChunks; buffer.Data = result; return(EFileReadErrorCodes.NoError); }