⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spipe-connector.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// SPIPE-connector.cpp,v 4.31 2004/10/27 21:06:58 shuston Exp#if !defined (SPIPE_CONNECTOR_C)#define SPIPE_CONNECTOR_C#include "ace/OS_NS_string.h"#include "ace/SPIPE_Addr.h"#include "ace/SPIPE_Connector.h"#include "ace/Proactor.h"#include "ace/Get_Opt.h"#include "ace/OS_NS_unistd.h"#include "SPIPE-connector.h"ACE_RCSID(blocking, SPIPE_connector, "SPIPE-connector.cpp,v 4.31 2004/10/27 21:06:58 shuston Exp")Peer_Handler::Peer_Handler (int iterations)  : iterations_ (iterations){}Peer_Handler::~Peer_Handler (void){}intPeer_Handler::open (void *){  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("activating %d\n"), this->get_handle ()));  // If iterations_ has not been set, read from stdin.  if (iterations_ == 0)    {      this->display_menu ();      if (ACE_Event_Handler::register_stdin_handler          (this,           ACE_Reactor::instance (),           ACE_Thread_Manager::instance ()) == -1)        ACE_ERROR_RETURN ((LM_ERROR,                           ACE_TEXT ("%p\n"),                           ACE_TEXT ("register_stdin_handler")),                          -1);      else        return 0;    }  else // If iterations_ has been set, send iterations_ buffers.    {      const char *buffer =        "Oh give me a home\n"        "Where the buffalo roam,\n"        "And the deer and the antelope play.\n"        "Where seldom is heard\n"        "A discouraging word,\n"        "And the skies are not cloudy all day.\n";      int length = ACE_OS::strlen (buffer);      while (iterations_-- > 0             && this->peer ().send_n (buffer,                                      length) == length)        continue;      this->peer ().close ();      ACE_Reactor::instance ()->end_reactor_event_loop();      return 0;    }}intPeer_Handler::handle_input (ACE_HANDLE){  char buf[BUFSIZ];  ssize_t n = ACE_OS::read (ACE_STDIN,                            buf,                            sizeof buf);  if (n > 0)    if (this->peer ().send (buf, n) != n)      ACE_ERROR_RETURN ((LM_ERROR,                         ACE_TEXT ("%p\n"),                         ACE_TEXT ("write failed")),                        -1);    else if (n == 0) // Explicitly close the connection.      {        if (this->peer ().close () == -1)          ACE_ERROR_RETURN ((LM_ERROR,                             ACE_TEXT ("%p\n"),                             ACE_TEXT ("close")),                            1);        return -1;      }    else      this->display_menu ();  return 0;}intPeer_Handler::handle_close (ACE_HANDLE,                            ACE_Reactor_Mask){  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Shutting down\n")));  return 0;}ACE_HANDLEPeer_Handler::get_handle (void) const{  return this->peer ().get_handle ();}voidPeer_Handler::display_menu (void){  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nplease enter input..: ")));}IPC_Client::IPC_Client (void)  : iterations_ (0),    done_handler_ (ACE_Sig_Handler_Ex (ACE_Proactor::end_event_loop)){  ACE_OS::strcpy (rendezvous_, ACE_TEXT ("acepipe"));}IPC_Client::~IPC_Client (void){}// Dynamic linking hooks.intIPC_Client::init (int argc, ACE_TCHAR *argv[]){  if (this->parse_args (argc, argv) == -1)    return -1;  // Handle signals through the ACE_Reactor.  else if (ACE_Reactor::instance ()->register_handler           (SIGINT,            &this->done_handler_) == -1)    return -1;  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Opening %s\n"), rendezvous_));  Peer_Handler *ph;  ACE_NEW_RETURN (ph,                  Peer_Handler (iterations_),                  -1);  // Connect to the peer, reusing the local addr if necessary.  if (this->connect (ph,                     ACE_SPIPE_Addr (rendezvous_),                     ACE_Synch_Options::defaults,                     ACE_sap_any_cast (ACE_SPIPE_Addr &),                     0,                     O_RDWR | FILE_FLAG_OVERLAPPED,                     0) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       ACE_TEXT ("%p\n"),                       ACE_TEXT ("connect")),                      -1);  return 0;}intIPC_Client::fini (void){  return 0;}intIPC_Client::svc (void){  ACE_Reactor::instance ()->run_reactor_event_loop ();  return 0;}intIPC_Client::handle_close (ACE_HANDLE,                          ACE_Reactor_Mask){  return 0;}intIPC_Client::parse_args (int argc, ACE_TCHAR *argv[]){  ACE_LOG_MSG->open (argv[0]);  ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("ui:r:"));  for (int c; (c = get_opt ()) != -1; )    {      switch (c)        {        case 'r':          ACE_OS::strncpy (rendezvous_,                           get_opt.opt_arg (),                           sizeof (rendezvous_) / sizeof (ACE_TCHAR));          break;        case 'i':          iterations_ = ACE_OS::atoi (get_opt.opt_arg ());          break;        case 'u':        default:          ACE_ERROR_RETURN ((LM_ERROR,                             ACE_TEXT ("usage: %n -i <iterations>\n")                             ACE_TEXT ("-r <rendezvous>\n")),                            -1);          break;        }    }  return 0;}#endif /* SPIPE_CONNECTOR */#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)template class ACE_Connector_Base<Peer_Handler>;template class ACE_Connector<Peer_Handler, ACE_SPIPE_CONNECTOR>;template class ACE_Svc_Handler<ACE_SPIPE_STREAM, ACE_NULL_SYNCH>;template class ACE_NonBlocking_Connect_Handler<Peer_Handler>;#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)#pragma instantiate ACE_Connector_Base<Peer_Handler>#pragma instantiate ACE_Connector<Peer_Handler, ACE_SPIPE_CONNECTOR>#pragma instantiate ACE_Svc_Handler<ACE_SPIPE_STREAM, ACE_NULL_SYNCH>#pragma instantiate ACE_NonBlocking_Connect_Handler<Peer_Handler>#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -