Exemplo n.º 1
0
        public override void Stop()
        {
            lock (_stateLock)
            {
                lock (_thisLock)
                {
                    if (this.State == ManagerState.Stop)
                    {
                        return;
                    }
                    _state = ManagerState.Stop;
                }

                _watchThread.Join();
                _watchThread = null;

                if (_samManager != null)
                {
                    _samManager.Dispose();
                }
                _samManager = null;

                lock (_thisLock)
                {
                    if (_settings.I2pUri != null)
                    {
                        if (this.RemoveUri(_settings.I2pUri))
                        {
                            Log.Information(string.Format("Remove Node uri: {0}", _settings.I2pUri));
                        }
                    }
                    _settings.I2pUri = null;
                }
            }
        }
Exemplo n.º 2
0
        protected override void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }
            _disposed = true;

            if (disposing)
            {
                if (_samManager != null)
                {
                    _samManager.Dispose();
                }
                _samManager = null;
            }
        }
Exemplo n.º 3
0
            public override void Stop()
            {
                lock (_stateLockObject)
                {
                    lock (_lockObject)
                    {
                        if (this.State == ManagerState.Stop)
                        {
                            return;
                        }
                        _state = ManagerState.Stop;
                    }

                    _watchTimer.Stop();

                    if (_samManager != null)
                    {
                        _samManager.Dispose();
                        _samManager = null;
                    }
                }
            }
Exemplo n.º 4
0
            protected override void Dispose(bool isDisposing)
            {
                if (_isDisposed)
                {
                    return;
                }
                _isDisposed = true;

                if (isDisposing)
                {
                    if (_watchTimer != null)
                    {
                        _watchTimer.Dispose();
                        _watchTimer = null;
                    }

                    if (_samManager != null)
                    {
                        _samManager.Dispose();
                        _samManager = null;
                    }
                }
            }
Exemplo n.º 5
0
            private void WatchThread()
            {
                for (; ;)
                {
                    var config = this.Config;

                    string i2pUri = null;

                    if (config.IsEnabled)
                    {
                        if ((_samManager == null || !_samManager.IsConnected) ||
                            _watchSamBridgeUri != config.SamBridgeUri)
                        {
                            try
                            {
                                var result = UriUtils.Parse(config.SamBridgeUri);
                                if (result == null)
                                {
                                    throw new Exception();
                                }

                                string scheme = result.GetValue <string>("Scheme");
                                if (scheme != "tcp")
                                {
                                    throw new Exception();
                                }

                                string address = result.GetValue <string>("Address");
                                int    port    = result.GetValueOrDefault <int>("Port", () => 7656);

                                if (_samManager != null)
                                {
                                    _samManager.Dispose();
                                    _samManager = null;
                                }

                                _samManager = new SamManager(address, port, "Amoeba");
                                _samManager.Start();

                                _watchSamBridgeUri = config.SamBridgeUri;
                            }
                            catch (Exception)
                            {
                                if (_samManager != null)
                                {
                                    _samManager.Dispose();
                                    _samManager = null;
                                }
                            }
                        }

                        if (_samManager.Base32Address != null)
                        {
                            i2pUri = string.Format("i2p:{0}", _samManager.Base32Address);
                        }
                    }
                    else
                    {
                        if (_samManager != null)
                        {
                            _samManager.Dispose();
                            _samManager = null;
                        }
                    }

                    lock (_lockObject)
                    {
                        if (this.Config != config)
                        {
                            continue;
                        }

                        _locationUris.Clear();
                        if (i2pUri != null)
                        {
                            _locationUris.Add(i2pUri);
                        }
                    }

                    return;
                }
            }
Exemplo n.º 6
0
        private void WatchThread()
        {
            var checkSamStopwatch = new Stopwatch();

            checkSamStopwatch.Start();

            for (;;)
            {
                Thread.Sleep(1000);
                if (this.State == ManagerState.Stop)
                {
                    return;
                }

                if (!checkSamStopwatch.IsRunning || checkSamStopwatch.Elapsed.TotalSeconds >= 30)
                {
                    checkSamStopwatch.Restart();

                    if ((_samManager == null || !_samManager.IsConnected) ||
                        _oldSamBridgeUri != this.SamBridgeUri)
                    {
                        string i2pUri = null;

                        try
                        {
                            var match = _regex.Match(this.SamBridgeUri);
                            if (!match.Success)
                            {
                                throw new Exception();
                            }

                            if (match.Groups[1].Value == "tcp")
                            {
                                {
                                    if (_samManager != null)
                                    {
                                        _samManager.Dispose();
                                        _samManager = null;
                                    }

                                    var host = match.Groups[2].Value;
                                    var port = int.Parse(match.Groups[3].Value);

                                    _samManager = new SamManager(host, port, "Amoeba");
                                }

                                var base32Address = _samManager.Start();

                                if (base32Address != null)
                                {
                                    i2pUri = string.Format("i2p:{0}", base32Address);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            if (_samManager != null)
                            {
                                _samManager.Dispose();
                            }
                        }

                        lock (_thisLock)
                        {
                            if (i2pUri != _settings.I2pUri)
                            {
                                if (this.RemoveUri(_settings.I2pUri))
                                {
                                    Log.Information(string.Format("Remove Node uri: {0}", _settings.I2pUri));
                                }
                            }

                            _settings.I2pUri = i2pUri;

                            if (_settings.I2pUri != null)
                            {
                                if (this.AddUri(_settings.I2pUri))
                                {
                                    Log.Information(string.Format("Add Node uri: {0}", _settings.I2pUri));
                                }
                            }

                            _oldSamBridgeUri = this.SamBridgeUri;
                        }
                    }
                }
            }
        }