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); } } }
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); }
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); }
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; }
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)); } }
protected void ProcessImpl(ReadRequestMessage requestMessage, ReadResponseMessage responseMessage) { responseMessage.CurrentServerTimeUtc = _clock.GetCurrentTimeUtc(); responseMessage.Data = _folderPackager.PackFolder(_folderPath, requestMessage.LastCheckTimeUtc); }
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; }
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 } }
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; }