Poco Reactor Demo

ReactorTest.cc

#include "Poco/Net/SocketReactor.h"
#include "Poco/Net/SocketNotification.h"
#include "Poco/Net/SocketConnector.h"
#include "Poco/Net/SocketAcceptor.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Observer.h"
#include <iostream>
#include <cstdlib>

using Poco::Net::SocketReactor;
using Poco::Net::SocketConnector;
using Poco::Net::SocketAcceptor;
using Poco::Net::StreamSocket;
using Poco::Net::ServerSocket;
using Poco::Net::SocketAddress;
using Poco::Net::SocketNotification;
using Poco::Net::ReadableNotification;
using Poco::Net::WritableNotification;
using Poco::Net::TimeoutNotification;
using Poco::Net::ShutdownNotification;
using Poco::Observer;

class MyHandler {
   public:
      MyHandler(StreamSocket& socket, SocketReactor& reactor):
         _socket(socket),
         _reactor(reactor)
   {
      _peerAddress = socket.peerAddress().toString();
      std::cout << "connection from " << _peerAddress << " ..." << std::endl;
      _reactor.addEventHandler(_socket, Observer<MyHandler, ReadableNotification>(*this, &MyHandler::onReadable));
   }

      ~MyHandler()
      {
         std::cout << _peerAddress << " disconnected ..." << std::endl;
         _reactor.removeEventHandler(_socket, Observer<MyHandler, ReadableNotification>(*this, &MyHandler::onReadable));
      }
      void onReadable(ReadableNotification* pNf)
      {
         pNf->release();
         char buffer[8];
         int n = _socket.receiveBytes(buffer, sizeof(buffer));
         if (n > 0) {
            _socket.sendBytes(buffer, n);
            _socket.sendBytes("\n", 1);
            std::cout << "receive buffer from " <<  _peerAddress << " : " << std::string(buffer, n) << std::endl;
         } else {
            _socket.shutdownSend();
            delete this;
         }
      }


   private:
      StreamSocket   _socket;
      std::string _peerAddress;
      SocketReactor& _reactor;
};


// ===  FUNCTION  ======================================================================
//         Name:  main
//  Description:  main function
// =====================================================================================
   int
main ( int argc, char *argv[] )
{
   unsigned short port = 7070;
   ServerSocket serverSocket(port);
   SocketReactor reactor;
   SocketAcceptor<MyHandler> acceptor(serverSocket, reactor);
   std::cout   << "\nReactor: \"" << argv[0] << "\" starting..." << std::endl;
   reactor.run();
   std::cout   << "\nReactor: \"" << argv[0] << "\" stopped."  << std::endl;
   return EXIT_SUCCESS;
}     // ----------  end of function main  ----------

结果

转载于:https://www.cnblogs.com/Leo-Forest/archive/2013/05/16/3082218.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值