/* * 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 #include #include #include #include struct service; struct service_connection; typedef std::map ServiceNameMap; typedef std::map 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