コード例 #1
0
        private void VerifyPasswordResult(string correctPassword, string suppliedPassword, bool expectPasswordIsCorrect)
        {
            ReadRequestMessage readRequest = new ReadRequestMessage(new DateTime(0), suppliedPassword);

            using (BookmarkableStream clientStream = ClientRequestToStream(readRequest))
            {
                MockNetworkConnection networkConnection  = new MockNetworkConnection(clientStream);
                MockFolderPackager    mockFolderPackager = new MockFolderPackager();
                MockClock             serverClock        = new MockClock(new DateTime(2007, 5, 25, 15, 27, 03));

                RequestListener folderMonitor = new RequestListener(networkConnection, mockFolderPackager, serverClock, @"c:\fakepath\fakedir", correctPassword);
                folderMonitor.ProcessNextRequest();

                clientStream.ResetToBookmark();
                FarmerMessageSerializer deserializer = new FarmerMessageSerializer();
                ReadResponseMessage     readResponse = (ReadResponseMessage)deserializer.Deserialize(clientStream);

                Assert.AreEqual(expectPasswordIsCorrect, readResponse.IsPasswordCorrect);

                if (expectPasswordIsCorrect)
                {
                    Assert.AreEqual(serverClock.GetCurrentTimeUtc(), readResponse.CurrentServerTimeUtc);
                    Assert.IsNotNull(readResponse.Data);
                }
                else
                {
                    Assert.IsNull(readResponse.Data);
                }
            }
        }
コード例 #2
0
        private BookmarkableStream ClientRequestToStream(ReadRequestMessage requestMessage)
        {
            BookmarkableStream      requestStream = new BookmarkableStream();
            FarmerMessageSerializer serializer    = new FarmerMessageSerializer();

            serializer.Serialize(requestStream, requestMessage);

            requestStream.SetBookmark();
            requestStream.Seek(0, SeekOrigin.Begin);

            return(requestStream);
        }
コード例 #3
0
        public void SerializeDeserializeTest()
        {
            ReadRequestMessage messageOriginal = new ReadRequestMessage(new DateTime(2012, 5, 27), "");

            FarmerMessageSerializer serializer = new FarmerMessageSerializer();
            MemoryStream            stream     = new MemoryStream();

            serializer.Serialize(stream, messageOriginal);

            stream.Seek(0, SeekOrigin.Begin);
            ReadRequestMessage messageDeserialized = (ReadRequestMessage)serializer.Deserialize(stream);

            Assert.AreEqual(messageOriginal, messageDeserialized);
        }
コード例 #4
0
ファイル: FilePuller.cs プロジェクト: pojmanov/PeachFarmer
        public void Pull(Stream serverStream, string destinationFolder)
        {
            ReadRequestMessage readRequest = new ReadRequestMessage(LastPullTime, _serverPassword);

            FarmerMessageSerializer messageSerializer = new FarmerMessageSerializer();

            messageSerializer.Serialize(serverStream, readRequest);

            ReadResponseMessage readResponse = (ReadResponseMessage)messageSerializer.Deserialize(serverStream);

            if (!readResponse.IsPasswordCorrect)
            {
                Console.WriteLine("Error: Incorrect password.");
                return;
            }

            Console.WriteLine("Server check time was {0}", readResponse.CurrentServerTimeUtc.ToLocalTime());
            Console.WriteLine("Read {0}", FormatByteCount(readResponse.Data.Length));

            _folderUnpacker.UnpackFolder(destinationFolder, readResponse.Data);

            LastPullTime = readResponse.CurrentServerTimeUtc;
        }
