diff --git a/WpkgInstaller/WpkgInstaller.cs b/WpkgInstaller/WpkgInstaller.cs index edb1a0e3b7a3867514ac63b680ac70690ac4f8e0..c36bb4f8b8f85f40149d136d0c8b6c3449d1ac96 100644 --- a/WpkgInstaller/WpkgInstaller.cs +++ b/WpkgInstaller/WpkgInstaller.cs @@ -3,6 +3,8 @@ using System.ServiceProcess; using System.Diagnostics; using System; using System.ServiceModel; +using System.Collections; +using System.Collections.Generic; namespace WpkgInstaller { @@ -35,12 +37,14 @@ namespace WpkgInstaller [DllImport("advapi32.dll", SetLastError = true)] private static extern bool SetServiceStatus(System.IntPtr handle, ref ServiceStatus serviceStatus); + private Dictionary<int, IWpkgNotifierMessageClient> clients; public WpkgInstaller() { InitializeComponent(); eventLog = new EventLog(); + clients = new Dictionary<int, IWpkgNotifierMessageClient>(); string eventSourceName = "WpkgInstaller Service"; string logName = "WpkgNotifier"; @@ -206,12 +210,34 @@ namespace WpkgInstaller public void Register(int pid) { eventLog.WriteEntry(String.Format("Register requested for {0}", pid)); - // throw new NotImplementedException(); + IWpkgNotifierMessageClient client = OperationContext.Current.GetCallbackChannel <IWpkgNotifierMessageClient>(); + clients.Add(pid, client); + + foreach(KeyValuePair<int, IWpkgNotifierMessageClient> kv in clients) + { + try + { + kv.Value.StatusLine(String.Format("Register requested for {0}", pid)); + } + catch (Exception e) + { + eventLog.WriteEntry("Error communicating with client " + kv.Key + " " + e.ToString(), EventLogEntryType.Warning); + } + } } public void ProcessRequest(WpkgMessageRequestType type) { - throw new NotImplementedException(); + switch (type) + { + case WpkgMessageRequestType.DO_SYNC: + RunWpkgSync(); + break; + case WpkgMessageRequestType.RUN_QUERY: + RunWpkgQuery(); + break; + + } } } } diff --git a/WpkgNotifier/TrayNotifier.cs b/WpkgNotifier/TrayNotifier.cs index 64f4bd58dcb41b29340fdac7def32c70ad8732ef..4aa7c9bdab9236fcc7771038ace7db8be9293322 100644 --- a/WpkgNotifier/TrayNotifier.cs +++ b/WpkgNotifier/TrayNotifier.cs @@ -78,14 +78,13 @@ namespace WpkgNotifier server = channelFactory.CreateChannel(); eventLog.WriteEntry("channel created"); - server.Register(123); + Process currentProcess = Process.GetCurrentProcess(); + server.Register(currentProcess.Id); eventLog.WriteEntry("Registered with server"); - // this method should probably be 'RegisterWithService' } catch (Exception e) { eventLog.WriteEntry("problem creating channel"); - eventLog.WriteEntry(e.Message); } } @@ -93,13 +92,13 @@ namespace WpkgNotifier void RequestSync(object sender, EventArgs e) { notifyIcon.ContextMenu.MenuItems[0].Enabled = false; - // send DO_SYNC request to server + server.ProcessRequest(WpkgMessageRequestType.DO_SYNC); } void RequestQuery(object sender, EventArgs e) { notifyIcon.ContextMenu.MenuItems[0].Enabled = false; - // send RUN_QUERY request to server + server.ProcessRequest(WpkgMessageRequestType.RUN_QUERY); } void ManageSoftware(object sender, EventArgs e) @@ -152,7 +151,7 @@ namespace WpkgNotifier public void StatusLine(string msg) { - throw new NotImplementedException(); + SetToolTip(msg); } } }