public Messages() { NameValueCollection dirSettings = (NameValueCollection)ConfigurationManager.GetSection("HudsonBase/Dir"); string baseDir = dirSettings["msgdir"]; Areas = new Dictionary <int, string>(); NameValueCollection areasList = (NameValueCollection)ConfigurationManager.GetSection("HudsonBase/Areas"); foreach (string key in areasList) { Areas.Add(Convert.ToInt16(key), areasList[key]); } Index = new MsgIdx(Path.Combine(baseDir, "MSGIDX.BBS")); Headers = new MsgHdr(Path.Combine(baseDir, "MSGHDR.BBS")); MsgBodies = new Dictionary <int, string>(); byte[] text = File.ReadAllBytes(Path.Combine(baseDir, "MSGTXT.BBS")); foreach (MsgHdr.MsgHdrRecord h in Headers.Data) { StringBuilder sb = new StringBuilder(); for (int j = 0; j < h.NumBlocks; j++) { sb.Append(FidonetHelpers.GetPascalString(text, (h.StartBlock + j) * 256)); } MsgBodies.Add(h.MsgNum, sb.ToString()); } }
public MsgHdrRecord(byte[] raw, int idx) : this() { MsgNum = FidonetHelpers.GetUShort(raw, idx); PrevReply = FidonetHelpers.GetUShort(raw, idx + 2); NextReply = FidonetHelpers.GetUShort(raw, idx + 4); TimesRead = FidonetHelpers.GetUShort(raw, idx + 6); StartBlock = FidonetHelpers.GetUShort(raw, idx + 8); NumBlocks = FidonetHelpers.GetUShort(raw, idx + 10); DestNet = FidonetHelpers.GetUShort(raw, idx + 12); DestNode = FidonetHelpers.GetUShort(raw, idx + 14); OrigNet = FidonetHelpers.GetUShort(raw, idx + 16); OrigNode = FidonetHelpers.GetUShort(raw, idx + 18); DestZone = raw[idx + 20]; OrigZone = raw[idx + 21]; Cost = FidonetHelpers.GetUShort(raw, idx + 22); MsgAttr = raw[idx + 24]; NetAttr = raw[idx + 25]; Board = raw[idx + 26]; string time = FidonetHelpers.GetPascalString(raw, idx + 0x1b); string date = FidonetHelpers.GetPascalString(raw, idx + 0x21); if (!DateTime.TryParseExact($"{date} {time}", "MM-dd-yy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out Timestamp)) { Timestamp = DateTime.MinValue; } WhoTo = FidonetHelpers.GetPascalString(raw, idx + 0x2a); WhoFrom = FidonetHelpers.GetPascalString(raw, idx + 0x4e); Subject = FidonetHelpers.GetPascalString(raw, idx + 0x72); }