📄 recordingdevice.h
字号:
/* -*- C++ -*- */
// RecordingDevice.h,v 1.2 2004/01/01 23:03:38 shuston Exp
#ifndef RECORDING_DEVICE_H
#define RECORDING_DEVICE_H
#include "ace/FILE_Addr.h"
#include "ace/Event_Handler.h"
#include "ace/Log_Msg.h"
#include "ace/Reactor.h"
#include "ace/Semaphore.h"
class CallerId;
class MessageType;
class RecordingDevice
{
public:
RecordingDevice ()
{
// Initialize the semaphore so that we don't block on the
// first call to wait_for_activity().
}
virtual ~RecordingDevice ()
{
}
virtual const ACE_TCHAR *get_name (void) const
{
return ACE_TEXT ("UNKNOWN");
}
virtual int init (int, ACE_TCHAR *[])
{
return 0;
}
// Answer the incoming call
virtual int answer_call (void) = 0;
// Fetch some form of caller identification at the hardware level.
virtual CallerId *retrieve_callerId (void) = 0;
// Fetch the message at the location specified by 'addr' and play
// it for the caller.
virtual int play_message (ACE_FILE_Addr &addr) = 0;
// Record data from our physical device into the file at the
// specified address. Return the number of bytes recorded.
virtual MessageType *record_message (ACE_FILE_Addr &addr) = 0;
// Release the RecordingDevice to accept another incoming call
virtual void release (void)
{
this->release_semaphore ();
}
// Get the handler of the device so that wait_for_activity() can
// wait for data to arrive.
virtual ACE_Event_Handler *get_handler (void) const
{
return 0;
}
virtual RecordingDevice *wait_for_activity (void)
{
// Block on a semaphore until it says we're ready to do
// work.
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Waiting for semaphore\n")));
this->acquire_semaphore ();
// Use the reactor to wait for activity on our handle
ACE_Reactor reactor;
ACE_Event_Handler *handler = this->get_handler ();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Handler is %@\n"),
(void *)handler));
reactor.register_handler (this->get_handler (),
ACE_Event_Handler::READ_MASK);
reactor.handle_events ();
// Error-check this...
// Leave the semaphore locked so that we'll block until
// recording_complete() is invoked.
return this;
}
protected:
void acquire_semaphore (void)
{
this->semaphore_.acquire ();
}
void release_semaphore (void)
{
// Reset the semaphore so that wait_for_activity() will
// unblock.
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Releasing semaphore\n")));
this->semaphore_.release ();
}
private:
ACE_Semaphore semaphore_;
};
#include "RecordingDevice_Text.h"
#include "RecordingDevice_USRVM.h"
#include "RecordingDevice_QC.h"
#include "RecordingDeviceFactory.h"
#endif /* RECORDING_DEVICE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -