[repo] Add a simple notification queue when disconnected, and send them when reconnected.

This commit is contained in:
Hylke Bons 2011-04-23 15:56:05 +02:00
parent 6213b95ef1
commit 43621431d9
2 changed files with 27 additions and 22 deletions

View file

@ -24,25 +24,19 @@ namespace SparkleLib {
public SparkleGit (string path, string args) : base ()
{
EnableRaisingEvents = true;
StartInfo.FileName = SparklePaths.GitPath;
StartInfo.Arguments = args;
StartInfo.RedirectStandardOutput = true;
StartInfo.UseShellExecute = false;
StartInfo.WorkingDirectory = path;
}
new public void Start ()
{
SparkleHelpers.DebugInfo ("Cmd", StartInfo.FileName + " " + StartInfo.Arguments);
base.Start ();
}
}
}

View file

@ -33,7 +33,8 @@ namespace SparkleLib {
private Timer LocalTimer;
private FileSystemWatcher Watcher;
private System.Object ChangeLock;
private int FetchRequests;
private int FetchQueue;
private int AnnounceQueue;
private SparkleListener Listener;
private List <double> SizeBuffer;
private bool HasChanged;
@ -134,22 +135,22 @@ namespace SparkleLib {
{
LocalPath = path;
Name = Path.GetFileName (LocalPath);
RemoteOriginUrl = GetRemoteOriginUrl ();
RemoteName = Path.GetFileNameWithoutExtension (RemoteOriginUrl);
Domain = GetDomain (RemoteOriginUrl);
Description = GetDescription ();
UserName = GetUserName ();
UserEmail = GetUserEmail ();
_IsSyncing = false;
_IsBuffering = false;
_IsPolling = true;
_IsFetching = false;
_IsPushing = false;
_ServerOnline = true;
HasChanged = false;
ChangeLock = new Object ();
FetchRequests = 0;
_IsSyncing = false;
_IsBuffering = false;
_IsPolling = true;
_IsFetching = false;
_IsPushing = false;
_ServerOnline = true;
HasChanged = false;
ChangeLock = new Object ();
FetchQueue = 0;
AnnounceQueue = 0;
if (IsEmpty)
_CurrentHash = null;
@ -216,6 +217,12 @@ namespace SparkleLib {
Push ();
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Connected. Now listening... (" + Listener.Server + ")");
if (AnnounceQueue > 0) {
Listener.Announce (_CurrentHash);
AnnounceQueue = 0;
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Queued messages delivered. (" + Listener.Server + ")");
}
};
// Start polling when the connection to the irc channel is lost
@ -236,12 +243,12 @@ namespace SparkleLib {
string message = args.Data.Message.Trim ();
if (!message.Equals (_CurrentHash) && message.Length == 40) {
FetchRequests++;
FetchQueue++;
if (!_IsFetching) {
while (FetchRequests > 0) {
while (FetchQueue > 0) {
Fetch ();
FetchRequests--;
FetchQueue--;
}
Watcher.EnableRaisingEvents = false;
@ -665,9 +672,13 @@ namespace SparkleLib {
if (PushingFinished != null)
PushingFinished (this, args);
if (!_IsPolling)
if (Listener.Client.IsConnected) {
Listener.Announce (_CurrentHash);
} else {
AnnounceQueue++;
SparkleHelpers.DebugInfo ("Irc", "[" + Name + "] Could not deliver notification, added it to the queue");
}
}
};