test_upipe.cpp
来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C++ 代码 · 共 123 行
CPP
123 行
// $Id: test_upipe.cpp 78634 2007-06-28 14:14:06Z johnnyw $// This short program illustrates in implementation of the classic// "bounded buffer" program using ACE_UPIPEs. This program also shows// how the ACE_Connector and ACE_Acceptor patterns work when used with// ACE_UPIPEs.#include "ace/Acceptor.h"#include "ace/UPIPE_Acceptor.h"#include "ace/UPIPE_Connector.h"#include "ace/Connector.h"#include "ace/UPIPE_Addr.h"ACE_RCSID(misc, test_upipe, "$Id: test_upipe.cpp 78634 2007-06-28 14:14:06Z johnnyw $")#if defined (ACE_HAS_THREADS)#include "test_upipe.h"class Server : public ACE_Strategy_Acceptor <Server_Service, ACE_UPIPE_ACCEPTOR>{ // = TITLE // Defines the interface for a factory that accepts connections // and creates/activates Server_Service objects.public: Server (ACE_Thread_Manager *thr_mgr, ACE_Reactor *reactor) : reactor_ (reactor), thr_mgr_ (thr_mgr) { ACE_TRACE ("Server::Server"); } virtual int init (int argc, ACE_TCHAR *argv[]) { ACE_TRACE ("Server::init"); const ACE_TCHAR *l_addr = argc > 1 ? argv[1] : ACE_DEFAULT_RENDEZVOUS; ACE_UPIPE_Addr local_addr (l_addr); if (this->thr_strategy_.open (this->thr_mgr_, THR_DETACHED | THR_NEW_LWP) == -1) return -1; else if (this->open (local_addr, this->reactor_, 0, 0, &this->thr_strategy_) == -1) return -1; // Give server a chance to register the STREAM pipe. ACE_OS::sleep (ACE_Time_Value (4)); return 0; }private: ACE_Reactor *reactor_; // Our instance of the reactor. ACE_Thread_Manager *thr_mgr_; // Our instance of a thread manager. ACE_Thread_Strategy<Server_Service> thr_strategy_; // Our concurrency strategy.};class Client : public ACE_Connector <Client_Service, ACE_UPIPE_CONNECTOR>{ // = TITLE // Defines the interface for a factory that connects // a Client_Service with a Server.public: Client (ACE_Thread_Manager *thr_mgr) : thr_mgr_ (thr_mgr) { ACE_TRACE ("Client::Client"); } virtual int init (int argc, ACE_TCHAR *argv[]) { ACE_TRACE ("Client::init"); const ACE_TCHAR *r_addr = argc > 1 ? argv[1] : ACE_DEFAULT_RENDEZVOUS; ACE_UPIPE_Addr remote_addr (r_addr); Client_Service *cs; ACE_NEW_RETURN (cs, Client_Service (this->thr_mgr_), -1); return this->connect (cs, remote_addr); }private: ACE_Thread_Manager *thr_mgr_;};intACE_TMAIN (int argc, ACE_TCHAR *argv[]){ ACE_Service_Config svc_conf; ACE_Thread_Manager thr_mgr; Client peer_connector (&thr_mgr); Server peer_acceptor (&thr_mgr, ACE_Reactor::instance ()); // Establish the connection between Acceptor and Connector. if (peer_acceptor.init (argc, argv) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("init")), -1); else if (peer_connector.init (argc, argv) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("init")), -1); // Wait for threads to exit. thr_mgr.wait (); return 0;}#elseintACE_TMAIN (int, ACE_TCHAR *[]){ ACE_ERROR_RETURN ((LM_ERROR, "your platform does not support threads\n"), 1);}#endif /* ACE_HAS_THREADS */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?