private void WriteDateTime(StreamWriter eventStream, WspBuffer serializedEvent, PersistEventInfo eventInfo) { DateTime dateTime; if (serializedEvent.Read(out dateTime) == false) { throw new EventDeserializationException("Error reading List length from buffer"); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(dateTime.ToString("o"), eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); }
private string CleanseString(string stringIn, PersistEventInfo eventInfo) { StringBuilder sb = new StringBuilder(); if (string.IsNullOrEmpty(stringIn) == false) { for (int i = 0; i < stringIn.Length; i++) { if (stringIn[i] == eventInfo.StringDelimiter) { sb.Append(eventInfo.EscapeCharacter); sb.Append(eventInfo.StringDelimiter); continue; } else if (stringIn[i] == eventInfo.EscapeCharacter) { if (eventInfo.EscapeCharacter == '\\' && (i + 1) < stringIn.Length) { switch (stringIn.Substring(i, 2)) { case @"\b": sb.Append(@"\b"); i++; continue; case @"\f": sb.Append(@"\f"); i++; continue; case @"\n": sb.Append(@"\n"); i++; continue; case @"\r": sb.Append(@"\r"); i++; continue; case @"\t": sb.Append(@"\t"); i++; continue; case @"\u": sb.Append(@"\u"); i++; continue; case @"\/": sb.Append(@"\/"); i++; continue; case "\\\"": sb.Append("\\\""); i++; continue; case @"\\": sb.Append(@"\\"); i++; continue; default: sb.Append(eventInfo.EscapeCharacter); sb.Append(eventInfo.EscapeCharacter); continue; } } else { sb.Append(eventInfo.EscapeCharacter); sb.Append(eventInfo.EscapeCharacter); continue; } } else { switch (stringIn[i]) { case '\b': sb.Append(eventInfo.EscapeCharacter); sb.Append('b'); continue; case '\f': sb.Append(eventInfo.EscapeCharacter); sb.Append('f'); continue; case '\n': sb.Append(eventInfo.EscapeCharacter); sb.Append('n'); continue; case '\r': sb.Append(eventInfo.EscapeCharacter); sb.Append('r'); continue; case '\t': sb.Append(eventInfo.EscapeCharacter); sb.Append('t'); continue; case '/': sb.Append(eventInfo.EscapeCharacter); sb.Append('/'); continue; case '\"': sb.Append(eventInfo.EscapeCharacter); sb.Append('\"'); continue; case '\\': sb.Append(eventInfo.EscapeCharacter); sb.Append('\\'); continue; default: sb.Append(stringIn[i]); continue; } } } } return(sb.ToString()); }
private void WriteCharArray(StreamWriter eventStream, WspBuffer serializedEvent, PersistEventInfo eventInfo) { char[] charArray; bool first = true; if (serializedEvent.Read(out charArray) == false) { throw new EventDeserializationException("Error reading List length from buffer"); } eventStream.Write(eventInfo.BeginArraySeparator); for (int i = 0; i < charArray.Length; i++) { if (first == true) { first = false; } else { eventStream.Write(eventInfo.FieldTerminator); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(charArray[i].ToString(), eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); } eventStream.Write(eventInfo.EndArraySeparator); }
private void WriteObjectList(StreamWriter eventStream, WspBuffer serializedEvent, PersistEventInfo eventInfo) { int listCount; byte propType; object propValue; bool first = true; if (serializedEvent.Read(out listCount) == false) { throw new EventDeserializationException("Error reading List length from buffer"); } eventStream.Write(eventInfo.BeginArraySeparator); for (int i = 0; i < listCount; i++) { if (first == true) { first = false; } else { eventStream.Write(eventInfo.FieldTerminator); } if (serializedEvent.Read(out propType) == false) { throw new EventDeserializationException("Error reading PropertyType from buffer"); } if ((PropertyType)propType == PropertyType.StringDictionary) { WriteStringDictionary(eventStream, serializedEvent, eventInfo); } else { if ((PropertyType)propType == PropertyType.ObjectDictionary) { WriteObjectDictionary(eventStream, serializedEvent, eventInfo); } else { if ((PropertyType)propType == PropertyType.StringList) { WriteStringList(eventStream, serializedEvent, eventInfo); } else { if ((PropertyType)propType == PropertyType.ObjectList) { WriteObjectList(eventStream, serializedEvent, eventInfo); } else { if (serializedEvent.Read((PropertyType)propType, out propValue) == false) { throw new EventDeserializationException("Error reading PropertyValue from buffer"); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(propValue.ToString(), eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); } } } } } eventStream.Write(eventInfo.EndArraySeparator); }
private void WriteStringList(StreamWriter eventStream, WspBuffer serializedEvent, PersistEventInfo eventInfo) { int listCount; string stringValue; bool first = true; if (serializedEvent.Read(out listCount) == false) { throw new EventDeserializationException("Error reading List length from buffer"); } eventStream.Write(eventInfo.BeginArraySeparator); for (int i = 0; i < listCount; i++) { if (first == true) { first = false; } else { eventStream.Write(eventInfo.FieldTerminator); } if (serializedEvent.Read(out stringValue) == false) { throw new EventDeserializationException("Error reading List value from buffer"); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(stringValue, eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); } eventStream.Write(eventInfo.EndArraySeparator); }
private void WriteStringDictionary(StreamWriter eventStream, WspBuffer serializedEvent, PersistEventInfo eventInfo) { int dictCount; string stringKey; string stringValue; bool first = true; if (serializedEvent.Read(out dictCount) == false) { throw new EventDeserializationException("Error reading StringDictionary length from buffer"); } eventStream.Write(eventInfo.BeginObjectSeparator); for (int i = 0; i < dictCount; i++) { if (first == true) { first = false; } else { eventStream.Write(eventInfo.FieldTerminator); } if (serializedEvent.Read(out stringKey) == false) { throw new EventDeserializationException("Error reading StringDictionary key from buffer"); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(stringKey, eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(eventInfo.KeyValueSeparator); if (serializedEvent.Read(out stringValue) == false) { throw new EventDeserializationException("Error reading StringDictionary value from buffer"); } eventStream.Write(eventInfo.StringDelimiter.ToString()); eventStream.Write(CleanseString(stringValue, eventInfo)); eventStream.Write(eventInfo.StringDelimiter.ToString()); } eventStream.Write(eventInfo.EndObjectSeparator); }
private void SendPersistEvent(PersistFileState fileState, PersistEventInfo eventInfo, string outFileName) { PersistFileEvent persistFileEvent; PubSubManager.ReturnCode rc; try { persistFileEvent = persistFileEvents.Pop(); } catch { persistFileEvent = new PersistFileEvent(); } persistFileEvent.PersistEventType = eventInfo.PersistEventType; persistFileEvent.FileState = fileState; persistFileEvent.FileName = outFileName; persistFileEvent.SettingLocalOnly = eventInfo.LocalOnly; persistFileEvent.SettingMaxCopyInterval = (int)(eventInfo.CopyIntervalTicks / 10000000); persistFileEvent.SettingMaxFileSize = eventInfo.MaxFileSize; persistFileEvent.SettingFieldTerminator = eventInfo.FieldTerminator; persistFileEvent.SettingRowTerminator = eventInfo.RowTerminator; persistFileEvent.SettingBeginObjectSeparator = eventInfo.BeginObjectSeparator; persistFileEvent.SettingEndObjectSeparator = eventInfo.EndObjectSeparator; persistFileEvent.SettingBeginArraySeparator = eventInfo.BeginArraySeparator; persistFileEvent.SettingEndArraySeparator = eventInfo.EndArraySeparator; persistFileEvent.SettingKeyValueSeparator = eventInfo.KeyValueSeparator; persistFileEvent.SettingStringDelimiter = eventInfo.StringDelimiter; persistFileEvent.SettingEscapeCharacter = eventInfo.EscapeCharacter; persistFileEvent.FileNameBase = fileNameBase; if (fileState == PersistFileState.Open || outFileName == null) { persistFileEvent.FileSize = 0; } else { try { persistFileEvent.FileSize = (new FileInfo(outFileName)).Length; } catch { persistFileEvent.FileSize = 0; } } for (int i = 0; i < 20; i++) { try { WspEvent wspEvent = new WspEvent(PersistFileEvent.EventType, null, persistFileEvent.Serialize()); eventPush.OnNext(wspEvent, out rc); if (rc == PubSubManager.ReturnCode.Success) { break; } } catch { } } persistFileEvents.Push(persistFileEvent); }