コード例 #5
0
        private void VerifyMonitoring(DateTime startTimestampExpected, byte[] folderDataExpected)
        {
            MockFolderPackager mockFolderPackager = new MockFolderPackager();
            MockClock          serverClock        = new MockClock(new DateTime(2007, 5, 25, 15, 27, 03));

            ReadRequestMessage readRequest = new ReadRequestMessage(startTimestampExpected, CorrectPassword);

            using (BookmarkableStream clientStream = ClientRequestToStream(readRequest))
            {
                MockNetworkConnection networkConnection = new MockNetworkConnection(clientStream);
                RequestListener       folderMonitor     = new RequestListener(networkConnection, mockFolderPackager, serverClock, @"c:\fakepath\fakedir", CorrectPassword);
                folderMonitor.ProcessNextRequest();
                Assert.AreEqual(@"c:\fakepath\fakedir", mockFolderPackager.LastFolderPacked);
                Assert.AreEqual(startTimestampExpected, mockFolderPackager.LastModifiedMinimumRequested);

                clientStream.ResetToBookmark();
                FarmerMessageSerializer deserializer = new FarmerMessageSerializer();
                ReadResponseMessage     response     = (ReadResponseMessage)deserializer.Deserialize(clientStream);

                Assert.AreEqual(serverClock.GetCurrentTimeUtc(), response.CurrentServerTimeUtc);
                Assert.IsTrue(Util.ArraysEqual <byte>(folderDataExpected, response.Data));
            }
        }
コード例 #6
0
 protected void ProcessImpl(ReadRequestMessage requestMessage, ReadResponseMessage responseMessage)
 {
     responseMessage.CurrentServerTimeUtc = _clock.GetCurrentTimeUtc();
     responseMessage.Data = _folderPackager.PackFolder(_folderPath, requestMessage.LastCheckTimeUtc);
 }
コード例 #7
0
ファイル: Connection.cs プロジェクト: cshung/MultiplexingLab
            private ActorContinuation OnReadRequestMessage(ReadRequestMessage readRequestMessage)
            {
                ChannelReceivingActor channelReceivingActor;
                if (this.channelReceivingActors.TryGetValue(readRequestMessage.ChannelId, out channelReceivingActor))
                {
                    this.Send(channelReceivingActor, readRequestMessage);
                }
                else
                {
                    throw new Exception("Receiving read request from unknown channel");
                }

                return ActorContinuation.BlockOnReceive;
            }
コード例 #8
0
ファイル: Connection.cs プロジェクト: cshung/MultiplexingLab
            private void TrySatisfyReadRequest()
            {
                if (this.readRequest != null)
                {
                    int copiedCount = 0;
                    bool isEof = false;
                    int spaceToFill = this.readRequest.Count;
                    while (spaceToFill > 0 && this.data.Count > 0)
                    {
                        SegmentWrapper firstSegmentWrapper = this.data.Peek();
                        ArraySegment<byte> firstSegment = firstSegmentWrapper.Segment;
                        int bytesToCopy = Math.Min(firstSegment.Count, spaceToFill);
                        if (firstSegment.Count == 0)
                        {
                            if (this.accepted)
                            {
                                isEof = true;
                            }
                            else
                            {
                                this.accepted = true;
                            }
                        }

                        if (bytesToCopy == firstSegment.Count)
                        {
                            this.data.Dequeue();
                        }
                        else
                        {
                            firstSegmentWrapper.Segment = new ArraySegment<byte>(firstSegment.Array, firstSegment.Offset + bytesToCopy, firstSegment.Count - bytesToCopy);
                        }

                        Array.Copy(firstSegment.Array, firstSegment.Offset, this.readRequest.Buffer, this.readRequest.Offset + copiedCount, bytesToCopy);
                        copiedCount += bytesToCopy;
                        spaceToFill -= bytesToCopy;
                    }

                    if (copiedCount > 0 || isEof)
                    {
                        this.Send(this.parent, new DataConsumedMessage(copiedCount));
                        ReadAsyncResult completionHandle = this.readRequest.CompletionHandle;
                        this.readRequest = null;
                        completionHandle.NotifyCompleted(copiedCount);
                    }

                    // TODO: Here is when a channel is closed by the other side
                }
            }
コード例 #9
0
ファイル: Connection.cs プロジェクト: cshung/MultiplexingLab
            private ActorContinuation OnReadRequestMessage(ReadRequestMessage readRequestMessage)
            {
                if (this.readRequest == null)
                {
                    this.readRequest = readRequestMessage;
                    this.TrySatisfyReadRequest();
                }
                else
                {
                    throw new Exception("Receiving read request while existing read request haven't completed yet");
                }

                return ActorContinuation.BlockOnReceive;
            }