Exemplo n.º 1
0
        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)
                    {
                    }
                }
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        public void CloseService()
        {
            Logger.Info("Closing services");

            ReverseIndexHandler.CloseService();
            FileToMachineHandler.CloseService();

            Logger.Info("Services closed.");
        }
Exemplo n.º 4
0
        public void StartService()
        {
            Logger.Info("Starting services.");

            ReverseIndexHandler.StartService();
            FileToMachineHandler.StartService();

            Logger.Info("Services started");
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }