haiku/headers/private/app/MessagePrivate.h
Axel Dörfler 05b4b0d7ce Node monitoring didn't work because unflattening KMessages didn't take the
message header into account. It worked before at some point as BLooper was
letting the looper handle messages to invalid targets - they are now just
dropped.
This fixes bug #93.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16045 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-23 13:30:17 +00:00

84 lines
1.8 KiB
C++

//------------------------------------------------------------------------------
// MessagePrivate.h
//
//------------------------------------------------------------------------------
#ifdef USING_MESSAGE4
# include <MessagePrivate4.h>
#else
#ifndef MESSAGEPRIVATE_H
#define MESSAGEPRIVATE_H
#include <Message.h>
#include <Messenger.h>
#include <MessengerPrivate.h>
#include <TokenSpace.h>
class BMessage::Private {
public:
Private(BMessage* msg) : fMessage(msg) {;}
Private(BMessage& msg) : fMessage(&msg) {;}
inline void SetTarget(int32 token)
{
fMessage->fTarget = token;
fMessage->fPreferred = token == B_PREFERRED_TOKEN;
}
inline void SetReply(team_id team, port_id port, int32 token)
{
fMessage->fReplyTo.port = port;
fMessage->fReplyTo.target = token;
fMessage->fReplyTo.team = team;
fMessage->fReplyTo.preferred = token == B_PREFERRED_TOKEN;
}
inline void SetReply(BMessenger messenger)
{
BMessenger::Private mp(messenger);
fMessage->fReplyTo.port = mp.Port();
fMessage->fReplyTo.target = mp.Token();
fMessage->fReplyTo.team = mp.Team();
fMessage->fReplyTo.preferred = mp.IsPreferredTarget();
}
inline int32 GetTarget()
{
return fMessage->fTarget;
}
inline bool UsePreferredTarget()
{
return fMessage->fPreferred;
}
static inline status_t SendFlattenedMessage(void *data, int32 size,
port_id port, int32 token, bigtime_t timeout)
{
return BMessage::_SendFlattenedMessage(data, size, port, token,
timeout);
}
static inline void StaticInit()
{
BMessage::_StaticInit();
}
static inline void StaticCleanup()
{
BMessage::_StaticCleanup();
}
static inline void StaticCacheCleanup()
{
BMessage::_StaticCacheCleanup();
}
private:
BMessage* fMessage;
};
#endif // MESSAGEPRIVATE_H
#endif // USING_MESSAGE4