diff --git a/WpkgInstaller/IWpkgNotifierMessageServer.cs b/WpkgInstaller/IWpkgNotifierMessageServer.cs index 3dd53809d4a456eaa11b456f47c4ad0072d27af0..b1ec47cfc04c266898e212f3b3ff2377ab7c55cd 100755 --- a/WpkgInstaller/IWpkgNotifierMessageServer.cs +++ b/WpkgInstaller/IWpkgNotifierMessageServer.cs @@ -9,6 +9,9 @@ namespace WpkgInstaller [OperationContract(IsOneWay = true)] void Register(int pid); + [OperationContract(IsOneWay = true)] + void Unregister(int pid); + [OperationContract(IsOneWay = true)] void ProcessRequest(WpkgMessageRequestType type); } diff --git a/WpkgInstaller/WpkgInstaller.cs b/WpkgInstaller/WpkgInstaller.cs index 9de8c699fca6fa9c6c16785221e10dad371d90a7..31f161b74d6b05f9c4717a75bfb514c0c6226d71 100644 --- a/WpkgInstaller/WpkgInstaller.cs +++ b/WpkgInstaller/WpkgInstaller.cs @@ -207,6 +207,17 @@ namespace WpkgInstaller } } + public void Unregister(int pid) + { + if(clients.Remove(pid)) + { + eventLog.WriteEntry(String.Format("Client {0} unregistered", pid)); + } + else + { + eventLog.WriteEntry(String.Format("Unknown client {0} requested to unregister", pid), EventLogEntryType.Warning); + } + } public void ProcessRequest(WpkgMessageRequestType type) { switch (type) diff --git a/WpkgNotifier/TrayNotifier.cs b/WpkgNotifier/TrayNotifier.cs index d097ee75f4667e46dd352c448ad2133390fd6b41..64855fa4b0ba8b5ef569e78bcd3b8122b694e32f 100644 --- a/WpkgNotifier/TrayNotifier.cs +++ b/WpkgNotifier/TrayNotifier.cs @@ -15,10 +15,13 @@ namespace WpkgNotifier private EventLog eventLog; private WpkgMessageState state; private IWpkgNotifierMessageServer server; + private int pid; public TrayNotifier() { - + Process currentProcess = Process.GetCurrentProcess(); + pid = currentProcess.Id; + eventLog = new EventLog(); string eventSourceName = "TrayNotifier"; string logName = "WpkgNotifier"; @@ -34,6 +37,8 @@ namespace WpkgNotifier OpenMessageChannel(); + Application.ApplicationExit += new EventHandler(this.OnApplicationExit); + MenuItem actionsMenu = new MenuItem("Actions"); MenuItem syncMenuItem = new MenuItem("Sync", new EventHandler(RequestSync)); MenuItem queryMenuItem = new MenuItem("Query", new EventHandler(RequestQuery)); @@ -65,6 +70,11 @@ namespace WpkgNotifier }; } + private void OnApplicationExit(object sender, EventArgs e) + { + server.Unregister(pid); + } + private void OpenMessageChannel() { eventLog.WriteEntry("Trying to open channel"); @@ -78,8 +88,7 @@ namespace WpkgNotifier server = channelFactory.CreateChannel(); eventLog.WriteEntry("channel created"); - Process currentProcess = Process.GetCurrentProcess(); - server.Register(currentProcess.Id); + server.Register(pid); eventLog.WriteEntry("Registered with server"); } catch (Exception e) @@ -114,6 +123,8 @@ namespace WpkgNotifier Application.Exit(); } + + public void SetToolTip(string msg) { notifyIcon.Text = msg;