コード例 #1
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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());
            }
コード例 #2
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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());
            }
コード例 #3
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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);
            }
コード例 #4
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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);
            }
コード例 #5
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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);
            }
コード例 #6
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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);
            }
コード例 #7
0
ファイル: Persister.cs プロジェクト: epowers/pubsub
            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);
            }