2 /* -----------------------------------------------------------------------
3 * <copyright file="StatusService.cs" company="GRNet">
5 * Copyright 2011-2012 GRNET S.A. All rights reserved.
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
11 * 1. Redistributions of source code must retain the above
12 * copyright notice, this list of conditions and the following
15 * 2. Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials
18 * provided with the distribution.
21 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
34 * The views and conclusions contained in the software and
35 * documentation are those of the authors and should not be
36 * interpreted as representing official policies, either expressed
37 * or implied, of GRNET S.A.
39 * -----------------------------------------------------------------------
43 using System.Diagnostics;
45 using System.ServiceModel.Description;
47 using System.ServiceModel;
48 using System.ComponentModel.Composition;
50 using Pithos.Interfaces;
52 namespace Pithos.Client.WPF.Services
55 /// TODO: Update summary.
57 [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false, IncludeExceptionDetailInFaults = true)]
59 public class StatusService : IStatusService,ISettingsService, ICommandsService
62 public IPithosSettings Settings { get; set; }
65 public IStatusChecker Checker { get; set; }
68 public PithosMonitor Monitor { get; set; }
71 public IEventAggregator Events { get; set; }
73 public StatusService()
78 public FileOverlayStatus GetStatus(string filePath)
80 return Checker.GetFileOverlayStatus(filePath);
83 public void DisplayProperties(string filePath)
88 public void GotoSite(string filePath)
90 if (string.IsNullOrWhiteSpace(filePath))
92 var activeAccount = Settings.Accounts.FirstOrDefault(acc => filePath.StartsWith(acc.RootPath, StringComparison.InvariantCultureIgnoreCase));
93 var address = String.Format("{0}/ui/?token={1}&user={2}",
94 activeAccount.ServerUrl,
96 Uri.EscapeUriString(activeAccount.AccountName));
98 Process.Start(address);
102 public PithosSettingsData GetSettings()
104 var data = new PithosSettingsData(Settings);
108 public void ShowProperties(string fileName)
110 Events.Publish(new ShowFilePropertiesEvent(fileName));
113 public static ServiceHost Start()
115 // Create a ServiceHost for the CalculatorService type and provide the base address.
116 var baseAddress = new Uri("net.pipe://localhost/pithos");
117 var service = new ServiceHost(typeof(StatusService), baseAddress);
119 var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
121 service.AddServiceEndpoint(typeof(IStatusService), binding, "net.pipe://localhost/pithos/statuscache");
122 service.AddServiceEndpoint(typeof(ISettingsService), binding, "net.pipe://localhost/pithos/settings");
123 service.AddServiceEndpoint(typeof(ICommandsService), binding, "net.pipe://localhost/pithos/commands");
126 //// Add a mex endpoint
129 var smb = new ServiceMetadataBehavior
131 HttpGetEnabled = true,
132 HttpGetUrl = new Uri("http://localhost:30000/pithos/mex")
134 service.Description.Behaviors.Add(smb);
138 service.Faulted+=OnError;
143 private static void OnError(object sender, EventArgs e)
148 public static void Stop(ServiceHost statusService)
150 if (statusService == null)
153 if (statusService.State == CommunicationState.Faulted)
154 statusService.Abort();
155 else if (statusService.State != CommunicationState.Closed)
156 statusService.Close();