public void Deserialize(Stream input, VersionTag version) { var unk14 = input.ReadValueU32(); var unk15 = input.ReadValueF32(); var unk16 = input.ReadValueF32(); var unk17 = input.ReadValueF32(); var unk18 = input.ReadValueF32(); var unk19 = input.ReadValueF32(); var unk20 = input.ReadValueF32(); var unk21 = input.ReadValueF32(); var unk22 = input.ReadValueU32(); var unk23 = input.ReadValueU16(); var unk24 = input.ReadValueU16(); var unk25 = input.ReadValueU16(); var unk26 = input.ReadValueU16(); var unk27 = input.ReadValueU16(); var unk28 = input.ReadValueU16(); var unk29 = input.ReadValueU16(); var unk30 = input.ReadValueU16(); var unk31 = input.ReadValueU32(); }
private void ValidateVersion(ManifestData manifestData, Action <SemVersion, VersionTag> lifecycleVersionValidator) { // Check package version, make sure it's a valid SemVer string. SemVersion packageVersionNumber; if (!SemVersion.TryParse(manifestData.version, out packageVersionNumber)) { AddError("In package.json, \"version\" needs to be a valid \"Semver\". {0}", ErrorDocumentation.GetLinkMessage(k_DocsFilePath, "version-needs-to-be-a-valid-semver")); return; } VersionTag versionTag; try { versionTag = VersionTag.Parse(packageVersionNumber.Prerelease); } catch (ArgumentException e) { AddError("In package.json, \"version\" doesn't follow our lifecycle rules. {0}. {1}", e.Message, ErrorDocumentation.GetLinkMessage(k_DocsFilePath, "version-is-invalid-tag-must-follow-lifecycle-rules")); return; } lifecycleVersionValidator(packageVersionNumber, versionTag); ValidateVersionAbilityToPromote(packageVersionNumber, versionTag, manifestData); }
public override int GetHashCode() { int hash = 1; if (VersionTag.Length != 0) { hash ^= VersionTag.GetHashCode(); } if (Ips.Length != 0) { hash ^= Ips.GetHashCode(); } if (Ports.Length != 0) { hash ^= Ports.GetHashCode(); } if (ResourceUrl.Length != 0) { hash ^= ResourceUrl.GetHashCode(); } if (VersionUrl.Length != 0) { hash ^= VersionUrl.GetHashCode(); } if (ShowState != false) { hash ^= ShowState.GetHashCode(); } if (SelectServer != false) { hash ^= SelectServer.GetHashCode(); } return(hash); }
/** * Use this to know with package phase the version infers * However, if you need to know if this package is a release candidate, then use GetLifecyclePhaseOrRelation instead */ internal static LifecyclePhase GetLifecyclePhase(string version) { SemVersion semVer = SemVersion.Parse(version); try { VersionTag pre = VersionTag.Parse(semVer.Prerelease); if (IsPreviewVersion(semVer, pre)) { return(LifecyclePhase.Preview); } if (IsReleasedVersion(semVer, pre)) { return(LifecyclePhase.Release); } if (IsExperimentalVersion(semVer, pre)) { return(LifecyclePhase.Experimental); } if (IsPreReleaseVersion(semVer, pre)) { return(LifecyclePhase.PreRelease); } return(LifecyclePhase.InvalidVersionTag); } catch (ArgumentException e) { if (e.Message.Contains("invalid version tag")) { return(LifecyclePhase.InvalidVersionTag); } throw e; } }
internal static bool IsPreviewVersion(SemVersion version, VersionTag tag) { #if UNITY_2021_1_OR_NEWER return(version.Prerelease.Contains("preview")); #else return(version.Prerelease.Contains("preview") || version.Major == 0); #endif }
public static void ChangeAIRPathByInstalls(object sender, EventArgs e) { MenuItem item = sender as MenuItem; VersionTag tag = (item.Tag as VersionTag); Management.ProgramPaths.Sonic3AIRPath = tag.Path; Management.MainDataModel.Settings.Save(); Management.MainDataModel.UpdateAIRSettings(ref tag.Instance); }
public void AddExplanation(TlsRptRecord record) { VersionTag version = record.Tags.OfType <VersionTag>().FirstOrDefault(); if (version != null) { version.Explanation = TlsRptExplainerResource.VersionTlsRptExplanation; } }
public void DownloadUpdate(VersionTag tag) { // Already downloading? if (_downloadingUpdate) { return; } DownloadUpdateAsync(tag); }
private void DownloadClicked(VersionTag tag) { toolTip.SetToolTip(pictureBoxUpdate, "Downloading"); pictureBoxUpdate.Image = Properties.Resources.Ring; pictureBoxUpdate.Visible = true; buttonUpdate.Visible = false; // download the update. _context.UpdateController.DownloadUpdate(tag); }
public override bool Handshake(IWebSocketSession session, WebSocketReceiveFilterBase previousFilter, out IReceiveFilter <IWebSocketFragment> dataFrameReader) { if (!VersionTag.Equals(session.SecWebSocketVersion) && NextProcessor != null) { return(NextProcessor.Handshake(session, previousFilter, out dataFrameReader)); } dataFrameReader = null; session.ProtocolProcessor = this; if (!session.AppServer.ValidateHandshake(session, session.Items.GetValue <string>(OriginKey, string.Empty))) { return(false); } var secWebSocketKey = session.Items.GetValue <string>(WebSocketConstant.SecWebSocketKey, string.Empty); if (string.IsNullOrEmpty(secWebSocketKey)) { return(false); } var responseBuilder = new StringBuilder(); string secKeyAccept = string.Empty; try { secKeyAccept = Convert.ToBase64String(SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(secWebSocketKey + m_Magic))); } catch (Exception) { return(false); } responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseHeadLine10); responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseUpgradeLine); responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseConnectionLine); responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseAcceptLine, secKeyAccept); var subProtocol = session.GetAvailableSubProtocol(session.Items.GetValue <string>(WebSocketConstant.SecWebSocketProtocol, string.Empty)); if (!string.IsNullOrEmpty(subProtocol)) { responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseProtocolLine, subProtocol); } responseBuilder.AppendWithCrCf(); byte[] data = Encoding.UTF8.GetBytes(responseBuilder.ToString()); session.SendRawData(data, 0, data.Length); dataFrameReader = new WebSocketDataFrameReceiveFilter(); return(true); }
public void null_version_tags(String tagName) { // arrange var tag = new Tag(tagName, ""); // act var versionTag = VersionTag.TryCreate(tag); // assert Assert.Null(versionTag); }
public FlightDetails( FlightId id, VersionTag versionTag, ushort capacity, IEnumerable <Booking> bookings) { Id = id; VersionTag = versionTag; Capacity = capacity; Bookings = bookings; }
public void valid_version_from_version_tag_and_commit_count(String tagName, Int32 commitCount, String expectedVersion) { // arrange var tag = new Tag(tagName, ""); // act var versionTag = VersionTag.TryCreate(tag); var actualVersion = Version.CreateVersion(versionTag, commitCount); // assert Assert.Equal(actualVersion.ToString(), expectedVersion); }
private void DownloadUpdateAsync(VersionTag tag) { _downloadingUpdate = true; try { downloadRequest = (HttpWebRequest)WebRequest.Create(tag.Url); downloadRequest.BeginGetResponse(new AsyncCallback(FinishDownloadUpdateRequest), null); } catch (Exception) { OnRaiseUpdateFailure(new UpdateFailureEventArgs()); } }
public void valid_version_tags(String tagName, Int32 majorVersion, Int32 minorVersion, String suffix) { // arrange var tag = new Tag(tagName, ""); // act var versionTag = VersionTag.TryCreate(tag); // assert Assert.Equal(majorVersion, versionTag.MajorVersion); Assert.Equal(minorVersion, versionTag.MinorVersion); Assert.Equal(suffix, versionTag.Suffix); }
public static byte[] ToBytes(VersionTag versionTag) { var hex = versionTag.ToString(); var numberOfChars = hex.Length; var bytes = new byte[numberOfChars / 2]; for (var i = 0; i < numberOfChars; i += 2) { bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); } return(bytes); }
public EvaluationResult <Tag> Parse(List <Tag> tags, string record, string token, string tagKey, string tagValue) { VersionTag versionTag = new VersionTag(token, tagValue); List <Error> errors = new List <Error>(); int tagInstanceCount = tags.Count(_ => _.GetType() == typeof(VersionTag)); if (!record.Trim().StartsWith(ValidValue) && tagInstanceCount == 0) { errors.Add(new InvalidVersionTagError()); } return(new EvaluationResult <Tag>(versionTag, errors)); }
public void ValidTagGeneratesResultWithNoErrors() { string value = "TLSRPTv1"; string key = "v"; string token = $"{key}={value}"; string record = $"{token};rua=mailto:[email protected]"; EvaluationResult <Tag> evaluationResult = _versionParser.Parse(new List <Tag>(), record, token, key, value); VersionTag versionTag = evaluationResult.Item as VersionTag; Assert.That(versionTag, Is.Not.Null); Assert.That(versionTag.RawValue, Is.EqualTo(token)); Assert.That(versionTag.Value, Is.EqualTo(value)); Assert.That(evaluationResult.Errors, Is.Empty); }
public void RecordDoesNotStartWithVersionGeneratesInvalidVersionError() { string value = "TLSRPTv1"; string key = "p"; string token = $"{key}={value}"; string record = $"{token};rua=mailto:[email protected]"; EvaluationResult <Tag> evaluationResult = _versionParser.Parse(new List <Tag>(), record, token, key, value); VersionTag versionTag = evaluationResult.Item as VersionTag; Assert.That(versionTag, Is.Not.Null); Assert.That(versionTag.RawValue, Is.EqualTo(token)); Assert.That(versionTag.Value, Is.EqualTo(value)); Assert.That(evaluationResult.Errors.Count, Is.EqualTo(1)); Assert.That(evaluationResult.Errors.First(), Is.TypeOf <InvalidVersionTagError>()); }
public void Deserialize(Stream input, VersionTag version) { var flags = input.ReadValueU32(); this.Unknown3 = (flags & 1) == 1; this.Unknown1 = input.ReadValueF32(); this.Unknown2 = input.ReadValueF32(); uint[] counts = new uint[flags >> 1]; for (uint i = 0; i < counts.Length; i++) { counts[i] = input.ReadValueU32(); } foreach (var count in counts) { for (uint i = 0; i < count; i++) { var unk8 = input.ReadValueU32(); var instanceCount = input.ReadValueU32(); var unk10 = input.ReadValueF32(); if (version != VersionTag.Unknown) { var unk11 = input.ReadValueS32(); var unk12 = input.ReadValueS32(); var unk13 = input.ReadValueS32(); if (unk11 == 5 || unk12 == 5 || unk13 == 5) { } } var instances = new List <Instance>(); for (uint l = 0; l < instanceCount; l++) { var instance = new Instance(); instance.Deserialize(input, version); instances.Add(instance); } } } }
public void InstallUpdate(VersionTag tag, BackgroundWorker worker) { var installLocation = PlaybackChanger_Installer.RegHelper.GetRegInstallPath(); // Does the update dir still exist? string updateDir = Path.Combine(installLocation, "Update"); if (!Directory.Exists(updateDir)) { return; } var files = Directory.GetFiles(updateDir, $"{tag.Version.ToString()}.7z"); // Someone must have deleted the file. Not gonna build build something to prevent sabotaging. if (files.Length <= 0) { return; } var options = new ExtractionOptions() { ExtractFullPath = true, Overwrite = true }; var archive = ArchiveFactory.Open(files[0]); worker.DoWork += delegate(object sender, DoWorkEventArgs e) { try { foreach (var entry in archive.Entries) { entry.WriteToDirectory(installLocation, options); } } catch (Exception) { OnRaiseUpdateFailure(new UpdateFailureEventArgs()); } }; worker.RunWorkerAsync(); }
private void LifecycleV2VersionValidator(SemVersion packageVersionNumber, VersionTag versionTag) { if (versionTag.IsEmpty()) { return; } if (versionTag.Tag == "preview") { AddError("In package.json, \"version\" cannot be tagged \"preview\" in lifecycle v2, please use \"exp\". " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } if (packageVersionNumber.Major < 1) { AddError("In package.json, \"version\" cannot be tagged \"" + packageVersionNumber.Prerelease + "\" while the major version less than 1. " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } if (versionTag.Tag != "exp" && versionTag.Tag != "pre") { AddError("In package.json, \"version\" must be a valid tag. \"" + versionTag.Tag + "\" is invalid, try either \"pre\" or \"exp\". " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } if (versionTag.Tag != "exp" && versionTag.Feature != "") { AddError("In package.json, \"version\" must be a valid tag. Custom tag \"" + versionTag.Feature + "\" only allowed with \"exp\". " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } if (versionTag.Tag == "exp" && versionTag.Feature.Length > 10) { AddError("In package.json, \"version\" must be a valid tag. Custom tag \"" + versionTag.Feature + "\" is too long, must be 10 characters long or less. " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } if (versionTag.Iteration < 1) { AddError("In package.json, \"version\" must be a valid tag. Iteration is required to be 1 or greater. " + ErrorDocumentation.GetLinkMessage(ErrorTypes.InvalidLifecycleV2)); return; } }
public void InvalidVersionErrorIsOnlyGeneratedOnce() { string value = "TLSRPTv1"; string key = "p"; string token = $"{key}={value}"; string record = $"{token};rua=mailto:[email protected]"; EvaluationResult <Tag> evaluationResult = _versionParser.Parse(new List <Tag> { new VersionTag("", "") }, record, token, key, value); VersionTag versionTag = evaluationResult.Item as VersionTag; Assert.That(versionTag, Is.Not.Null); Assert.That(versionTag.RawValue, Is.EqualTo(token)); Assert.That(versionTag.Value, Is.EqualTo(value)); Assert.That(evaluationResult.Errors, Is.Empty); }
private void LifecycleV1VersionValidator(SemVersion packageVersionNumber, VersionTag versionTag) { if (Context.IsCore && (!versionTag.IsEmpty() || packageVersionNumber.Major < 1)) { AddError("Core packages cannot be preview. " + ErrorDocumentation.GetLinkMessage(k_DocsFilePath, "core-packages-cannot-be-preview")); return; } if (packageVersionNumber.Major < 1 && (versionTag.IsEmpty() || versionTag.Tag != "preview")) { AddError("In package.json, \"version\" < 1, please tag the package as " + packageVersionNumber.VersionOnly() + "-preview. " + ErrorDocumentation.GetLinkMessage(k_DocsFilePath, "version-1-please-tag-the-package-as-xxx-preview")); return; } // The only pre-release tag we support is -preview if (!versionTag.IsEmpty() && !(versionTag.Tag == "preview" && versionTag.Feature == "" && versionTag.Iteration <= 999999)) { AddError( "In package.json, \"version\": the only pre-release filter supported is \"-preview.[num < 999999]\". " + ErrorDocumentation.GetLinkMessage(k_DocsFilePath, "version-the-only-pre-release-filter-supported-is--preview-num-999999")); } }
private void InstallClicked(VersionTag tag) { toolTip.SetToolTip(pictureBoxUpdate, "Installing"); pictureBoxUpdate.Image = Properties.Resources.Ring; pictureBoxUpdate.Visible = true; buttonUpdate.Visible = false; // install the update. worker = new BackgroundWorker(); worker.RunWorkerCompleted += delegate { pictureBoxUpdate.Visible = false; var installLocation = PlaybackChanger_Installer.RegHelper.GetRegInstallPath(); if (!Directory.Exists(installLocation)) { return; } string updater = Path.Combine(installLocation, "PlaybackChanger_Installer.exe"); if (!File.Exists(updater)) { return; } System.Diagnostics.Process.Start(updater); MayClose = true; this.Close(); }; try { _context.UpdateController.InstallUpdate(tag, worker); } finally { worker.Dispose(); } }
public unsafe void Execute(uint stage, IService service) { // 1) We create the node common block. versionAddress = service.AllocationContext.AllocateBlock(); commonAddress = service.AllocationContext.AllocateBlock(); BPlusTree versionTS = new BPlusTree(service.AllocationContext.CreateEmptyBTree()); // Fill common block and write. Block commonBlock = new Block(service.BlockSize); fixed(byte *p = commonBlock.Data) { NodeCommonHeader *header = (NodeCommonHeader *)p; header->ChildrenBTree = service.AllocationContext.CreateEmptyBTree(); header->CurrentVersionAddress = versionAddress; header->CurrentVersionNumber = 0; header->HeaderMagic = NodeCommonHeader.Magic; header->ParentAddress = parentAddress; header->VersionsBTree = versionTS.RootAddress; } service.Write(BlockType.NodeHeaderBlock, commonAddress, commonBlock); // 2) We create the node default typed stream. Block tsblock = new Block(service.BlockSize); ulong tsBlock = service.AllocationContext.AllocateBlock(); fixed(byte *p = tsblock.Data) { TypedStreamHeader *header = (TypedStreamHeader *)p; header->ObjectsAddress = (defaultTSOptions & StreamOptions.SingleObject) == 0 ? service.AllocationContext.CreateEmptyBTree() : 0; header->Options = defaultTSOptions; header->ObjectSize = 0; int i; for (i = 0; i < defaultTSType.Length; i++) { header->Type[i] = defaultTSType[i]; } // Null terminate it. header->Type[i] = '\0'; } service.Write(BlockType.TypedStreamHeader, tsBlock, tsblock); // 3) We create the node version block. // Fill version block and write. Block versionBlock = new Block(service.BlockSize); fixed(byte *pp = versionBlock.Data) { NodeVersionHeader *header = (NodeVersionHeader *)pp; header->CreationTime = DateTime.Now; header->DefaultTypedStream = 0; header->HeaderMagic = NodeVersionHeader.Magic; header->ModifiedTime = DateTime.Now; header->NodeCommonAddress = commonAddress; header->StreamCount = 0; //< Is actually one but NodeHelper changes this. header->VersionNumber = 0; } // We must add default typed stream to block. NodeVersionHelper.AddTypedStream(tsBlock, defaultTSType, versionBlock); service.Write(BlockType.NodeHeaderBlock, versionAddress, versionBlock); // 4) We add to children tree. ObjectInfo info = childrenTree.Find(service, (uint)childName.GetHashCode()); if (info == null) { // We simply create a new object at address. ChildTag childTag = new ChildTag(); childTag.HashCode = childName.GetHashCode(); childTag.Add(childName, commonAddress); byte[] childData = Common.SerializeToArray(childTag); // We write it to block stream. BlockStream stream = service.AllocationContext.CreateBlockStream((ulong)childData.LongLength); stream.Write(childData); // We now add it to B+ tree. childrenTree.Add(service, new ObjectInfo((uint)childName.GetHashCode(), (ulong)childData.LongLength, stream.BaseAddress)); } else { // The index at hash already exists, we must add it, first read it. BlockStream stream = BlockStream.FromBase(info.Address, service); ChildTag childTag = Common.DeserializeFromArray(stream.Read(info.Size)) as ChildTag; // Steam not used anymore. stream.Deallocate(); // We modify child tag. childTag.Add(childName, commonAddress); byte[] childData = Common.SerializeToArray(childTag); // We must write it to new address. stream = service.AllocationContext.CreateBlockStream((ulong)childData.LongLength); stream.Write(childData); // Now we replace the data in tree. childrenTree.Replace(service, new ObjectInfo((uint)childName.GetHashCode(), (ulong)childData.LongLength, stream.BaseAddress)); } // 5) Add version to typed stream. VersionTag versionTag = new VersionTag((0).GetHashCode()); versionTag.Add(0, versionAddress); byte[] versionTagData = Common.SerializeToArray(versionTag); // Write to stream. BlockStream versionTagStream = service.AllocationContext.CreateBlockStream((ulong)versionTagData.LongLength); versionTagStream.Write(versionTagData); versionTS.Add(service, new ObjectInfo((uint)(0).GetHashCode(), (ulong)versionTagData.LongLength, versionTagStream.BaseAddress)); }
/// <summary> /// Executes the operation. /// </summary> /// <param name="service">Service for operation.</param> unsafe void ExecuteInternal(IService service) { ulong childrenTS; ulong versionTS; // 1) We extract child TS and version TS Block block = service.Read(BlockType.NodeHeaderBlock, commonAddress); fixed(byte *p = block.Data) { NodeCommonHeader *header = (NodeCommonHeader *)p; childrenTS = header->ChildrenBTree; versionTS = header->VersionsBTree; } // 2) Can get rid of node. service.DeAllocate(commonAddress); // 3) We delete children TS, it should be empty (since deletes were already called on nodes). service.DeAllocate(childrenTS); // 4) We go through versions. BPlusTree versionsTree = new BPlusTree(versionTS); List <ObjectInfo> versions = versionsTree.ListAll(service); // 5) We delete each version. foreach (ObjectInfo info in versions) { // a) Read version tag. BlockStream versionTagStream = BlockStream.FromBase(info.Address, service); VersionTag versionTag = Common.DeserializeFromArray(versionTagStream.Read(info.Size)) as VersionTag; versionTagStream.Deallocate(); foreach (KeyValuePair <ulong, ulong> versionToNode in versionTag.VersionAddress) { block = service.Read(BlockType.NodeHeaderBlock, versionToNode.Value); List <ulong> typedStreams = NodeVersionHelper.ListAllTypedStreamsAsAddresses(block, service); // b) Delete all typed streams. for (int i = 0; i < typedStreams.Count; i++) { // 1) We delete the typed stream object. block = service.Read(BlockType.TypedStreamHeader, typedStreams[i]); fixed(byte *p = block.Data) { TypedStreamHeader *header = (TypedStreamHeader *)p; // We delete single object. if ((header->Options & StreamOptions.SingleObject) != 0) { if (header->ObjectsAddress != 0) { BlockStream stream = BlockStream.FromBase(header->ObjectsAddress, service); stream.Deallocate(); } } else { // We delete all children. BPlusTree tree = new BPlusTree(header->ObjectsAddress); foreach (ObjectInfo info2 in tree.ListAll(service)) { BlockStream stream = BlockStream.FromBase(info2.Address, service); stream.Deallocate(); } } } // 2) We also delete the header itself. service.DeAllocate(typedStreams[i]); } // c) We deallocate version block. service.DeAllocate(versionToNode.Value); } } // 6) We delete the tree. versionsTree.DeallocateTree(service); // 7) We must erase the node from root. ObjectInfo childInfo = parentChildTree.Find(service, (uint)childName.GetHashCode()); BlockStream childTagStream = BlockStream.FromBase(childInfo.Address, service); byte[] childTagData = childTagStream.Read(childInfo.Size); ChildTag childTag = Common.DeserializeFromArray(childTagData) as ChildTag; childTagStream.Deallocate(); if (childTag.Children.Count == 1) { // Simply delete it. parentChildTree.Remove(service, (uint)childName.GetHashCode(), 1, false); } else { // We have to replace it. childTag.Remove(childName); childTagData = Common.SerializeToArray(childTag); childTagStream = service.AllocationContext.CreateBlockStream((ulong)childTagData.LongLength); childTagStream.Write(childTagData); parentChildTree.Replace(service, new ObjectInfo((uint)childName.GetHashCode(), (ulong)childTagData.LongLength, childTagStream.BaseAddress)); } }
public void Deserialize(Stream input, VersionTag version) { this.Id = input.ReadValueU32(); this.Unknown1 = input.ReadValueF32(); this.Unknown2 = input.ReadValueF32(); }
public unsafe void Execute(uint stage, IService service) { string defaultTSType = typeof(object).FullName; // 1) We create the node common block. ulong versionAddress = service.AllocationContext.AllocateBlock(); ulong commonAddress = service.AllocationContext.AllocateBlock(); BPlusTree versionTS = new BPlusTree(service.AllocationContext.CreateEmptyBTree()); // Fill common block and write. Block commonBlock = new Block(service.BlockSize); fixed(byte *p = commonBlock.Data) { NodeCommonHeader *header = (NodeCommonHeader *)p; header->ChildrenBTree = service.AllocationContext.CreateEmptyBTree(); header->CurrentVersionAddress = versionAddress; header->CurrentVersionNumber = 0; header->HeaderMagic = NodeCommonHeader.Magic; header->ParentAddress = 0; header->VersionsBTree = versionTS.RootAddress; } service.Write(BlockType.NodeHeaderBlock, commonAddress, commonBlock); // 2) We create the node default typed stream. Block tsblock = new Block(service.BlockSize); fixed(byte *p = tsblock.Data) { TypedStreamHeader *header = (TypedStreamHeader *)p; header->ObjectsAddress = service.AllocationContext.AllocateBlock(); header->Options = StreamOptions.None; header->ObjectSize = 0; int i; for (i = 0; i < defaultTSType.Length; i++) { header->Type[i] = defaultTSType[i]; } // Null terminate it. header->Type[i] = '\0'; } ulong tsBlock = service.AllocationContext.AllocateBlock(); service.Write(BlockType.TypedStreamHeader, tsBlock, tsblock); // 3) We create the node version block. // Fill version block and write. Block versionBlock = new Block(service.BlockSize); fixed(byte *pp = versionBlock.Data) { NodeVersionHeader *header = (NodeVersionHeader *)pp; header->CreationTime = DateTime.Now; header->DefaultTypedStream = 0; header->HeaderMagic = NodeVersionHeader.Magic; header->ModifiedTime = DateTime.Now; header->NodeCommonAddress = commonAddress; header->StreamCount = 0; //< Is actually one but NodeHelper changes this. header->VersionNumber = 0; } // We must add default typed stream to block. NodeVersionHelper.AddTypedStream(tsBlock, defaultTSType, versionBlock); service.Write(BlockType.NodeHeaderBlock, versionAddress, versionBlock); // 4) We must create versions VersionTag versionTag = new VersionTag((0).GetHashCode()); versionTag.Add(0, versionAddress); byte[] versionTagData = Common.SerializeToArray(versionTag); // Write to stream. BlockStream versionTagStream = service.AllocationContext.CreateBlockStream((ulong)versionTagData.LongLength); versionTagStream.Write(versionTagData); versionTS.Add(service, new ObjectInfo((uint)(0).GetHashCode(), (ulong)versionTagData.LongLength, versionTagStream.BaseAddress)); // 5) We must write to database header. Block block = service.Read(BlockType.NoCache, 0); fixed(byte *ppp = block.Data) { DatabaseHeader *header = (DatabaseHeader *)ppp; header->RootObjectAddress = commonAddress; } // Write the header. service.Write(BlockType.NoCache, 0, block); }
public void Serialize(Stream output, VersionTag version) { throw new NotImplementedException(); }