void Reconnect(TimeSpan span)
{
int delay = (int)span.TotalMilliseconds;
if (delay <= 0) {
Reconnect();
}
var builder = CreateMessageBuilder();
builder.AppendEventPrefix();
builder.AppendText(_("Reconnecting to {0} in {1} seconds"),
JabberClient.Server, span.TotalSeconds);
Session.AddMessageToChat(Chat, builder.ToMessage());
ThreadPool.QueueUserWorkItem(delegate {
Thread.Sleep(delay);
lock (this) {
// prevent this timer from calling connect after it has been closed
if (IsDisposed) {
return;
}
// prevent this timer from calling connect if during the timout
// some other event already began a connect
if (JabberClient.XmppConnectionState != XmppConnectionState.Disconnected) {
return;
}
Connect();
}
});
}