haiku/headers/os/app/Messenger.h

104 lines
2.5 KiB
C++

/*
* Copyright 2001-2011 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold (bonefish@users.sf.net)
*/
#ifndef _MESSENGER_H
#define _MESSENGER_H
#include <OS.h>
#include <ByteOrder.h>
#include <Message.h>
class BHandler;
class BLooper;
class BMessenger {
public:
BMessenger();
BMessenger(const char* signature,
team_id team = -1,
status_t* result = NULL);
BMessenger(const BHandler* handler,
const BLooper* looper = NULL,
status_t* result = NULL);
BMessenger(const BMessenger& other);
~BMessenger();
// Target
bool IsTargetLocal() const;
BHandler* Target(BLooper **looper) const;
bool LockTarget() const;
status_t LockTargetWithTimeout(
bigtime_t timeout) const;
// Message sending
status_t SendMessage(uint32 command,
BHandler* replyTo = NULL) const;
status_t SendMessage(BMessage* message,
BHandler* replyTo = NULL,
bigtime_t timeout
= B_INFINITE_TIMEOUT) const;
status_t SendMessage(BMessage* message,
BMessenger replyTo,
bigtime_t timeout
= B_INFINITE_TIMEOUT) const;
status_t SendMessage(uint32 command,
BMessage* reply) const;
status_t SendMessage(BMessage* message,
BMessage* reply,
bigtime_t deliveryTimeout
= B_INFINITE_TIMEOUT,
bigtime_t replyTimeout
= B_INFINITE_TIMEOUT) const;
// Operators and misc
status_t SetTo(const char* signature,
team_id team = -1);
status_t SetTo(const BHandler* handler,
const BLooper* looper = NULL);
BMessenger& operator=(const BMessenger& other);
bool operator==(const BMessenger& other) const;
bool IsValid() const;
team_id Team() const;
uint32 HashValue() const;
//----- Private or reserved -----------------------------------------
class Private;
private:
friend class Private;
void _SetTo(team_id team, port_id port,
int32 token);
void _InitData(const char* signature,
team_id team, status_t* result);
void _InitData(const BHandler* handler,
const BLooper *looper,
status_t* result);
private:
port_id fPort;
int32 fHandlerToken;
team_id fTeam;
int32 _reserved[3];
};
bool operator<(const BMessenger& a, const BMessenger& b);
bool operator!=(const BMessenger& a, const BMessenger& b);
#endif // _MESSENGER_H