[notifications] Reconnect to the IRC server after a disconnect
This commit is contained in:
parent
a35b203406
commit
dc521e4ffd
|
@ -40,28 +40,26 @@ namespace SparkleLib {
|
|||
public SparkleListener (string server, string folder_name, string user_email)
|
||||
{
|
||||
|
||||
Server = server;
|
||||
//Channel = GetSHA1 (server + folder_name);
|
||||
Channel = folder_name;
|
||||
// This is SparkleShare's centralized notification service.
|
||||
// Don't worry, we only use this server as a backup if you
|
||||
// don't have your own. All data needed to connect is hashed and
|
||||
// we don't store any personal information ever.
|
||||
// Server = "204.62.14.135";
|
||||
|
||||
if (!user_email.Equals ("") && user_email != null)
|
||||
Nick = GetSHA1 (user_email + "sparkles");
|
||||
Nick = GetSHA1 (folder_name + user_email + "sparkles");
|
||||
else
|
||||
Nick = GetSHA1 (DateTime.Now.ToString () + "sparkles");
|
||||
|
||||
Nick = "s" + Nick.Substring (0, 7);
|
||||
Nick = "s" + Nick.Substring (0, 7);
|
||||
// Channel = "#" + GetSHA1 (server + folder_name);
|
||||
|
||||
// TODO: remove
|
||||
Server = "irc.gnome.org";
|
||||
Channel = "#sparkletest";
|
||||
Server = "irc.gnome.org";
|
||||
|
||||
Client = new IrcClient () {
|
||||
PingTimeout = 120,
|
||||
SocketSendTimeout = 120,
|
||||
SocketReceiveTimeout = 120,
|
||||
AutoRetry = true,
|
||||
AutoReconnect = true,
|
||||
AutoRejoin = true
|
||||
PingTimeout = 180,
|
||||
PingInterval = 90
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -308,32 +308,37 @@ namespace SparkleLib {
|
|||
// Listen to the irc channel on the server...
|
||||
Listener = new SparkleListener (Domain, "#" + RemoteName, UserEmail);
|
||||
|
||||
// ...fetch remote changes every 90 seconds if that fails
|
||||
// ...fetch remote changes every 60 seconds if that fails
|
||||
RemoteTimer = new Timer () {
|
||||
Interval = 90000
|
||||
Interval = 60000
|
||||
};
|
||||
|
||||
|
||||
RemoteTimer.Elapsed += delegate {
|
||||
|
||||
if (_IsPolling)
|
||||
if (_IsPolling) {
|
||||
|
||||
CheckForRemoteChanges ();
|
||||
|
||||
if (!Listener.Client.IsConnected) {
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Trying to reconnect...");
|
||||
Listener.Listen ();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (_HasUnsyncedChanges)
|
||||
Push ();
|
||||
|
||||
if (!Listener.Client.IsConnected) {
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Trying to reconnect...");
|
||||
Listener.Client.Reconnect (true, true);
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Stop polling when the connection to the irc channel is succesful
|
||||
Listener.Client.OnConnected += delegate {
|
||||
|
||||
_IsPolling = false;
|
||||
|
||||
// Check for changes manually one more time
|
||||
CheckForRemoteChanges ();
|
||||
|
||||
|
@ -341,9 +346,15 @@ namespace SparkleLib {
|
|||
if (_HasUnsyncedChanges)
|
||||
Push ();
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Connected. Now listening...");
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Connected. Now listening... (" + Listener.Server + ")");
|
||||
|
||||
_IsPolling = false;
|
||||
};
|
||||
|
||||
// Start polling when the connection to the irc channel is lost
|
||||
Listener.Client.OnConnectionError += delegate {
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Lost connection. Falling back to polling...");
|
||||
_IsPolling = true;
|
||||
|
||||
};
|
||||
|
||||
|
@ -351,9 +362,7 @@ namespace SparkleLib {
|
|||
Listener.Client.OnDisconnected += delegate {
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Lost connection. Falling back to polling...");
|
||||
|
||||
_IsPolling = true;
|
||||
CheckForRemoteChanges ();
|
||||
|
||||
};
|
||||
|
||||
|
@ -361,8 +370,9 @@ namespace SparkleLib {
|
|||
Listener.Client.OnChannelMessage += delegate (object o, IrcEventArgs args) {
|
||||
|
||||
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Was notified of a remote change.");
|
||||
string message = args.Data.Message.Trim ();
|
||||
|
||||
if (!args.Data.Message.Equals (_CurrentHash)) {
|
||||
if (!message.Equals (_CurrentHash) && message.Length == 40) {
|
||||
|
||||
FetchRequests++;
|
||||
|
||||
|
@ -406,9 +416,7 @@ namespace SparkleLib {
|
|||
};
|
||||
|
||||
|
||||
if (_IsPolling)
|
||||
RemoteTimer.Start ();
|
||||
|
||||
RemoteTimer.Start ();
|
||||
LocalTimer.Start ();
|
||||
|
||||
// Add everything that changed
|
||||
|
@ -555,9 +563,7 @@ namespace SparkleLib {
|
|||
|
||||
} finally {
|
||||
|
||||
if (_IsPolling)
|
||||
RemoteTimer.Start ();
|
||||
|
||||
RemoteTimer.Start ();
|
||||
LocalTimer.Start ();
|
||||
|
||||
}
|
||||
|
@ -678,9 +684,7 @@ namespace SparkleLib {
|
|||
|
||||
}
|
||||
|
||||
|
||||
if (_IsPolling)
|
||||
RemoteTimer.Start ();
|
||||
RemoteTimer.Start ();
|
||||
|
||||
};
|
||||
|
||||
|
@ -989,8 +993,8 @@ namespace SparkleLib {
|
|||
|
||||
if (entry_line.StartsWith (":")) {
|
||||
|
||||
string change_type = entry_line.Substring (37, 1);
|
||||
string file_path = entry_line.Substring (39, entry_line.Length - 39);
|
||||
string change_type = entry_line [37].ToString ();
|
||||
string file_path = entry_line.Substring (39);
|
||||
|
||||
if (change_type.Equals ("A")) {
|
||||
|
||||
|
|
Loading…
Reference in a new issue