listener: Fix race condition in channel subscriptions

This commit is contained in:
Hylke Bons 2012-08-10 20:18:41 +01:00
parent ed5074aae0
commit 4cac379a2f

View file

@ -96,10 +96,11 @@ namespace SparkleLib {
public void AlsoListenTo (string channel) public void AlsoListenTo (string channel)
{ {
if (!this.channels.Contains (channel) && IsConnected) { if (!this.channels.Contains (channel))
SparkleLogger.LogInfo ("Listener", "Subscribing to channel " + channel + " on " + Server);
this.channels.Add (channel); this.channels.Add (channel);
if (IsConnected) {
SparkleLogger.LogInfo ("Listener", "Subscribing to channel " + channel + " on " + Server);
AlsoListenToInternal (channel); AlsoListenToInternal (channel);
} }
} }
@ -114,6 +115,11 @@ namespace SparkleLib {
public void OnConnected () public void OnConnected ()
{ {
foreach (string channel in this.channels.GetRange (0, this.channels.Count)) {
SparkleLogger.LogInfo ("Listener", "Subscribing to channel " + channel + " on " + Server);
AlsoListenToInternal (channel);
}
SparkleLogger.LogInfo ("Listener", "Listening for announcements on " + Server); SparkleLogger.LogInfo ("Listener", "Listening for announcements on " + Server);
Connected (); Connected ();
@ -139,8 +145,7 @@ namespace SparkleLib {
public void OnAnnouncement (SparkleAnnouncement announcement) public void OnAnnouncement (SparkleAnnouncement announcement)
{ {
SparkleLogger.LogInfo ("Listener", SparkleLogger.LogInfo ("Listener", "Got message " + announcement.Message + " from " +
"Got message " + announcement.Message + " from " +
announcement.FolderIdentifier + " on " + Server); announcement.FolderIdentifier + " on " + Server);
if (IsRecentAnnouncement (announcement)) { if (IsRecentAnnouncement (announcement)) {