#ifndef _SUBSCRIBER_H
#define _SUBSCRIBER_H
#include <MediaDefs.h>
#include "OldBufferStream.h"
typedef bool (*enter_stream_hook)(void *userData, char *buffer, size_t count,
void *header);
typedef status_t (*exit_stream_hook)(void *userData, status_t error);
class BSubscriber
{
public:
BSubscriber(const char *name = NULL);
virtual ~BSubscriber();
virtual status_t Subscribe(BAbstractBufferStream* stream);
virtual status_t Unsubscribe();
subscriber_id ID() const;
const char *Name() const;
void SetTimeout(bigtime_t microseconds);
bigtime_t Timeout() const;
virtual status_t EnterStream(subscriber_id neighbor,
bool before,
void *userData,
enter_stream_hook entryFunction,
exit_stream_hook exitFunction,
bool background);
virtual status_t ExitStream(bool synch=FALSE);
bool IsInStream() const;
protected:
static status_t _ProcessLoop(void *arg);
virtual status_t ProcessLoop();
BAbstractBufferStream *Stream() const;
private:
virtual void _ReservedSubscriber1();
virtual void _ReservedSubscriber2();
virtual void _ReservedSubscriber3();
char *fName;
subscriber_id fSubID;
sem_id fSem;
BAbstractBufferStream *fStream;
void *fUserData;
enter_stream_hook fStreamFn;
exit_stream_hook fCompletionFn;
bool fCallStreamFn;
bigtime_t fTimeout;
thread_id fBackThread;
sem_id fSynchLock;
int32 fFileID;
uint32 _reserved[4];
};
#endif