예제 #1
0
        private async Task TestPageWriteAndRead(PagesCluster clusterPage, long pageId, Dictionary <long, byte[]> cache)
        {
            var messagePageId = new MessagePageId(pageId);
            var hasPage       = await clusterPage.HasPageAsync(messagePageId);

            Assert.IsFalse(hasPage);


            var msg = new MessageContentGrpcModel
            {
                Created   = DateTime.UtcNow,
                Data      = new [] { (byte)pageId, (byte)pageId, (byte)pageId },
                MessageId = pageId,
            };

            var content = new CompressedPage(new MessagePageId(pageId), new [] { msg });

            cache.Add(pageId, content.ZippedContent.ToArray());

            await clusterPage.WriteAsync(messagePageId, content);

            hasPage = await clusterPage.HasPageAsync(messagePageId);

            Assert.IsTrue(hasPage);

            var resultContent = await clusterPage.ReadAsync(messagePageId);

            resultContent.ZippedContent.AssertAllBytesAreEqualWith(content.ZippedContent);
        }
예제 #2
0
 public static MessageRestApiModel Create(MessageContentGrpcModel model)
 {
     return(new()
     {
         Id = model.MessageId,
         Content = Convert.ToBase64String(model.Data),
         Created = model.Created
     });
 }
예제 #3
0
 public static MessageContentBlobContract Create(MessageContentGrpcModel src)
 {
     return(new MessageContentBlobContract
     {
         MessageId = src.MessageId,
         Created = src.Created,
         Data = src.Data
     });
 }
예제 #4
0
 public void Add(MessageContentGrpcModel message)
 {
     _readerWriterLockSlim.EnterWriteLock();
     try
     {
         _cache.TryAdd(message.MessageId, message);
     }
     finally
     {
         _readerWriterLockSlim.ExitWriteLock();
     }
 }
예제 #5
0
        public static byte[] SerializeContract(this MessageContentGrpcModel src)
        {
            var contract = MessageContentBlobContract.Create(src);

            var memStream = new MemoryStream();

            memStream.Write(Header);

            ProtoBuf.Serializer.Serialize(memStream, contract);

            var result = memStream.ToArray();

            BitConverter.TryWriteBytes(result.AsSpan(0, Header.Length), result.Length - 4);

            return(result);
        }
        public void TestNullMetaData()
        {
            var packet = new MessageContentGrpcModel
            {
                Created   = DateTime.UtcNow,
                Data      = new byte[] { 1, 2, 3 },
                MessageId = 15,
            };


            var stream = new MemoryStream();

            ProtoBuf.Serializer.Serialize(stream, packet);

            stream.Position = 0;

            var result = ProtoBuf.Serializer.Deserialize <MessageContentGrpcModel>(stream);

            Assert.AreEqual(packet.Created, result.Created);
            Assert.AreEqual(packet.Data, result.Data);
            Assert.AreEqual(packet.MessageId, result.MessageId);
        }