From fc09a1e6da50769b69ec4eb90799f95f85ae8406 Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Mon, 6 Feb 2012 13:45:20 +0100 Subject: [PATCH] listener: move classes to separate files --- SparkleLib/Makefile.am | 2 + SparkleLib/SparkleAnnouncement.cs | 35 +++++++++++ SparkleLib/SparkleLib.csproj | 4 +- SparkleLib/SparkleListenerBase.cs | 83 ------------------------- SparkleLib/SparkleListenerFactory.cs | 89 +++++++++++++++++++++++++++ SparkleShare/Mac/SparkleStatusIcon.cs | 1 + 6 files changed, 130 insertions(+), 84 deletions(-) create mode 100644 SparkleLib/SparkleAnnouncement.cs create mode 100644 SparkleLib/SparkleListenerFactory.cs diff --git a/SparkleLib/Makefile.am b/SparkleLib/Makefile.am index 92a45ea8..30484fe1 100755 --- a/SparkleLib/Makefile.am +++ b/SparkleLib/Makefile.am @@ -6,6 +6,7 @@ SOURCES = \ Git/SparkleFetcherGit.cs \ Git/SparkleGit.cs \ Git/SparkleRepoGit.cs \ + SparkleAnnouncement.cs \ SparkleBackend.cs \ SparkleChangeSet.cs \ SparkleConfig.cs \ @@ -13,6 +14,7 @@ SOURCES = \ SparkleFetcherBase.cs \ SparkleHelpers.cs \ SparkleListenerBase.cs \ + SparkleListenerFactory.cs \ SparkleListenerTcp.cs \ SparkleRepoBase.cs \ SparkleWatcher.cs diff --git a/SparkleLib/SparkleAnnouncement.cs b/SparkleLib/SparkleAnnouncement.cs new file mode 100644 index 00000000..a05068b7 --- /dev/null +++ b/SparkleLib/SparkleAnnouncement.cs @@ -0,0 +1,35 @@ +// SparkleShare, a collaboration and sharing tool. +// Copyright (C) 2010 Hylke Bons +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + + +using System; +using System.Collections.Generic; + +namespace SparkleLib { + + public class SparkleAnnouncement { + + public readonly string FolderIdentifier; + public readonly string Message; + + + public SparkleAnnouncement (string folder_identifier, string message) + { + FolderIdentifier = folder_identifier; + Message = message; + } + } +} diff --git a/SparkleLib/SparkleLib.csproj b/SparkleLib/SparkleLib.csproj index 1c708116..211a786a 100755 --- a/SparkleLib/SparkleLib.csproj +++ b/SparkleLib/SparkleLib.csproj @@ -40,12 +40,14 @@ + - + + diff --git a/SparkleLib/SparkleListenerBase.cs b/SparkleLib/SparkleListenerBase.cs index fafdc829..8c20f850 100755 --- a/SparkleLib/SparkleListenerBase.cs +++ b/SparkleLib/SparkleListenerBase.cs @@ -21,88 +21,6 @@ using System.Timers; namespace SparkleLib { - public class SparkleAnnouncement { - - public readonly string FolderIdentifier; - public readonly string Message; - - - public SparkleAnnouncement (string folder_identifier, string message) - { - FolderIdentifier = folder_identifier; - Message = message; - } - } - - - public static class SparkleListenerFactory { - - private static List listeners = new List (); - - - public static SparkleListenerBase CreateListener (string folder_name, string folder_identifier) - { - // Check if the user wants to use a global custom notification service - string uri = SparkleConfig.DefaultConfig.GetConfigOption ("announcements_url"); - - // Check if the user wants a use a custom notification service for this folder - if (string.IsNullOrEmpty (uri)) - uri = SparkleConfig.DefaultConfig.GetFolderOptionalAttribute ( - folder_name, "announcements_url"); - - // Fall back to the fallback service is neither is the case - if (string.IsNullOrEmpty (uri)) { - // This is SparkleShare's centralized notification service. - // It communicates "It's time to sync!" signals between clients. - // - // Here's how it works: the client listens to a channel (the - // folder identifier, a SHA-1 hash) for when it's time to sync. - // Clients also send the current revision hash to the channel - // for other clients to pick up when you've synced up any - // changes. This way - // - // Please see the SparkleShare wiki if you wish to run - // your own service instead - - uri = "tcp://notifications.sparkleshare.org:1986"; - } - - Uri announce_uri = new Uri (uri); - - // We use only one listener per notification service to keep - // the number of connections as low as possible - foreach (SparkleListenerBase listener in listeners) { - if (listener.Server.Equals (announce_uri)) { - SparkleHelpers.DebugInfo ("ListenerFactory", - "Refered to existing " + announce_uri.Scheme + - " listener for " + announce_uri); - - // We already seem to have a listener for this server, - // refer to the existing one instead - listener.AlsoListenToBase (folder_identifier); - return (SparkleListenerBase) listener; - } - } - - // Create a new listener with the appropriate - // type if one doesn't exist yet for that server - switch (announce_uri.Scheme) { - case "tcp": - listeners.Add (new SparkleListenerTcp (announce_uri, folder_identifier)); - break; - default: - listeners.Add (new SparkleListenerTcp (announce_uri, folder_identifier)); - break; - } - - SparkleHelpers.DebugInfo ("ListenerFactory", - "Issued new " + announce_uri.Scheme + " listener for " + announce_uri); - - return (SparkleListenerBase) listeners [listeners.Count - 1]; - } - } - - // A persistent connection to the server that // listens for change notifications public abstract class SparkleListenerBase { @@ -311,4 +229,3 @@ namespace SparkleLib { } } } - diff --git a/SparkleLib/SparkleListenerFactory.cs b/SparkleLib/SparkleListenerFactory.cs new file mode 100644 index 00000000..e4021c29 --- /dev/null +++ b/SparkleLib/SparkleListenerFactory.cs @@ -0,0 +1,89 @@ +// SparkleShare, a collaboration and sharing tool. +// Copyright (C) 2010 Hylke Bons +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + + +using System; +using System.Collections.Generic; + +namespace SparkleLib { + + public static class SparkleListenerFactory { + + private static List listeners = new List (); + + + public static SparkleListenerBase CreateListener (string folder_name, string folder_identifier) + { + // Check if the user wants to use a global custom notification service + string uri = SparkleConfig.DefaultConfig.GetConfigOption ("announcements_url"); + + // Check if the user wants a use a custom notification service for this folder + if (string.IsNullOrEmpty (uri)) + uri = SparkleConfig.DefaultConfig.GetFolderOptionalAttribute ( + folder_name, "announcements_url"); + + // Fall back to the fallback service is neither is the case + if (string.IsNullOrEmpty (uri)) { + // This is SparkleShare's centralized notification service. + // It communicates "It's time to sync!" signals between clients. + // + // Here's how it works: the client listens to a channel (the + // folder identifier, a SHA-1 hash) for when it's time to sync. + // Clients also send the current revision hash to the channel + // for other clients to pick up when you've synced up any + // changes. This way + // + // Please see the SparkleShare wiki if you wish to run + // your own service instead + + uri = "tcp://notifications.sparkleshare.org:1986"; + } + + Uri announce_uri = new Uri (uri); + + // We use only one listener per notification service to keep + // the number of connections as low as possible + foreach (SparkleListenerBase listener in listeners) { + if (listener.Server.Equals (announce_uri)) { + SparkleHelpers.DebugInfo ("ListenerFactory", + "Refered to existing " + announce_uri.Scheme + + " listener for " + announce_uri); + + // We already seem to have a listener for this server, + // refer to the existing one instead + listener.AlsoListenToBase (folder_identifier); + return (SparkleListenerBase) listener; + } + } + + // Create a new listener with the appropriate + // type if one doesn't exist yet for that server + switch (announce_uri.Scheme) { + case "tcp": + listeners.Add (new SparkleListenerTcp (announce_uri, folder_identifier)); + break; + default: + listeners.Add (new SparkleListenerTcp (announce_uri, folder_identifier)); + break; + } + + SparkleHelpers.DebugInfo ("ListenerFactory", + "Issued new " + announce_uri.Scheme + " listener for " + announce_uri); + + return (SparkleListenerBase) listeners [listeners.Count - 1]; + } + } +} diff --git a/SparkleShare/Mac/SparkleStatusIcon.cs b/SparkleShare/Mac/SparkleStatusIcon.cs index 0d89e9b1..231fe902 100755 --- a/SparkleShare/Mac/SparkleStatusIcon.cs +++ b/SparkleShare/Mac/SparkleStatusIcon.cs @@ -33,6 +33,7 @@ namespace SparkleShare { public SparkleStatusIconController Controller = new SparkleStatusIconController (); + // TODO: Fix case private Timer Animation; private int FrameNumber; private string StateText;