diff options
author | Steve Huston <shuston@riverace.com> | 2004-01-01 21:01:01 +0000 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 2004-01-01 21:01:01 +0000 |
commit | 6649a1a542c18bd756757a2d58f3ea51eea0cc47 (patch) | |
tree | 15b88279a4187c88c37adabba8740a0165139299 /examples/APG/Streams/CommandTasks.cpp | |
parent | fcf24b2de58a080db0617c641f337298614a944b (diff) | |
download | ATCD-6649a1a542c18bd756757a2d58f3ea51eea0cc47.tar.gz |
ChangeLogTag:Thu Jan 1 15:20:30 2004 Steve Huston <shuston@riverace.com>
Diffstat (limited to 'examples/APG/Streams/CommandTasks.cpp')
-rw-r--r-- | examples/APG/Streams/CommandTasks.cpp | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/examples/APG/Streams/CommandTasks.cpp b/examples/APG/Streams/CommandTasks.cpp new file mode 100644 index 00000000000..a4910fb23d2 --- /dev/null +++ b/examples/APG/Streams/CommandTasks.cpp @@ -0,0 +1,221 @@ +// $Id$ + +#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::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::SUCCESS; +} +// Listing 013 +// Listing 014 code/ch18 +AnswerCallUpstreamTask::AnswerCallUpstreamTask (void) + : CommandTask(Command::ANSWER_CALL) +{ } +// Listing 014 +// Listing 015 code/ch18 +int AnswerCallUpstreamTask::process (Command *) +{ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Answer Call (upstream)\n"))); + + return Command::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::RETRIEVE_CALLER_ID) +{ } + +int RetrieveCallerIdDownstreamTask::process (Command *) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Retrieving Caller ID data\n"))); + + return Command::SUCCESS; +} +// Listing 022 +// Listing 023 code/ch18 +RetrieveCallerIdUpstreamTask::RetrieveCallerIdUpstreamTask + (void) + : CommandTask(Command::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::SUCCESS; +} +// Listing 023 + +PlayMessageModule::PlayMessageModule (ACE_SOCK_Stream *peer) + : CommandModule ("PlayMessage Module", + new PlayMessageDownstreamTask (), + new PlayMessageUpstreamTask (), + peer) +{ } + +PlayMessageDownstreamTask::PlayMessageDownstreamTask (void) + : CommandTask(Command::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::SUCCESS; +} +// Listing 032 +PlayMessageUpstreamTask::PlayMessageUpstreamTask (void) + : CommandTask(Command::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::SUCCESS; +} + +RecordMessageModule::RecordMessageModule (ACE_SOCK_Stream *peer) + : CommandModule ("RecordMessage Module", + new RecordMessageDownstreamTask (), + new RecordMessageUpstreamTask (), + peer) +{ } + +RecordMessageDownstreamTask::RecordMessageDownstreamTask (void) + : CommandTask(Command::RECORD_MESSAGE) +{ } + +int RecordMessageDownstreamTask::process (Command *) +{ + return Command::SUCCESS; +} + +RecordMessageUpstreamTask::RecordMessageUpstreamTask (void) + : CommandTask(Command::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::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::SUCCESS; +} +// Listing 033 |