//------------------------------------------------------------------------------ // Copyright (c) 2001-2002, Haiku, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // // File Name: ServerApp.h // Author: DarkWyrm // Adi Oanca // Description: Server-side BApplication counterpart // //------------------------------------------------------------------------------ #ifndef _SERVERAPP_H_ #define _SERVERAPP_H_ #include #include #include "FMWList.h" class AreaPool; class BMessage; class BPortLink; class BList; class DisplayDriver; class LinkMsgReader; class LinkMsgSender; class ServerCursor; class ServerBitmap; /*! \class ServerApp ServerApp.h \brief Counterpart to BApplication within the app_server */ class ServerApp { public: ServerApp(port_id sendport, port_id rcvport, port_id clientLooperPort, team_id clientTeamID, int32 handlerID, char *signature); virtual ~ServerApp(void); bool Run(void); void Lock(void); void Unlock(void); bool IsLocked(void); /*! \brief Determines whether the application is the active one \return true if active, false if not. */ bool IsActive(void) const { return fIsActive; } void Activate(bool value); bool PingTarget(void); void PostMessage(int32 code); void SendMessageToClient( const BMessage* msg ) const; void SetAppCursor(void); ServerBitmap *FindBitmap(int32 token); team_id ClientTeamID() const; thread_id MonitorThreadID() const; FMWList fAppFMWList; const char *Title() const { return fSignature.String(); } private: friend class ServerWindow; void DispatchMessage(int32 code, LinkMsgReader &link); static int32 MonitorApp(void *data); port_id fClientAppPort, fMessagePort, // TODO: find out why there is both the app port and the looper port. Do // we really need both? fClientLooperPort; BString fSignature; thread_id fMonitorThreadID; team_id fClientTeamID; LinkMsgReader *fMsgReader; LinkMsgSender *fMsgSender; BList *fSWindowList, *fBitmapList, *fPictureList; ServerCursor *fAppCursor; sem_id fLockSem; bool fCursorHidden; bool fIsActive; int32 fHandlerToken; AreaPool *fSharedMem; bool fQuitting; }; #endif