Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / Services / StatusService.cs @ a0622735

History | View | Annotate | Download (5.4 kB)

1 c53aa229 Panagiotis Kanavos
// -----------------------------------------------------------------------
2 f3d080df Panagiotis Kanavos
// <copyright file="StatusService.cs" company="GRNet">
3 1cf5689c Panagiotis Kanavos
// Copyright 2011-2012 GRNET S.A. All rights reserved.
4 f3d080df Panagiotis Kanavos
// 
5 f3d080df Panagiotis Kanavos
// Redistribution and use in source and binary forms, with or
6 f3d080df Panagiotis Kanavos
// without modification, are permitted provided that the following
7 f3d080df Panagiotis Kanavos
// conditions are met:
8 f3d080df Panagiotis Kanavos
// 
9 f3d080df Panagiotis Kanavos
//   1. Redistributions of source code must retain the above
10 f3d080df Panagiotis Kanavos
//      copyright notice, this list of conditions and the following
11 f3d080df Panagiotis Kanavos
//      disclaimer.
12 f3d080df Panagiotis Kanavos
// 
13 f3d080df Panagiotis Kanavos
//   2. Redistributions in binary form must reproduce the above
14 f3d080df Panagiotis Kanavos
//      copyright notice, this list of conditions and the following
15 f3d080df Panagiotis Kanavos
//      disclaimer in the documentation and/or other materials
16 f3d080df Panagiotis Kanavos
//      provided with the distribution.
17 f3d080df Panagiotis Kanavos
// 
18 f3d080df Panagiotis Kanavos
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 f3d080df Panagiotis Kanavos
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 f3d080df Panagiotis Kanavos
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 f3d080df Panagiotis Kanavos
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 f3d080df Panagiotis Kanavos
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 f3d080df Panagiotis Kanavos
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 f3d080df Panagiotis Kanavos
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 f3d080df Panagiotis Kanavos
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 f3d080df Panagiotis Kanavos
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 f3d080df Panagiotis Kanavos
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 f3d080df Panagiotis Kanavos
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 f3d080df Panagiotis Kanavos
// POSSIBILITY OF SUCH DAMAGE.
30 f3d080df Panagiotis Kanavos
// 
31 f3d080df Panagiotis Kanavos
// The views and conclusions contained in the software and
32 f3d080df Panagiotis Kanavos
// documentation are those of the authors and should not be
33 f3d080df Panagiotis Kanavos
// interpreted as representing official policies, either expressed
34 f3d080df Panagiotis Kanavos
// or implied, of GRNET S.A.
35 c53aa229 Panagiotis Kanavos
// </copyright>
36 c53aa229 Panagiotis Kanavos
// -----------------------------------------------------------------------
37 c53aa229 Panagiotis Kanavos
38 c53aa229 Panagiotis Kanavos
39 42800be8 Panagiotis Kanavos
using System;
40 f3d080df Panagiotis Kanavos
using System.Diagnostics;
41 f3d080df Panagiotis Kanavos
using System.Linq;
42 f3d080df Panagiotis Kanavos
using System.ServiceModel.Description;
43 c53aa229 Panagiotis Kanavos
using Caliburn.Micro;
44 c53aa229 Panagiotis Kanavos
using System.ServiceModel;
45 c53aa229 Panagiotis Kanavos
using System.ComponentModel.Composition;
46 c53aa229 Panagiotis Kanavos
using Pithos.Core;
47 c53aa229 Panagiotis Kanavos
using Pithos.Interfaces;
48 c53aa229 Panagiotis Kanavos
49 c53aa229 Panagiotis Kanavos
namespace Pithos.Client.WPF.Services
50 c53aa229 Panagiotis Kanavos
{
51 c53aa229 Panagiotis Kanavos
    /// <summary>
52 c53aa229 Panagiotis Kanavos
    /// TODO: Update summary.
53 c53aa229 Panagiotis Kanavos
    /// </summary>
54 aba9e6d9 Panagiotis Kanavos
    [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false, IncludeExceptionDetailInFaults = true)]
