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;
}
}
}
}
}