private void DiscoverNodesSync() { using (var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint())) { FindResponse fileToMachineEndPoints = discoveryClient.Find(new FindCriteria(typeof(IFileToMachineServiceContract))); foreach (EndpointDiscoveryMetadata endpoint in fileToMachineEndPoints.Endpoints) { try { var client = new FileToMachineClient(new BasicHttpBinding(), endpoint.Address); FileToMachineHandler.AddToRoutingTable(client.Ping().NodeIdentifier); } catch (CommunicationException e) { } } FindResponse reverseIndexEndPoints = discoveryClient.Find(new FindCriteria(typeof(IReverseIndexServiceContract))); foreach (EndpointDiscoveryMetadata endPoint in reverseIndexEndPoints.Endpoints) { try { var client = new ReverseIndexServiceClient(new BasicHttpBinding(), endPoint.Address); ReverseIndexHandler.AddToRoutingTable(client.Ping().NodeIdentifier); } catch (CommunicationException e) { } } } }
private void InitDiscovery() { Logger.Info("Starting the (Initial) Discovery proccess..."); int discoveredReverseIndex = 0, discoveredFileToMachine = 0; var finder = new KadNodeFinder(); finder.FileToMachineEndpointDiscovered += (_, e) => { discoveredReverseIndex++; FileToMachineHandler.AddToRoutingTable(e.NodeIdentifier); Logger.Info("New Reverse Index service node found: " + e.NodeIdentifier); }; finder.ReverseIndexServiceEndpointDiscovered += (_, e) => { discoveredFileToMachine++; ReverseIndexHandler.AddToRoutingTable(e.NodeIdentifier); Logger.Info("New File2Machine service node found: " + e.NodeIdentifier); }; finder.DiscoveryFinished += (_, __) => NodeDiscoveryCompleted(); // when minNodes are discovered, ActivateAndJoin() const int minKnownNodesBeforeJoiningAsClient = 1; finder.FileToMachineEndpointDiscovered += (_, __) => { if (discoveredReverseIndex >= minKnownNodesBeforeJoiningAsClient && discoveredFileToMachine >= minKnownNodesBeforeJoiningAsClient && !IsActive) { ActivateAndJoin(); } }; finder.InitDiscovery(); }
public void CloseService() { Logger.Info("Closing services"); ReverseIndexHandler.CloseService(); FileToMachineHandler.CloseService(); Logger.Info("Services closed."); }
public void StartService() { Logger.Info("Starting services."); ReverseIndexHandler.StartService(); FileToMachineHandler.StartService(); Logger.Info("Services started"); }
private void ScanNowSync() { foreach (var searchResult in _crawler.Crawl()) { foreach (var fileId in searchResult.Files) { FileToMachineHandler.StoreIntoLookUp(fileId, searchResult.FileLocation); } ReverseIndexHandler.StoreLookUp(searchResult.Word, searchResult.Files); } }
public MainWindowViewModel() { Logger.Info("Initializing MainWindow ViewModel"); InitDiscovery(); var metric = new LambdaMetric <string>(string.Compare); // todo?? how can i know the address where these services are hosted from the config file?? string reverseIndexHostedAddress = "http://localhost:8020/ReverseIndex"; string fileToMachineHostedAddress = "http://localhost:8021/FileToMachine"; ReverseIndexHandler = new ReverseIndexHandler(metric) { NodeIdentifier = new NodeIdentifier <string>(reverseIndexHostedAddress, Cryptography.GetRandomSH1()) }; var fileIdMetric = new LambdaMetric <FileId>((f1, f2) => string.Compare(f1.FileHash, f2.FileHash)); FileToMachineHandler = new FileToMachineHandler(fileIdMetric) { NodeIdentifier = new NodeIdentifier <FileId>(fileToMachineHostedAddress, new FileId(Cryptography.GetRandomSH1(), "")) }; _queryPerformer = new QueryPerformer(ReverseIndexHandler, FileToMachineHandler); this.ObservableForProperty(model => model.IsHostStarted) .Select(change => change.Value) .DistinctUntilChanged() .Subscribe(host => { if (host) { StartService(); } else { CloseService(); } }); Logger.Info("The reverse index service node identifier is: " + ReverseIndexHandler.NodeIdentifier); Logger.Info("The file2machine service node identifier is: " + FileToMachineHandler.NodeIdentifier); }