66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
/*
|
|
* Copyright 2006-2015, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Axel Dörfler, axeld@pinc-software.de
|
|
*/
|
|
#ifndef SERVICES_H
|
|
#define SERVICES_H
|
|
|
|
|
|
#include <Handler.h>
|
|
#include <Locker.h>
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <sys/select.h>
|
|
|
|
|
|
struct service;
|
|
struct service_connection;
|
|
typedef std::map<std::string, service*> ServiceNameMap;
|
|
typedef std::map<int, service_connection*> ServiceSocketMap;
|
|
|
|
|
|
class Services : public BHandler {
|
|
public:
|
|
Services(const BMessage& services);
|
|
virtual ~Services();
|
|
|
|
status_t InitCheck() const;
|
|
|
|
virtual void MessageReceived(BMessage* message);
|
|
|
|
private:
|
|
void _NotifyListener(bool quit = false);
|
|
void _UpdateMinMaxSocket(int socket);
|
|
status_t _StartService(struct service& service);
|
|
status_t _StopService(struct service* service);
|
|
status_t _ToService(const BMessage& message,
|
|
struct service*& service);
|
|
void _Update(const BMessage& services);
|
|
status_t _LaunchService(struct service& service,
|
|
int socket);
|
|
status_t _Listener();
|
|
static status_t _Listener(void* self);
|
|
|
|
private:
|
|
thread_id fListener;
|
|
BLocker fLock;
|
|
ServiceNameMap fNameMap;
|
|
ServiceSocketMap fSocketMap;
|
|
uint32 fUpdate;
|
|
int fReadPipe;
|
|
int fWritePipe;
|
|
int fMinSocket;
|
|
int fMaxSocket;
|
|
fd_set fSet;
|
|
};
|
|
|
|
|
|
const static uint32 kMsgUpdateServices = 'srvU';
|
|
|
|
|
|
#endif // SERVICES_H
|