Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (5.4 kB)

1
// -----------------------------------------------------------------------
2
// <copyright file="StatusService.cs" company="GRNet">
3
// Copyright 2011 GRNET S.A. All rights reserved.
4
// 
5
// Redistribution and use in source and binary forms, with or
6
// without modification, are permitted provided that the following
7
// conditions are met:
8
// 
9
//   1. Redistributions of source code must retain the above
10
//      copyright notice, this list of conditions and the following
11
//      disclaimer.
12
// 
13
//   2. Redistributions in binary form must reproduce the above
14
//      copyright notice, this list of conditions and the following
15
//      disclaimer in the documentation and/or other materials
16
//      provided with the distribution.
17
// 
18
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
// POSSIBILITY OF SUCH DAMAGE.
30
// 
31
// The views and conclusions contained in the software and
32
// documentation are those of the authors and should not be
33
// interpreted as representing official policies, either expressed
34
// or implied, of GRNET S.A.
35
// </copyright>
36
// -----------------------------------------------------------------------
37

    
38

    
39
using System;
40
using System.Diagnostics;
41
using System.Linq;
42
using System.ServiceModel.Description;
43
using Caliburn.Micro;
44
using System.ServiceModel;
45
using System.ComponentModel.Composition;
46
using Pithos.Core;
47
using Pithos.Interfaces;
48

    
49
namespace Pithos.Client.WPF.Services
50
{
51
    /// <summary>
52
    /// TODO: Update summary.
53
    /// </summary>
54
    [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false, IncludeExceptionDetailInFaults = true)]
55
    [Export]
56
    public class StatusService : IStatusService,ISettingsService, ICommandsService
57
    {
58
        [Import]
59
        public IPithosSettings Settings { get; set; }
60

    
61
        [Import]
62
        public IStatusChecker Checker { get; set; }
63

    
64
        [Import]
65
        public PithosMonitor Monitor { get; set; }
66

    
67
        [Import]
68
        public IEventAggregator Events { get; set; }
69

    
70
        public StatusService()
71
        {
72
            IoC.BuildUp(this);
73
        }        
74

    
75
        public FileOverlayStatus GetStatus(string filePath)
76
        {
77
            return Checker.GetFileOverlayStatus(filePath);
78
        }
79

    
80
        public void DisplayProperties(string filePath)
81
        {
82
            //Monitor.
83
        }
84

    
85
        public void GotoSite(string filePath)
86
        {
87
            if (string.IsNullOrWhiteSpace(filePath))
88
                return;
89
            var activeAccount = Settings.Accounts.FirstOrDefault(acc => filePath.StartsWith(acc.RootPath, StringComparison.InvariantCultureIgnoreCase));
90
            var address = String.Format("{0}/ui/?token={1}&user={2}",
91
                                        activeAccount.ServerUrl,
92
                                        activeAccount.ApiKey,
93
                                        Uri.EscapeUriString(activeAccount.AccountName));
94
            
95
            Process.Start(address);
96

    
97
        }
98

    
99
        public PithosSettingsData GetSettings()
100
        {
101
            var data = new PithosSettingsData(Settings);
102
            return data;
103
        }
104

    
105
        public void ShowProperties(string fileName)
106
        {
107
            Events.Publish(new ShowFilePropertiesEvent(fileName));
108
        }
109

    
110
        public static ServiceHost Start()
111
        {
112
            // Create a ServiceHost for the CalculatorService type and provide the base address.
113
            var baseAddress = new Uri("net.pipe://localhost/pithos");
114
            var service = new ServiceHost(typeof(StatusService), baseAddress);
115

    
116
            var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
117

    
118
            service.AddServiceEndpoint(typeof(IStatusService), binding, "net.pipe://localhost/pithos/statuscache");
119
            service.AddServiceEndpoint(typeof(ISettingsService), binding, "net.pipe://localhost/pithos/settings");
120
            service.AddServiceEndpoint(typeof(ICommandsService), binding, "net.pipe://localhost/pithos/commands");
121

    
122

    
123
            //// Add a mex endpoint
124
/*
125

    
126
            var smb = new ServiceMetadataBehavior
127
                          { 
128
                              HttpGetEnabled = true,
129
                              HttpGetUrl = new Uri("http://localhost:30000/pithos/mex")
130
                          };
131
            service.Description.Behaviors.Add(smb);
132
*/
133

    
134

    
135
            service.Faulted+=OnError;
136
            service.Open();
137
            return service;
138
        }
139

    
140
        private static void OnError(object sender, EventArgs e)
141
        {
142
            
143
        }
144

    
145
        public static void Stop(ServiceHost statusService)
146
        {
147
            if (statusService == null)
148
                return;
149

    
150
            if (statusService.State == CommunicationState.Faulted)
151
                statusService.Abort();
152
            else if (statusService.State != CommunicationState.Closed)
153
                statusService.Close();            
154

    
155
        }
156
    }
157
}