Beispiel #1
0
        private void ConnectToSharedDir(FamiliarCommandLineArguments args)
        {
            var newSharedDir = new DirectoryInfo(Path.Combine(args.Connect, "familiar"));

            var config = Configuration.LoadDefault(args);

            if (config == null)
            {
                config = Configuration.CreateDefault(args);
            }

            if (config.SharedDirectory != null)
            {
                Terminal.WriteLine("Will change: {0}", config.SharedDirectory.FullName);
                Terminal.WriteLine("         To: {0}", newSharedDir.FullName);
            }
            else
            {
                Terminal.WriteLine("New shared directory: {0}", newSharedDir.FullName);
            }

            if (!newSharedDir.Exists)
            {
                Terminal.WriteLine("Directory does not exist. Please create if you want to use that.");
                return;
            }

            var configFile = config.ConfigFile;

            ConfigurationData configData;

            using (var stream = new FileStream(configFile.FullName, FileMode.Open))
            {
                configData = Serializer.LoadFromStream <ConfigurationData>(stream);
            }

            configData.SharedFolder = newSharedDir.FullName;

            using (var stream = new FileStream(configFile.FullName, FileMode.Create))
            {
                Serializer.SaveToStream(stream, configData);
            }

            var localStore = new FileStore(config);
            var myDataFile = localStore.FileName;

            var replication = new InboundReplication(
                newSharedDir,
                config.LocalDbDirectory,
                TimeSpan.Zero,
                (fileName) => !string.Equals(myDataFile, fileName, StringComparison.OrdinalIgnoreCase)
                );

            replication.RunOnce();

            Terminal.WriteLine("Done.");
        }
Beispiel #2
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _trace.TraceVerbose("Reading configuration...");
            var config = Configuration.LoadDefault(_args) ?? Configuration.CreateDefault(_args);

            // TODO: Should be provided by config.
            var inboundFile = new FileInfo(Path.Combine(config.LocalDbDirectory.FullName, "inbound.dat"));

            IDataStore inboundStore = new FileStore(inboundFile);

            inboundStore = new FilteredDataStore(inboundStore, IsCommand);

            IDataStore localStore = new FileStore(config);

            localStore = new FilteredDataStore(localStore, IsCommand);

            _dataStore = new NewOnTailDataStore(localStore);
            _position  = _dataStore.Eof;

            // The localStore must be the last.
            var searchStore = new CachedDataStore(new MergedDataStore(new[] { inboundStore, localStore }));

            _searcher = new Searcher(searchStore);

            if (config.SharedDirectory != null)
            {
                _trace.TraceInformation("Using shared folder: {0}", config.SharedDirectory.FullName);
                _inboundMonitor = new InboundReplication(config.SharedDirectory, config.LocalDbDirectory, TimeSpan.FromSeconds(10), IsNotMyDataFile);
                _inboundMonitor.Start();
                _outboundMonitor = new ReplicationJob("OutboundReplication", config.LocalDbDirectory, config.SharedDirectory, TimeSpan.FromSeconds(30), IsMyDataFile);
                _outboundMonitor.Start();
            }
            else
            {
                _trace.TraceWarning("Shared folder not found: {0}\r\n\r\nReplication is disabled.", config.SharedDirectory?.FullName);
            }

            _parentProcessObserver.Start();
            _consoleWindowObserver.Start();

            _trace.TraceInformation("Initialization finished.");
        }