public void TestSetup() { _serverModificationMessage = null; _serverMessage = null; }
void server_MessageReceived(object sender, ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs e) { _serverMessage = e.Message; if (_serverMessage is FileModificationMessage) { _serverModificationMessage = _serverMessage as FileModificationMessage; } }
//Send modifications where they appeared to have been valid //i.e Remove has fully removed all instances, or New where file is available on a client. //Functionality is, therefore, subtlety different for // // * Remove (will be used in the message ONLY when all files are removed) and // * New (will be added in the message whilst the uniquely hashed file is available each time an instance is added). // //As multiple of the same file (in different locations on the client) can be added at once, //it is not so easy to differentiate a 'first addition' of a file to only use those here as // //Currently up to clients as to whether to store the added files (with the limitToUniquelyHashedFilesOnly //flag on the FileDescriptorLookup). // //Sure I can come up with a nicer solution, but, until then, this is functionally accurate internal void BroadcastFileListModifications(List<FileModificationDescriptor> list) { if (ProtocolList.Count == 0) return; List<FileDescriptor> availableFiles = CurrentlyAvailableFiles as List<FileDescriptor>; using (FileModificationMessage message = new FileModificationMessage()) { foreach(FileModificationDescriptor modification in list) { bool available = availableFiles.Exists(f => f.Hash == modification.Hash); if ( (modification.Mode == FileModificationMode.New && available) || (modification.Mode == FileModificationMode.Remove && !available) || (modification.Mode == FileModificationMode.Renamed) ) { ProtocolList[0].AddValueToMessage(message, modification); } } Broadcast(message); } }
public void WhenFileModificationMessages_ModeRemoved_AreSentByClient_TheyShouldBeFullyReceivedByServer() { _serverMessage = null; FileDescriptor[] descriptors = null; string originId = "Not Set"; using (ServerInstance server = new ServerInstance(_settings)) { server.MessageReceived += new EventHandler<ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs>(server_MessageReceived); server.Connect(); while (!server.IsConnected) ; using (ClientInstance client = new ClientInstance(_settings)) { client.Connect(); originId = client.ConnectionDetails.InstanceId; descriptors = new List<FileDescriptor>() { FileDescriptor.Create(_existingFile1, true), FileDescriptor.Create(_existingFile2, true), FileDescriptor.Create(_existingFile3, true) }.ToArray(); _serverModificationMessage = null; client.RemoveFiles(descriptors); DateTime then = DateTime.Now; while (_serverModificationMessage == null && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsNotNull(_serverModificationMessage); Assert.AreEqual(descriptors[0].FileFullName, _serverModificationMessage.Modifications[0].FileFullName); Assert.AreEqual(descriptors[1].FileFullName, _serverModificationMessage.Modifications[1].FileFullName); Assert.AreEqual(descriptors[2].FileFullName, _serverModificationMessage.Modifications[2].FileFullName); //Assert.AreEqual(descriptors[0].FileId, _serverModificationMessage.Modifications[0].FileId); //Assert.AreEqual(descriptors[1].FileId, _serverModificationMessage.Modifications[1].FileId); //Assert.AreEqual(descriptors[2].FileId, _serverModificationMessage.Modifications[2].FileId); Assert.AreEqual(originId, _serverModificationMessage.Modifications[0].OriginId); Assert.AreEqual(originId, _serverModificationMessage.Modifications[1].OriginId); Assert.AreEqual(originId, _serverModificationMessage.Modifications[2].OriginId); Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[0].Mode); Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[1].Mode); Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[2].Mode); } } }
internal void SendFileListModifications(IList<FileModificationDescriptor> modifications) { using (FileModificationMessage message = new FileModificationMessage()) { foreach (FileModificationDescriptor descriptor in modifications) { ClientProtocol.AddValueToMessage(message, descriptor); } ClientProtocol.SendMessage(message); } }