コード例 #1
0
        bool ISubjectPersistance.SaveSubject(string provider, StoredSubject subject)
        {
            Guard.ArgumentNull(subject, nameof(subject));

            var file = Initiaize(IsolatedStorageFile.GetStore(Scope, null));
            var root = Path.Combine(ROOT_DIRECTORY, provider);
            var path = Path.Combine(root, subject.Name);

            InitializeSubDirectory(file, path);

            var filePath = Path.Combine(path, string.Concat(subject.Key, ".dat"));

            try
            {
                using var stream = new IsolatedStorageFileStream(filePath, FileMode.Create, file);
                var serializer = new BinaryCompressSerializer();
                var bytes      = serializer.Serialize(subject);
                stream.Write(bytes, 0, bytes.Length);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
コード例 #2
0
        void ISubjectPersistance.ReadSubjects(string provider, Func <StoredSubject, bool> readAndAccept)
        {
            Guard.ArgumentNull(readAndAccept, nameof(readAndAccept));

            var root = Path.Combine(ROOT_DIRECTORY, provider);
            var file = IsolatedStorageFile.GetStore(Scope, null);

            if (!file.DirectoryExists(root))
            {
                return;
            }


            foreach (var dirName in file.GetDirectoryNames(Path.Combine(root, "*")))
            {
                var subPath = Path.Combine(root, dirName);
                var deleted = new List <string>();
                foreach (var fileName in file.GetFileNames(Path.Combine(subPath, "*")))
                {
                    var filePath = Path.Combine(subPath, fileName);

                    var key = fileName.Substring(0, fileName.LastIndexOf("."));

                    try
                    {
                        using var stream = new IsolatedStorageFileStream(filePath, FileMode.Open, FileAccess.ReadWrite, file);
                        using var memory = stream.CopyToMemory();
                        var serializer = new BinaryCompressSerializer();
                        var subject    = serializer.Deserialize <StoredSubject>(memory.ToArray());
                        if (subject.ExpiresAt < DateTime.Now)
                        {
                            deleted.Add(filePath);
                            continue;
                        }

                        subject.PublishRetries++;

                        if (readAndAccept(subject))
                        {
                            deleted.Add(filePath);
                        }
                        else
                        {
                            var bytes = serializer.Serialize(subject);
                            stream.Seek(0, SeekOrigin.Begin);
                            stream.Write(bytes, 0, bytes.Length);
                        }
                    }
                    catch
                    {
                    }
                }

                foreach (var fileName in deleted)
                {
                    file.DeleteFile(fileName);
                }
            }
        }
コード例 #3
0
        public void SerializeTest()
        {
            var serializer = new BinaryCompressSerializer();

            var obj = new BinaryCryptoData
            {
                Age      = 12,
                Name     = "huangxd",
                Birthday = DateTime.Parse("1982-9-20")
            };

            var bytes = serializer.Serialize(obj);

            Assert.IsNotNull(bytes);
        }
コード例 #4
0
        public void ReadTest()
        {
            var regKey = Registry.CurrentUser.OpenSubKey("software\\fireasy", true);

            if (regKey == null)
            {
                regKey = Registry.CurrentUser.CreateSubKey("software\\fireasy");
            }

            var stream = new BinaryCompressSerializer();
            var data   = new BinaryConnectionStore {
                ConnectionString = "test", ProviderType = "mysql"
            };

            regKey.SetValue("test1", stream.Serialize(data));
            regKey.Close();

            var section = ConfigurationUnity.GetSection <InstanceConfigurationSection>();

            Assert.AreEqual("test", section.Settings["reg1"].ConnectionString);
        }
コード例 #5
0
        /// <summary>
        /// json序列化后进行压缩。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public virtual byte[] Serialize <T>(T value)
        {
            var compress = new BinaryCompressSerializer();

            return(compress.Serialize(serializer.Serialize(value)));
        }