listener: move more logic from Irc to Base

This commit is contained in:
Hylke Bons 2011-05-19 16:41:46 +01:00
parent bd5fd01533
commit 73f2b2c2dd
2 changed files with 29 additions and 25 deletions

View file

@ -52,6 +52,16 @@ namespace SparkleLib {
// Starts listening for remote changes // Starts listening for remote changes
public abstract void Connect (); public abstract void Connect ();
private void AnnounceBase (string message) {
if (IsConnected) {
SparkleHelpers.DebugInfo ("Listener", "Announcing to " + this.channel + " on " + this.server);
Announce (message);
} else {
SparkleHelpers.DebugInfo ("Listener", "Not connected. Queuing message");
this.announce_queue.Add (message);
}
}
// Announces to the channel that // Announces to the channel that
// we've pushed changes to the server // we've pushed changes to the server
public abstract void Announce (string message); public abstract void Announce (string message);
@ -85,18 +95,34 @@ namespace SparkleLib {
public void OnConnected () public void OnConnected ()
{ {
SparkleHelpers.DebugInfo ("Listener", "Connected");
if (Connected != null) if (Connected != null)
Connected (); Connected ();
if (this.announce_queue.Count > 0) {
string message = this.announce_queue [this.announce_queue.Count - 1];
this.announce_queue = new List<string> ();
SparkleHelpers.DebugInfo ("Listener", "Delivering queued messages...");
Announce (message);
}
} }
public void OnDisconnected () public void OnDisconnected ()
{ {
SparkleHelpers.DebugInfo ("Listener", "Disonnected");
if (Disconnected != null) if (Disconnected != null)
Disconnected (); Disconnected ();
} }
public void OnRemoteChange (string change_id) public void OnRemoteChange (string change_id)
{ {
SparkleHelpers.DebugInfo ("Listener", "Got message from " + this.channel + " on " + this.server);
this.changes_queue++;
if (RemoteChange != null) if (RemoteChange != null)
RemoteChange (change_id); RemoteChange (change_id);
} }

View file

@ -31,6 +31,7 @@ namespace SparkleLib {
private IrcClient client; private IrcClient client;
private string nick; private string nick;
public SparkleListenerIrc (string server, string folder_identifier, public SparkleListenerIrc (string server, string folder_identifier,
NotificationServerType type) : base (server, folder_identifier, type) NotificationServerType type) : base (server, folder_identifier, type)
{ {
@ -62,30 +63,15 @@ namespace SparkleLib {
}; };
this.client.OnConnected += delegate { this.client.OnConnected += delegate {
SparkleHelpers.DebugInfo ("ListenerIrc", "Connected to " + base.channel + " on " + base.server);
OnConnected (); OnConnected ();
if (base.announce_queue.Count > 0) {
string message = base.announce_queue [base.announce_queue.Count - 1];
base.announce_queue = new List<string> ();
SparkleHelpers.DebugInfo ("ListenerIrc", "Delivering queued messages...");
Announce (message);
}
}; };
this.client.OnDisconnected += delegate { this.client.OnDisconnected += delegate {
SparkleHelpers.DebugInfo ("ListenerIrc", "Disconnected from " + base.channel + " on " + base.server);
OnDisconnected (); OnDisconnected ();
}; };
this.client.OnChannelMessage += delegate (object o, IrcEventArgs args) { this.client.OnChannelMessage += delegate (object o, IrcEventArgs args) {
SparkleHelpers.DebugInfo ("ListenerIrc", "Got message from " + base.channel + " on " + base.server);
string message = args.Data.Message.Trim (); string message = args.Data.Message.Trim ();
base.changes_queue++;
OnRemoteChange (message); OnRemoteChange (message);
}; };
} }
@ -111,7 +97,7 @@ namespace SparkleLib {
// Disconnect when we time out // Disconnect when we time out
this.client.Disconnect (); this.client.Disconnect ();
} catch (Meebey.SmartIrc4net.ConnectionException e) { } catch (Meebey.SmartIrc4net.ConnectionException e) {
Console.WriteLine ("Could not connect: " + e.Message); SparkleHelpers.DebugInfo ("ListenerIrc", "Could not connect to " + base.channel + " on " + base.server + ": " + e.Message);
} }
}) })
); );
@ -122,13 +108,7 @@ namespace SparkleLib {
public override void Announce (string message) public override void Announce (string message)
{ {
if (IsConnected) { this.client.SendMessage (SendType.Message, base.channel, message);
SparkleHelpers.DebugInfo ("ListenerIrc", "Announcing to " + base.channel + " on " + base.server);
this.client.SendMessage (SendType.Message, base.channel, message);
} else {
SparkleHelpers.DebugInfo ("ListenerIrc", "Not connected. Queuing message");
base.announce_queue.Add (message);
}
} }
@ -154,7 +134,5 @@ namespace SparkleLib {
Byte[] encoded_bytes = sha1.ComputeHash (bytes); Byte[] encoded_bytes = sha1.ComputeHash (bytes);
return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", ""); return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", "");
} }
} }
} }