1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
// **********************************************************************
//
// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
#ifndef SERVICE_MANAGER_I_H
#define SERVICE_MANAGER_I_H
#include <IceBox/IceBox.h>
#include <Ice/LoggerF.h>
#include <Ice/CommunicatorF.h>
#include <Ice/DynamicLibraryF.h>
#include <map>
namespace IceBox
{
class ServiceManagerI : public ServiceManager,
public IceUtil::Monitor<IceUtil::Mutex>,
public Ice::EnableSharedFromThis<ServiceManagerI>
{
public:
ServiceManagerI(Ice::CommunicatorPtr, int&, char*[]);
virtual ~ServiceManagerI();
virtual Ice::SliceChecksumDict getSliceChecksums(const Ice::Current&) const;
virtual void startService(ICE_IN(std::string), const ::Ice::Current&);
virtual void stopService(ICE_IN(std::string), const ::Ice::Current&);
virtual void addObserver(ICE_IN(ServiceObserverPrxPtr), const Ice::Current&);
virtual void shutdown(const ::Ice::Current&);
int run();
bool start();
void stop();
#ifdef ICE_CPP11_MAPPING
void observerCompleted(const std::shared_ptr<ServiceObserverPrx>&, std::exception_ptr);
#else
void observerCompleted(const Ice::AsyncResultPtr&);
#endif
private:
enum ServiceStatus
{
Stopping,
Stopped,
Starting,
Started
};
struct ServiceInfo
{
::std::string name;
ServicePtr service;
::IceInternal::DynamicLibraryPtr library;
::Ice::CommunicatorPtr communicator;
::std::string envName;
ServiceStatus status;
Ice::StringSeq args;
};
void start(const std::string&, const std::string&, const ::Ice::StringSeq&);
void stopAll();
void servicesStarted(const std::vector<std::string>&, const std::set<ServiceObserverPrxPtr>&);
void servicesStopped(const std::vector<std::string>&, const std::set<ServiceObserverPrxPtr>&);
#ifdef ICE_CPP11_MAPPING
std::function<void (std::exception_ptr)> makeObserverCompletedCallback(const std::shared_ptr<ServiceObserverPrx>&);
void observerRemoved(const std::shared_ptr<ServiceObserverPrx>&, std::exception_ptr);
#else
void observerRemoved(const ServiceObserverPrx&, const std::exception&);
#endif
Ice::PropertiesPtr createServiceProperties(const std::string&);
void destroyServiceCommunicator(const std::string&, const Ice::CommunicatorPtr&);
bool configureAdmin(const Ice::PropertiesPtr&, const std::string&);
void removeAdminFacets(const std::string&);
::Ice::CommunicatorPtr _communicator;
bool _adminEnabled;
std::set<std::string> _adminFacetFilter;
::Ice::CommunicatorPtr _sharedCommunicator;
::Ice::LoggerPtr _logger;
::Ice::StringSeq _argv; // Filtered server argument vector, not including program name
std::vector<ServiceInfo> _services;
bool _pendingStatusChanges;
std::set<ServiceObserverPrxPtr> _observers;
int _traceServiceObserver;
#ifndef ICE_CPP11_MAPPING
::Ice::CallbackPtr _observerCompletedCB;
#endif
};
ICE_DEFINE_PTR(ServiceManagerIPtr, ServiceManagerI);
}
#endif
|