public Tag(TagID tagID, String tagIdentifier, List<Tag> payloadList, TagID listType) { this.tagID = tagID; this.tagIdentifier = tagIdentifier; this.payloadList = payloadList; this.listType = listType; }
public Errorable <Tag> Retrieve(SqlCommand cmd, SqlDataReader dr, int expectedCapacity = 10) { if (!dr.Read()) { return(this._idOrName.Collapse <ConsistencyError>(l => new TagIDRecordDoesNotExistError(l), r => new TagNameDoesNotExistError(r))); } TagID id = (TagID)dr.GetSqlBinary(0).Value; Tag.Builder tb = new Tag.Builder( pName: (TagName)dr.GetSqlString(1).Value, pCommitID: (CommitID)dr.GetSqlBinary(2).Value, pTagger: dr.GetSqlString(3).Value, pDateTagged: dr.GetDateTimeOffset(4), pMessage: dr.GetSqlString(5).Value ); Tag tg = tb; if (tg.ID != id) { return(new ComputedTagIDMismatchError(tg.ID, id)); } return(tg); }
internal FileInfo getPathByID(TagID id) { DirectoryInfo objDir = getObjectsDirectory(); string idStr = id.ToString(); string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2), idStr.Substring(2)); return(new FileInfo(path)); }
internal static Errorable <Tuple <Tag, Commit> > retrieve(ConsistencyError errorIfNotExist, SqlCommand cmd, SqlDataReader dr) { // If no result, return null: if (!dr.Read()) { return(errorIfNotExist); } TagID tgid = (TagID)dr.GetSqlBinary(0).Value; Tag.Builder tgb = new Tag.Builder( pName: (TagName)dr.GetSqlString(1).Value, pCommitID: (CommitID)dr.GetSqlBinary(2).Value, pTagger: dr.GetSqlString(3).Value, pDateTagged: dr.GetDateTimeOffset(4), pMessage: dr.GetSqlString(5).Value ); Tag tg = tgb; if (tg.ID != tgid) { return(new ComputedTagIDMismatchError(tg.ID, tgid)); } const int offs = 6; CommitID id = (CommitID)dr.GetSqlBinary(0 + offs).Value; Commit.Builder cmb = new Commit.Builder( pParents: new System.Collections.Generic.List <CommitID>(2), pTreeID: (TreeID)dr.GetSqlBinary(1 + offs).Value, pCommitter: dr.GetSqlString(2 + offs).Value, pDateCommitted: dr.GetDateTimeOffset(3 + offs), pMessage: dr.GetSqlString(4 + offs).Value ); // Read the parent commit ids from the second result: if (dr.NextResult()) { while (dr.Read()) { cmb.Parents.Add((CommitID)dr.GetSqlBinary(0).Value); } cmb.Parents.Sort(new CommitID.Comparer()); } Commit cm = cmb; if (cm.ID != id) { return(new ComputedCommitIDMismatchError(cm.ID, id)); } return(new Tuple <Tag, Commit>(tg, cm)); }
public TAG(ref byte[] rawdata, ref int offset) { _start_offset = offset; _lenght_octets = 0; _tagclass = (TagClass)(rawdata[offset] & 0xc0); // verifica se a tag está em formato Short ou Long if ((rawdata[offset] & 0x1f) == 0x1f) { // formato Long, não usado nos certificados da ICP-Brasil _tagid = (TagID)CalculaBase128(rawdata, ref offset); } else { // formato Short _tagid = (TagID)(rawdata[offset] & 0x1f); offset++; } // Octetos de tamanho if ((rawdata[offset] & 0x80) == 0x00) { // Formato Short: tamanho de até 127 bytes _lenght_octets = (int)(rawdata[offset++] & 0x7f); } else { // Formato Long: tamanho em 2 até 127 octetos int lenoctetos = (int)rawdata[offset++] & 0x7f; _lenght_octets = CalculaBase256(rawdata, ref offset, lenoctetos); } _start_contents = offset; switch (_tagid) { case TagID.OBJECT_IDENTIFIER: case TagID.PrintableString: case TagID.OCTET_STRING: case TagID.UTF8_STRING: case TagID.BIT_STRING: case TagID.IA5String: case TagID.INTEGER: case TagID.RFC822NAME: case TagID.T61String: case TagID.UTCTime: offset += _lenght_octets; break; case TagID.NULL: case TagID.SEQUENCE: case TagID.SET: break; default: break; } }
public Task <Errorable <TagID> > ResolvePartialID(TagID.Partial id) { FileInfo[] fis = system.getPathsByPartialID(id); if (fis.Length == 1) { return(Task.FromResult(TagID.TryParse(id.ToString().Substring(0, 2) + fis[0].Name))); } if (fis.Length == 0) { return(Task.FromResult((Errorable <TagID>) new TagIDPartialNoResolutionError(id))); } return(Task.FromResult((Errorable <TagID>) new TagIDPartialAmbiguousResolutionError(id, fis.SelectAsArray(f => TagID.TryParse(id.ToString().Substring(0, 2) + f.Name).Value)))); }
/// <summary> /// Возвращает коллекцию параметров. /// </summary> public override Dictionary <string, string> GetParameters() { var parameters = base.GetParameters(); parameters["tag_id"] = TagID.ToString(); if (OwnerID != 0) { parameters["owner_id"] = OwnerID.ToString(); } parameters["video_id"] = VideoID.ToString(); return(parameters); }
public async Task <Errorable <TagID> > DeleteTag(TagID id) { var etg = await getTag(id).ConfigureAwait(continueOnCapturedContext: false); if (etg.HasErrors) { return(etg.Errors); } Tag tg = etg.Value; deleteTag(tg); return(tg.ID); }
public async Task <Errorable <Tuple <Tag, Commit> > > GetCommitByTag(TagID id) { var etg = await tgrepo.GetTag(id).ConfigureAwait(continueOnCapturedContext: false); if (etg.HasErrors) { return(etg.Errors); } Tag tg = etg.Value; var ecm = await getCommit(tg.CommitID).ConfigureAwait(continueOnCapturedContext: false); if (ecm.HasErrors) { return(ecm.Errors); } Commit cm = ecm.Value; return(new Tuple <Tag, Commit>(tg, cm)); }
private async Task <Errorable <TagID> > getTagIDByName(TagName tagName) { FileInfo fiTracker = system.getTagPathByTagName(tagName); Debug.Assert(fiTracker != null); if (!fiTracker.Exists) { return(new TagNameDoesNotExistError(tagName)); } byte[] buf; int nr = 0; using (var fs = new FileStream(fiTracker.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true)) { // TODO: implement an async buffered Stream: buf = new byte[16384]; nr = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false); if (nr >= 16384) { // My, what a large tag you have! throw new NotSupportedException(); } } // Parse the TagID: using (var ms = new MemoryStream(buf, 0, nr, false)) using (var sr = new StreamReader(ms, Encoding.UTF8)) { string line = sr.ReadLine(); if (line == null) { return(new TagNameDoesNotExistError(tagName)); } return(TagID.TryParse(line)); } }
public override string ToString() { List <TagKey> keys = TagMap.GetKeys(TagID); if (keys.Count == 0) { switch (Type) { case 1: return(String.Format("{0} = {1}", TagID.ToString(), Float)); case 4: return(String.Format("{0} = {1}", TagID.ToString(), ScriptFormula)); default: return(String.Format("{0} = {1}", TagID.ToString(), Int)); } } if (keys.Count == 1) { var value = keys.First().GetType().GetMethod("GetValue").Invoke(keys.First(), new object[] { this }); return(String.Format("{0} = {1}", keys.First().Name, value == null ? "null" : value.ToString())); } return(String.Format("Ambigious key: Depending of the context it one of {0}", String.Join(",", keys.Select(x => x.Name).ToArray()))); }
public override int GetHashCode() { return(TagID.GetHashCode() ^ AssetID.GetHashCode() ^ TagName.GetHashCode() ^ AssetName.GetHashCode() ^ isEnabled.GetHashCode() ^ Target.GetHashCode()); }
public async Task<Errorable<Tuple<Tag, Commit>>> GetCommitByTag(TagID id) { var etg = await tgrepo.GetTag(id).ConfigureAwait(continueOnCapturedContext: false); if (etg.HasErrors) return etg.Errors; Tag tg = etg.Value; var ecm = await getCommit(tg.CommitID).ConfigureAwait(continueOnCapturedContext: false); if (ecm.HasErrors) return ecm.Errors; Commit cm = ecm.Value; return new Tuple<Tag, Commit>(tg, cm); }
public override string ToString() { return(TagID.ToString()); }
public QueryTag(TagID id) { this._idOrName = id; }
internal FileInfo[] getPathsByPartialID(TagID.Partial partial) { DirectoryInfo objDir = getObjectsDirectory(); string idStr = partial.ToString(); string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2)); var di = new DirectoryInfo(path); if (!di.Exists) return new FileInfo[0]; return di.GetFiles(idStr.Substring(2) + "*"); }
public TagRecordAlreadyExistsError(TagID id) : base("A tag with TagID {0} already exists", id) { }
public bool LoadTagData(ref XtiveTag[] tagData, ref int RecordCount) { if (m_handle == IntPtr.Zero) { return(false); } RecordCount = 0; try { while (RecordCount < 100) { if (!ReaderTag(m_handle, ref btTagType, ref TagID, ref bExcite, ref bLowPower, ref ExciteID, ref RID, ref fRSSI)) // get one tag once, FIFO { // Debug.WriteLine("failed to ReaderTag"); break; } else { // Debug.WriteLine(TagID.ToString()); /*tagData[RecordCount].RSSI = Convert.ToInt32(fRSSI); * tagData[RecordCount].UID = TagID.ToString(); * // tagData[RecordCount].RID = RID; * tagData[RecordCount].bLowPower = bLowPower; * tagData[RecordCount].bExcite = bExcite; * tagData[RecordCount].An = "0"; * tagData[RecordCount].ReaderIP = ip; * tagData[RecordCount].datetime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");*/ XtiveTag tag = (new XtiveTag.Builder()) .SetUid(TagID.ToString()) .SetRssi(Convert.ToInt32(fRSSI)) .SetBLowPower(bLowPower) .SetBExcite(bExcite) .SetReaderIP(ip) .SetAn("0") .SetDateTime(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Build(); tagData[RecordCount] = tag; RecordCount++; } } _ReaderErrorCode = 0; _ReaderErrorSpecified = ""; } catch (Exception e) { _ReaderErrorCode = 42; _ReaderErrorSpecified = "读写器LoadTagData函数故障:" + m_handle.ToString() + " " + e.Message.ToString(); log.Error(_ReaderErrorSpecified); return(false); } finally { } if (RecordCount == 0) { return(false); } else { return(true); } }
// override object.GetHashCode public override int GetHashCode() { return((GetType().FullName + "|" + TagID.ToString()).GetHashCode()); }
public async Task<Errorable<TagID>> DeleteTag(TagID id) { var etg = await getTag(id).ConfigureAwait(continueOnCapturedContext: false); if (etg.HasErrors) return etg.Errors; Tag tg = etg.Value; deleteTag(tg); return tg.ID; }
public Task<Errorable<TagID>> ResolvePartialID(TagID.Partial id) { FileInfo[] fis = system.getPathsByPartialID(id); if (fis.Length == 1) return Task.FromResult(TagID.TryParse(id.ToString().Substring(0, 2) + fis[0].Name)); if (fis.Length == 0) return Task.FromResult((Errorable<TagID>)new TagIDPartialNoResolutionError(id)); return Task.FromResult((Errorable<TagID>)new TagIDPartialAmbiguousResolutionError(id, fis.SelectAsArray(f => TagID.TryParse(id.ToString().Substring(0, 2) + f.Name).Value))); }
public Task <Errorable <TagID> > DeleteTag(TagID id) { return(db.ExecuteNonQueryAsync(new DestroyTag(id))); }
public Task <Errorable <Tuple <Tag, Commit> > > GetCommitByTag(TagID id) { return(db.ExecuteSingleQueryAsync(new QueryCommitByTagID(id))); }
public Tag(TagID tagID, String tagIdentifier, byte[] payload) { this.tagID = tagID; this.tagIdentifier = tagIdentifier; this.payload = payload; }
private async Task <Errorable <Tag> > getTag(TagID id) { FileInfo fi = system.getPathByID(id); if (!fi.Exists) { return(new TagIDRecordDoesNotExistError(id)); } byte[] buf; int nr = 0; using (var fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true)) { // TODO: implement an async buffered Stream: buf = new byte[16384]; nr = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false); if (nr >= 16384) { // My, what a large tag you have! throw new NotSupportedException(); } } Tag.Builder tb = new Tag.Builder(); // Parse the Tag: using (var ms = new MemoryStream(buf, 0, nr, false)) using (var sr = new StreamReader(ms, Encoding.UTF8)) { string line = sr.ReadLine(); // Set CommitID: if (line == null || !line.StartsWith("commit ")) { return(new TagParseExpectedCommitError()); } var ecid = CommitID.TryParse(line.Substring("commit ".Length)); if (ecid.HasErrors) { return(ecid.Errors); } tb.CommitID = ecid.Value; // Set Name: line = sr.ReadLine(); if (line == null || !line.StartsWith("name ")) { return(new TagParseExpectedNameError()); } tb.Name = (TagName)line.Substring("name ".Length); // Set Tagger: line = sr.ReadLine(); if (line == null || !line.StartsWith("tagger ")) { return(new TagParseExpectedTaggerError()); } tb.Tagger = line.Substring("tagger ".Length); // Set DateTagged: line = sr.ReadLine(); if (line == null || !line.StartsWith("date ")) { return(new TagParseExpectedDateError()); } // NOTE: date parsing will result in an inexact DateTimeOffset from what was created with, but it // is close enough because the SHA-1 hash is calculated using the DateTimeOffset.ToString(), so // only the ToString() representations of the DateTimeOffsets need to match. DateTimeOffset tmpDate; if (!DateTimeOffset.TryParse(line.Substring("date ".Length), out tmpDate)) { return(new TagParseBadDateFormatError()); } tb.DateTagged = tmpDate; // Skip empty line: line = sr.ReadLine(); if (line == null || line.Length != 0) { return(new TagParseExpectedBlankLineError()); } // Set Message: tb.Message = sr.ReadToEnd(); } // Create the immutable Tag from the Builder: Tag tg = tb; // Validate the computed TagID: if (tg.ID != id) { return(new ComputedTagIDMismatchError(tg.ID, id)); } return(tg); }
public Task<Errorable<Tag>> GetTag(TagID id) { return getTag(id); }
public TagIDRecordDoesNotExistError(TagID tagID) : base("A tag with TagID {0} does not exist", tagID) { }
public ComputedTagIDMismatchError(TagID computedID, TagID expectedID) : base("Computed TagID {0} does not match expected TagID {1}", computedID, expectedID) { }
internal FileInfo getPathByID(TagID id) { DirectoryInfo objDir = getObjectsDirectory(); string idStr = id.ToString(); string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2), idStr.Substring(2)); return new FileInfo(path); }
public QueryCommitByTagID(TagID id) { this._id = id; }
public Task <Errorable <Tag> > GetTag(TagID id) { return(getTag(id)); }
public Task <Errorable <Tag> > GetTag(TagID id) { return(db.ExecuteSingleQueryAsync(new QueryTag(id))); }
public TagIDPartialNoResolutionError(TagID.Partial id) : base("Partial TagID {0} does not resolve to a TagID", id) { }
public TagIDPartialAmbiguousResolutionError(TagID.Partial id, params TagID[] ids) : base("Partial TagID {0} resolves to multiple TagID", id, ids) { }
public Task<Errorable<Tuple<Tag, Commit>>> GetCommitByTag(TagID id) { return db.ExecuteSingleQueryAsync(new QueryCommitByTagID(id)); }
private async Task<Errorable<Tag>> getTag(TagID id) { FileInfo fi = system.getPathByID(id); if (!fi.Exists) return new TagIDRecordDoesNotExistError(id); byte[] buf; int nr = 0; using (var fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true)) { // TODO: implement an async buffered Stream: buf = new byte[16384]; nr = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false); if (nr >= 16384) { // My, what a large tag you have! throw new NotSupportedException(); } } Tag.Builder tb = new Tag.Builder(); // Parse the Tag: using (var ms = new MemoryStream(buf, 0, nr, false)) using (var sr = new StreamReader(ms, Encoding.UTF8)) { string line = sr.ReadLine(); // Set CommitID: if (line == null || !line.StartsWith("commit ")) return new TagParseExpectedCommitError(); var ecid = CommitID.TryParse(line.Substring("commit ".Length)); if (ecid.HasErrors) return ecid.Errors; tb.CommitID = ecid.Value; // Set Name: line = sr.ReadLine(); if (line == null || !line.StartsWith("name ")) return new TagParseExpectedNameError(); tb.Name = (TagName)line.Substring("name ".Length); // Set Tagger: line = sr.ReadLine(); if (line == null || !line.StartsWith("tagger ")) return new TagParseExpectedTaggerError(); tb.Tagger = line.Substring("tagger ".Length); // Set DateTagged: line = sr.ReadLine(); if (line == null || !line.StartsWith("date ")) return new TagParseExpectedDateError(); // NOTE: date parsing will result in an inexact DateTimeOffset from what was created with, but it // is close enough because the SHA-1 hash is calculated using the DateTimeOffset.ToString(), so // only the ToString() representations of the DateTimeOffsets need to match. DateTimeOffset tmpDate; if (!DateTimeOffset.TryParse(line.Substring("date ".Length), out tmpDate)) return new TagParseBadDateFormatError(); tb.DateTagged = tmpDate; // Skip empty line: line = sr.ReadLine(); if (line == null || line.Length != 0) return new TagParseExpectedBlankLineError(); // Set Message: tb.Message = sr.ReadToEnd(); } // Create the immutable Tag from the Builder: Tag tg = tb; // Validate the computed TagID: if (tg.ID != id) return new ComputedTagIDMismatchError(tg.ID, id); return tg; }