30 GatewayClient::GatewayClient(boost::asio::io_service& a_IOService, boost::asio::ip::tcp::resolver::iterator a_EndpointIterator, std::shared_ptr<ConfigServerHandlerCollection>
31 a_ConfigServerHandlerCollection, std::shared_ptr<HdlcdClientHandlerCollection> a_HdlcdClientHandlerCollection,
GatewayClientConnectGuard& a_GatewayClientConnectGuard, uint16_t a_ReferenceNbr):
32 m_IOService(a_IOService), m_ConfigServerHandlerCollection(a_ConfigServerHandlerCollection), m_HdlcdClientHandlerCollection(a_HdlcdClientHandlerCollection),
33 m_GatewayClientConnectGuard(a_GatewayClientConnectGuard), m_TcpSocket(a_IOService), m_ReferenceNbr(a_ReferenceNbr), m_bClosed(false) {
35 assert(m_ConfigServerHandlerCollection);
36 assert(m_HdlcdClientHandlerCollection);
39 boost::asio::async_connect(m_TcpSocket, a_EndpointIterator, [
this, &a_IOService](boost::system::error_code a_ErrorCode, boost::asio::ip::tcp::resolver::iterator) {
40 if (a_ErrorCode == boost::asio::error::operation_aborted)
return;
46 m_FrameEndpoint = std::make_shared<FrameEndpoint>(a_IOService, m_TcpSocket, 0x00);
48 m_FrameEndpoint->SetOnFrameCallback ([
this](std::shared_ptr<Frame> a_Frame)->
bool{
return OnFrame(a_Frame); });
49 m_FrameEndpoint->SetOnClosedCallback ([
this](){ OnClosed(); });
50 m_FrameEndpoint->Start();
60 if (m_FrameEndpoint) {
61 m_FrameEndpoint->Shutdown();
66 if (m_bClosed ==
false) {
68 if (m_ConfigServerHandlerCollection) {
72 if (m_FrameEndpoint) {
73 m_FrameEndpoint->Close();
76 if (m_OnClosedCallback) {
82 m_ConfigServerHandlerCollection.reset();
83 m_HdlcdClientHandlerCollection.reset();
88 if (m_FrameEndpoint) {
94 m_OnClosedCallback = a_OnClosedCallback;
97 bool GatewayClient::OnFrame(std::shared_ptr<Frame> a_Frame) {
100 auto l_GatewayFrameData = std::dynamic_pointer_cast<
GatewayFrameData>(a_Frame);
101 assert(l_GatewayFrameData);
102 m_HdlcdClientHandlerCollection->SendPacket(l_GatewayFrameData->GetSerialPortNbr(), l_GatewayFrameData->GetPayload());
106 void GatewayClient::OnClosed() {
void SetOnClosedCallback(std::function< void()> a_OnClosedCallback)
static GatewayFrameData Create(uint16_t a_SerialPortNbr, const std::vector< unsigned char > &a_Payload)
GatewayClient(boost::asio::io_service &a_IOService, boost::asio::ip::tcp::resolver::iterator a_EndpointIterator, std::shared_ptr< ConfigServerHandlerCollection > a_ConfigServerHandlerCollection, std::shared_ptr< HdlcdClientHandlerCollection > a_HdlcdClientHandlerCollection, GatewayClientConnectGuard &a_GatewayClientConnectGuard, uint16_t a_ReferenceNbr)
void SendPacket(uint16_t a_SerialPortNbr, const std::vector< unsigned char > &a_Payload)
static std::shared_ptr< GatewayFrameData > CreateDeserializedFrame()