55 c53aa229 Panagiotis Kanavos
    [Export]
56 c53aa229 Panagiotis Kanavos
    public class StatusService : IStatusService,ISettingsService, ICommandsService
57 c53aa229 Panagiotis Kanavos
    {
58 c53aa229 Panagiotis Kanavos
        [Import]
59 c53aa229 Panagiotis Kanavos
        public IPithosSettings Settings { get; set; }
60 c53aa229 Panagiotis Kanavos
61 c53aa229 Panagiotis Kanavos
        [Import]
62 c53aa229 Panagiotis Kanavos
        public IStatusChecker Checker { get; set; }
63 c53aa229 Panagiotis Kanavos
64 c53aa229 Panagiotis Kanavos
        [Import]
65 c53aa229 Panagiotis Kanavos
        public PithosMonitor Monitor { get; set; }
66 c53aa229 Panagiotis Kanavos
67 42800be8 Panagiotis Kanavos
        [Import]
68 42800be8 Panagiotis Kanavos
        public IEventAggregator Events { get; set; }
69 42800be8 Panagiotis Kanavos
70 c53aa229 Panagiotis Kanavos
        public StatusService()
71 c53aa229 Panagiotis Kanavos
        {
72 c53aa229 Panagiotis Kanavos
            IoC.BuildUp(this);
73 42800be8 Panagiotis Kanavos
        }        
74 c53aa229 Panagiotis Kanavos
75 c53aa229 Panagiotis Kanavos
        public FileOverlayStatus GetStatus(string filePath)
76 c53aa229 Panagiotis Kanavos
        {
77 c53aa229 Panagiotis Kanavos
            return Checker.GetFileOverlayStatus(filePath);
78 c53aa229 Panagiotis Kanavos
        }
79 c53aa229 Panagiotis Kanavos
80 c53aa229 Panagiotis Kanavos
        public void DisplayProperties(string filePath)
81 c53aa229 Panagiotis Kanavos
        {
82 c53aa229 Panagiotis Kanavos
            //Monitor.
83 c53aa229 Panagiotis Kanavos
        }
84 c53aa229 Panagiotis Kanavos
85 f3d080df Panagiotis Kanavos
        public void GotoSite(string filePath)
86 f3d080df Panagiotis Kanavos
        {
87 f3d080df Panagiotis Kanavos
            if (string.IsNullOrWhiteSpace(filePath))
88 f3d080df Panagiotis Kanavos
                return;
89 f3d080df Panagiotis Kanavos
            var activeAccount = Settings.Accounts.FirstOrDefault(acc => filePath.StartsWith(acc.RootPath, StringComparison.InvariantCultureIgnoreCase));
90 f3d080df Panagiotis Kanavos
            var address = String.Format("{0}/ui/?token={1}&user={2}",
91 f3d080df Panagiotis Kanavos
                                        activeAccount.ServerUrl,
92 f3d080df Panagiotis Kanavos
                                        activeAccount.ApiKey,
93 f3d080df Panagiotis Kanavos
                                        Uri.EscapeUriString(activeAccount.AccountName));
94 f3d080df Panagiotis Kanavos
            
95 f3d080df Panagiotis Kanavos
            Process.Start(address);
96 f3d080df Panagiotis Kanavos
97 f3d080df Panagiotis Kanavos
        }
98 f3d080df Panagiotis Kanavos
99 c53aa229 Panagiotis Kanavos
        public PithosSettingsData GetSettings()
100 c53aa229 Panagiotis Kanavos
        {
101 c53aa229 Panagiotis Kanavos
            var data = new PithosSettingsData(Settings);
102 c53aa229 Panagiotis Kanavos
            return data;
103 c53aa229 Panagiotis Kanavos
        }
104 c53aa229 Panagiotis Kanavos
105 c53aa229 Panagiotis Kanavos
        public void ShowProperties(string fileName)
106 c53aa229 Panagiotis Kanavos
        {
107 42800be8 Panagiotis Kanavos
            Events.Publish(new ShowFilePropertiesEvent(fileName));
108 42800be8 Panagiotis Kanavos
        }
109 42800be8 Panagiotis Kanavos
110 42800be8 Panagiotis Kanavos
        public static ServiceHost Start()
111 42800be8 Panagiotis Kanavos
        {
112 42800be8 Panagiotis Kanavos
            // Create a ServiceHost for the CalculatorService type and provide the base address.
113 42800be8 Panagiotis Kanavos
            var baseAddress = new Uri("net.pipe://localhost/pithos");
114 42800be8 Panagiotis Kanavos
            var service = new ServiceHost(typeof(StatusService), baseAddress);
115 42800be8 Panagiotis Kanavos
116 42800be8 Panagiotis Kanavos
            var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
117 42800be8 Panagiotis Kanavos
118 42800be8 Panagiotis Kanavos
            service.AddServiceEndpoint(typeof(IStatusService), binding, "net.pipe://localhost/pithos/statuscache");
119 42800be8 Panagiotis Kanavos
            service.AddServiceEndpoint(typeof(ISettingsService), binding, "net.pipe://localhost/pithos/settings");
120 42800be8 Panagiotis Kanavos
            service.AddServiceEndpoint(typeof(ICommandsService), binding, "net.pipe://localhost/pithos/commands");
121 42800be8 Panagiotis Kanavos
122 42800be8 Panagiotis Kanavos
123 42800be8 Panagiotis Kanavos
            //// Add a mex endpoint
124 363bad87 Panagiotis Kanavos
/*
125 f3d080df Panagiotis Kanavos
126 42800be8 Panagiotis Kanavos
            var smb = new ServiceMetadataBehavior
127 42800be8 Panagiotis Kanavos
                          { 
128 42800be8 Panagiotis Kanavos
                              HttpGetEnabled = true,
129 42800be8 Panagiotis Kanavos
                              HttpGetUrl = new Uri("http://localhost:30000/pithos/mex")
130 42800be8 Panagiotis Kanavos
                          };
131 42800be8 Panagiotis Kanavos
            service.Description.Behaviors.Add(smb);
132 363bad87 Panagiotis Kanavos
*/
133 42800be8 Panagiotis Kanavos
134 f3d080df Panagiotis Kanavos
135 c92e02f3 Panagiotis Kanavos
            service.Faulted+=OnError;
136 42800be8 Panagiotis Kanavos
            service.Open();
137 42800be8 Panagiotis Kanavos
            return service;
138 42800be8 Panagiotis Kanavos
        }
139 42800be8 Panagiotis Kanavos
140 c92e02f3 Panagiotis Kanavos
        private static void OnError(object sender, EventArgs e)
141 c92e02f3 Panagiotis Kanavos
        {
142 c92e02f3 Panagiotis Kanavos
            
143 c92e02f3 Panagiotis Kanavos
        }
144 c92e02f3 Panagiotis Kanavos
145 42800be8 Panagiotis Kanavos
        public static void Stop(ServiceHost statusService)
146 42800be8 Panagiotis Kanavos
        {
147 42800be8 Panagiotis Kanavos
            if (statusService == null)
148 42800be8 Panagiotis Kanavos
                return;
149 42800be8 Panagiotis Kanavos
150 42800be8 Panagiotis Kanavos
            if (statusService.State == CommunicationState.Faulted)
151 42800be8 Panagiotis Kanavos
                statusService.Abort();
152 42800be8 Panagiotis Kanavos
            else if (statusService.State != CommunicationState.Closed)
153 42800be8 Panagiotis Kanavos
                statusService.Close();            
154 42800be8 Panagiotis Kanavos
155 c53aa229 Panagiotis Kanavos
        }
156 c53aa229 Panagiotis Kanavos
    }
157 c53aa229 Panagiotis Kanavos
}