1.说明
使用poco net库中connector类(基于Connector Pattern思想),将服务初始化和服务行为分离,对Connector进行简单重构,编写ServiceHandler实现简单业务。主要解决:
1)服务初始化时,连接断开的重连。
2)执行服务业务行为时,连接断开的重连。
2.代码
SocketConnectorTest.h
#ifndef Net_SocketConnectorTest_INCLUDED
#define Net_SocketConnectorTest_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/SocketNotification.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Observer.h"
namespace Poco {
namespace Net {
template <class ServiceHandler>
class SocketConnector
{
public:
explicit SocketConnector(SocketAddress& address):
_pReactor(0)
{
_socket.connectNB(address);
}
SocketConnector(SocketAddress& address, SocketReactor& reactor):
_pReactor(0)
{
_socket.connectNB(address);
registerConnector(reactor);
}
virtual ~SocketConnector()
{
try
{
unregisterConnector();
}
catch (...)
{
poco_unexpected();
}
}
virtual void registerConnector(SocketReactor& reactor)
{
_pReactor = &reactor;
_pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, ReadableNotification>(*this, &SocketConnector::onReadable));
_pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, WritableNotification>(*this, &SocketCo