// 设置历史字符串的某位的 'y' 状态 public static int SetNotified( LibraryApplication app, string strBodyType, int nTimeIndex, ref string strHistory, out string strError) { strError = ""; Debug.Assert(nTimeIndex >= 0, ""); int nExtendCount = 0; // 扩展接口的个数 if (app.m_externalMessageInterfaces != null) nExtendCount = app.m_externalMessageInterfaces.Count; int nSegmentLength = nExtendCount + 2; // 每个小部分的长度 int index = -1; // 0: dpmail; 1: email; >=2: 其他扩充的消息接口方式 if (strBodyType == "dpmail") { index = 0; } else if (strBodyType == "email") { index = 1; } else { MessageInterface external_interface = app.GetMessageInterface(strBodyType); if (external_interface == null) { strError = "不能识别的 message type '" + strBodyType + "'"; return -1; } index = app.m_externalMessageInterfaces.IndexOf(external_interface); if (index == -1) { strError = "external_interface (type '" + external_interface.Type + "') 没有在 m_externalMessageInterfaces 数组中找到"; return -1; } index += 2; } // 计算在整体中的偏移 index = (nSegmentLength * nTimeIndex) + index; if (strHistory.Length < index + 1) strHistory = strHistory.PadRight(index + 1, 'n'); strHistory = strHistory.Remove(index, 1); strHistory = strHistory.Insert(index, "y"); return 1; }
// 合并设置一种 body type 的全部通知字符 // 把 strChars 中的 'y' 设置到 strHistory 中对应达到位。'n' 不设置 public static int SetNotifiedChars(LibraryApplication app, string strBodyType, string strChars, ref string strHistory, out string strError) { strError = ""; int nExtendCount = 0; // 扩展接口的个数 if (app.m_externalMessageInterfaces != null) nExtendCount = app.m_externalMessageInterfaces.Count; int nSegmentLength = nExtendCount + 3; // 原来是 2 // 每个小部分的长度 int index = -1; // 0: dpmail; 1: email; >=2: 其他扩充的消息接口方式 if (strBodyType == "dpmail") { index = 0; } else if (strBodyType == "email") { index = 1; } else if (strBodyType == "mq") { index = 2; } else { MessageInterface external_interface = app.GetMessageInterface(strBodyType); if (external_interface == null) { strError = "不能识别的 message type '" + strBodyType + "'"; return -1; } index = app.m_externalMessageInterfaces.IndexOf(external_interface); if (index == -1) { strError = "external_interface (type '" + external_interface.Type + "') 没有在 m_externalMessageInterfaces 数组中找到"; return -1; } index += 3; // 原来是 2 } for (int i = 0; i < strChars.Length; i++) { char ch = strChars[i]; if (ch == 'n') continue; int nLength = (i + 1) * nSegmentLength; if (strHistory.Length < nLength) strHistory = strHistory.PadRight(nLength, 'n'); int nOffs = i * nSegmentLength + index; strHistory = strHistory.Remove(nOffs, 1); strHistory = strHistory.Insert(nOffs, "y"); } return 0; }
// 观察历史字符串的某位的 'y'/'n' 状态 // parameters: // strBodyType 通知消息的接口 (媒体) 类型 // nTimeIndex 2013/9/24 催还的次数下标。0 表示已经超期时的催还,1 等以后的值表示配置字符串中定义的特定次数的提醒通知,也就是尚未超期时候的提醒 public static bool IsNotified( LibraryApplication app, string strBodyType, int nTimeIndex, string strHistory) { Debug.Assert(nTimeIndex >= 0, ""); int nExtendCount = 0; // 扩展接口的个数 if (app.m_externalMessageInterfaces != null) nExtendCount = app.m_externalMessageInterfaces.Count; int nSegmentLength = nExtendCount + 2; // 每个小部分的长度 int index = -1; // 0: dpmail; 1: email; >=2: 其他扩充的消息接口方式 if (strBodyType == "dpmail") { index = 0; } else if (strBodyType == "email") { index = 1; } else { MessageInterface external_interface = app.GetMessageInterface(strBodyType); if (external_interface == null) { // strError = "不能识别的 message type '" + strBodyType + "'"; // return -1; return false; } index = app.m_externalMessageInterfaces.IndexOf(external_interface); if (index == -1) { // strError = "external_interface (type '" + external_interface.Type + "') 没有在 m_externalMessageInterfaces 数组中找到"; // return -1; return false; } index += 2; } // 计算在整体中的偏移 index = (nSegmentLength * nTimeIndex) + index; if (strHistory.Length < index + 1) return false; if (strHistory[index] == 'y') return true; return false; }
// 获得一种 body type 的全部通知字符 public static string GetNotifiedChars(LibraryApplication app, string strBodyType, string strHistory) { int nExtendCount = 0; // 扩展接口的个数 if (app.m_externalMessageInterfaces != null) nExtendCount = app.m_externalMessageInterfaces.Count; int nSegmentLength = nExtendCount + 3; // 原来是 2 // 每个小部分的长度 int index = -1; // 0: dpmail; 1: email; >=2: 其他扩充的消息接口方式 if (strBodyType == "dpmail") { index = 0; } else if (strBodyType == "email") { index = 1; } else if (strBodyType == "mq") { index = 2; } else { MessageInterface external_interface = app.GetMessageInterface(strBodyType); if (external_interface == null) { // strError = "不能识别的 message type '" + strBodyType + "'"; // return -1; return null; } index = app.m_externalMessageInterfaces.IndexOf(external_interface); if (index == -1) { // strError = "external_interface (type '" + external_interface.Type + "') 没有在 m_externalMessageInterfaces 数组中找到"; // return -1; return null; } index += 3; // 原来是 2 } string strResult = ""; for (int i = 0; i < strHistory.Length / nSegmentLength; i++) { int nStart = i * nSegmentLength; int nLength = nSegmentLength; if (nStart + nLength > strHistory.Length) nLength = strHistory.Length - nStart; string strSegment = strHistory.Substring(nStart, nLength); if (index < strSegment.Length) strResult += strSegment[index]; else strResult += 'n'; } return strResult; }