📄 commandtasks.cpp
字号:
// CommandTasks.cpp,v 1.2 2004/01/08 20:20:43 shuston Exp
#include "ace/FILE_Addr.h"
#include "ace/FILE_Connector.h"
#include "ace/FILE_IO.h"
#include "Command.h"
#include "CommandTasks.h"
#include "RecordingDevice_Text.h"
// Listing 011 code/ch18
AnswerCallModule::AnswerCallModule (ACE_SOCK_Stream *peer)
: CommandModule ("AnswerCall Module",
new AnswerCallDownstreamTask (),
new AnswerCallUpstreamTask (),
peer)
{ }
// Listing 011
// Listing 012 code/ch18
AnswerCallDownstreamTask::AnswerCallDownstreamTask (void)
: CommandTask(Command::CMD_ANSWER_CALL)
{ }
// Listing 012
// Listing 013 code/ch18
int AnswerCallDownstreamTask::process (Command *command)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Answer Call (downstream)\n")));
TextListenerAcceptor *acceptor =
(TextListenerAcceptor *)command->extra_data_;
CommandModule *module =
(CommandModule*)this->module ();
command->numeric_result_ =
acceptor->accept (module->peer ());
acceptor->release ();
return Command::RESULT_SUCCESS;
}
// Listing 013
// Listing 014 code/ch18
AnswerCallUpstreamTask::AnswerCallUpstreamTask (void)
: CommandTask(Command::CMD_ANSWER_CALL)
{ }
// Listing 014
// Listing 015 code/ch18
int AnswerCallUpstreamTask::process (Command *)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Answer Call (upstream)\n")));
return Command::RESULT_SUCCESS;
}
// Listing 015
// Listing 021 code/ch18
RetrieveCallerIdModule::RetrieveCallerIdModule
(ACE_SOCK_Stream *peer)
: CommandModule ("RetrieveCallerId Module",
new RetrieveCallerIdDownstreamTask (),
new RetrieveCallerIdUpstreamTask (),
peer)
{ }
// Listing 021
// Listing 022 code/ch18
RetrieveCallerIdDownstreamTask::RetrieveCallerIdDownstreamTask
(void)
: CommandTask(Command::CMD_RETRIEVE_CALLER_ID)
{ }
int RetrieveCallerIdDownstreamTask::process (Command *)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Retrieving Caller ID data\n")));
return Command::RESULT_SUCCESS;
}
// Listing 022
// Listing 023 code/ch18
RetrieveCallerIdUpstreamTask::RetrieveCallerIdUpstreamTask
(void)
: CommandTask(Command::CMD_RETRIEVE_CALLER_ID)
{ }
int RetrieveCallerIdUpstreamTask::process (Command *command)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Returning Caller ID data\n")));
ACE_INET_Addr remote_addr;
CommandModule *module =
(CommandModule*)this->module ();
module->peer ().get_remote_addr (remote_addr);
ACE_TCHAR remote_addr_str[256];
remote_addr.addr_to_string (remote_addr_str, 256);
command->result_ = ACE_CString (remote_addr_str);
return Command::RESULT_SUCCESS;
}
// Listing 023
PlayMessageModule::PlayMessageModule (ACE_SOCK_Stream *peer)
: CommandModule ("PlayMessage Module",
new PlayMessageDownstreamTask (),
new PlayMessageUpstreamTask (),
peer)
{ }
PlayMessageDownstreamTask::PlayMessageDownstreamTask (void)
: CommandTask(Command::CMD_PLAY_MESSAGE)
{ }
// Listing 032 code/ch18
int PlayMessageDownstreamTask::process (Command *command)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Play Outgoing Message\n")));
ACE_FILE_Connector connector;
ACE_FILE_IO file;
ACE_FILE_Addr *addr =
(ACE_FILE_Addr *)command->extra_data_;
if (connector.connect (file, *addr) == -1)
{
command->numeric_result_ = -1;
}
else
{
command->numeric_result_ = 0;
CommandModule *module =
(CommandModule*)this->module ();
char rwbuf[512];
int rwbytes;
while ((rwbytes = file.recv (rwbuf, 512)) > 0)
{
module->peer ().send_n (rwbuf, rwbytes);
}
}
return Command::RESULT_SUCCESS;
}
// Listing 032
PlayMessageUpstreamTask::PlayMessageUpstreamTask (void)
: CommandTask(Command::CMD_PLAY_MESSAGE)
{ }
int PlayMessageUpstreamTask::process (Command *command)
{
ACE_FILE_Addr * addr =
(ACE_FILE_Addr *)command->extra_data_;
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Outgoing message (%s) sent\n"),
ACE_TEXT (addr->get_path_name ())));
return Command::RESULT_SUCCESS;
}
RecordMessageModule::RecordMessageModule (ACE_SOCK_Stream *peer)
: CommandModule ("RecordMessage Module",
new RecordMessageDownstreamTask (),
new RecordMessageUpstreamTask (),
peer)
{ }
RecordMessageDownstreamTask::RecordMessageDownstreamTask (void)
: CommandTask(Command::CMD_RECORD_MESSAGE)
{ }
int RecordMessageDownstreamTask::process (Command *)
{
return Command::RESULT_SUCCESS;
}
RecordMessageUpstreamTask::RecordMessageUpstreamTask (void)
: CommandTask(Command::CMD_RECORD_MESSAGE)
{ }
// Listing 033 code/ch18
int RecordMessageUpstreamTask::process (Command *command)
{
// Collect whatever the peer sends and write into the
// specified file.
ACE_FILE_Connector connector;
ACE_FILE_IO file;
ACE_FILE_Addr *addr =
(ACE_FILE_Addr *)command->extra_data_;
if (connector.connect (file, *addr) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("create file")),
Command::RESULT_FAILURE);
file.truncate (0);
CommandModule *module =
(CommandModule*)this->module ();
int total_bytes = 0;
char rwbuf[512];
int rwbytes;
while ((rwbytes = module->peer ().recv (rwbuf, 512)) > 0)
{
total_bytes += file.send_n (rwbuf, rwbytes);
}
file.close ();
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("RecordMessageUpstreamTask ")
ACE_TEXT ("- recorded %d byte message\n"),
total_bytes));
return Command::RESULT_SUCCESS;
}
// Listing 033
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -