Satellite-Gateway
ConfigServer.cpp
Go to the documentation of this file.
1 
24 #include "ConfigServer.h"
27 #include "GatewayClientCleanup.h"
28 #include "GatewayClientCreate.h"
29 #include "GatewayClientCreated.h"
30 #include "GatewayClientDestroy.h"
31 #include "GatewayClientDestroyed.h"
32 #include "GatewayClientConnected.h"
34 #include "GatewayClientError.h"
35 #include "HdlcdClientCleanup.h"
36 #include "HdlcdClientCreate.h"
37 #include "HdlcdClientCreated.h"
38 #include "HdlcdClientDestroy.h"
39 #include "HdlcdClientDestroyed.h"
40 #include "HdlcdClientConnected.h"
42 #include "HdlcdClientNewStatus.h"
43 #include "HdlcdClientSuspend.h"
44 #include "HdlcdClientResume.h"
45 #include "HdlcdClientError.h"
46 #include <assert.h>
47 
48 ConfigServer::ConfigServer(boost::asio::io_service& a_IOService, boost::asio::ip::tcp::tcp::socket& a_TcpSocket): m_IOService(a_IOService) {
49  // Init the frame endpoint
50  m_FrameEndpoint = std::make_shared<FrameEndpoint>(a_IOService, a_TcpSocket);
51  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_GATEWAY_CLIENT_CLEANUP, []()->std::shared_ptr<Frame>{ return GatewayClientCleanup::CreateDeserializedFrame(); });
52  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_GATEWAY_CLIENT_CREATE, []()->std::shared_ptr<Frame>{ return GatewayClientCreate::CreateDeserializedFrame (); });
53  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_GATEWAY_CLIENT_DESTROY, []()->std::shared_ptr<Frame>{ return GatewayClientDestroy::CreateDeserializedFrame(); });
54  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_HDLCD_CLIENT_CLEANUP, []()->std::shared_ptr<Frame>{ return HdlcdClientCleanup::CreateDeserializedFrame (); });
55  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_HDLCD_CLIENT_CREATE, []()->std::shared_ptr<Frame>{ return HdlcdClientCreate::CreateDeserializedFrame (); });
56  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_HDLCD_CLIENT_DESTROY, []()->std::shared_ptr<Frame>{ return HdlcdClientDestroy::CreateDeserializedFrame (); });
57  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_HDLCD_CLIENT_SUSPEND, []()->std::shared_ptr<Frame>{ return HdlcdClientSuspend::CreateDeserializedFrame (); });
58  m_FrameEndpoint->RegisterFrameFactory(CONFIG_FRAME_HDLCD_CLIENT_RESUME, []()->std::shared_ptr<Frame>{ return HdlcdClientResume::CreateDeserializedFrame (); });
59  m_FrameEndpoint->SetOnFrameCallback ([this](std::shared_ptr<Frame> a_Frame)->bool{ return OnFrame(a_Frame); });
60  m_FrameEndpoint->SetOnClosedCallback ([this](){ OnClosed(); });
61 }
62 
63 void ConfigServer::Start(std::shared_ptr<GatewayClientHandlerCollection> a_GatewayClientHandlerCollection,
64  std::shared_ptr<HdlcdClientHandlerCollection> a_HdlcdClientHandlerCollection) {
65  assert(a_GatewayClientHandlerCollection);
66  assert(a_HdlcdClientHandlerCollection);
67  m_GatewayClientHandlerCollection = a_GatewayClientHandlerCollection;
68  m_HdlcdClientHandlerCollection = a_HdlcdClientHandlerCollection;
69  m_FrameEndpoint->Start();
70 }
71 
73  // Drop all shared pointers
74  m_GatewayClientHandlerCollection.reset();
75  m_HdlcdClientHandlerCollection.reset();
76 
77  // Close entities
78  m_FrameEndpoint->Close();
79  if (m_OnClosedCallback) {
80  m_OnClosedCallback();
81  } // if
82 }
83 
84 void ConfigServer::GatewayClientCreated(uint16_t a_ReferenceNbr) {
85  // Prepare and send control packet
86  m_FrameEndpoint->SendFrame(GatewayClientCreated::Create(a_ReferenceNbr));
87 }
88 
89 void ConfigServer::GatewayClientDestroyed(uint16_t a_ReferenceNbr) {
90  // Prepare and send control packet
91  m_FrameEndpoint->SendFrame(GatewayClientDestroyed::Create(a_ReferenceNbr));
92 }
93 
94 void ConfigServer::GatewayClientConnected(uint16_t a_ReferenceNbr) {
95  // Prepare and send control packet
96  m_FrameEndpoint->SendFrame(GatewayClientConnected::Create(a_ReferenceNbr));
97 }
98 
99 void ConfigServer::GatewayClientDisconnected(uint16_t a_ReferenceNbr) {
100  // Prepare and send control packet
101  m_FrameEndpoint->SendFrame(GatewayClientDisconnected::Create(a_ReferenceNbr));
102 }
103 
104 void ConfigServer::GatewayClientError(uint16_t a_ReferenceNbr, E_GATEWAY_CLIENT_ERROR a_ErrorCode) {
105  // Prepare and send control packet
106  m_FrameEndpoint->SendFrame(GatewayClientError::Create(a_ReferenceNbr, a_ErrorCode));
107 }
108 
109 void ConfigServer::HdlcdClientCreated(uint16_t a_SerialPortNbr) {
110  // Prepare and send control packet
111  m_FrameEndpoint->SendFrame(HdlcdClientCreated::Create(a_SerialPortNbr));
112 }
113 
114 void ConfigServer::HdlcdClientDestroyed(uint16_t a_SerialPortNbr) {
115  // Prepare and send control packet
116  m_FrameEndpoint->SendFrame(HdlcdClientDestroyed::Create(a_SerialPortNbr));
117 }
118 
119 void ConfigServer::HdlcdClientConnected(uint16_t a_SerialPortNbr) {
120  // Prepare and send control packet
121  m_FrameEndpoint->SendFrame(HdlcdClientConnected::Create(a_SerialPortNbr));
122 }
123 
124 void ConfigServer::HdlcdClientDisconnected(uint16_t a_SerialPortNbr) {
125  // Prepare and send control packet
126  m_FrameEndpoint->SendFrame(HdlcdClientDisconnected::Create(a_SerialPortNbr));
127 }
128 
129 void ConfigServer::HdlcdClientNewStatus(uint16_t a_SerialPortNbr, bool a_bIsResumed, bool a_bIsAlive) {
130  // Prepare and send control packet
131  m_FrameEndpoint->SendFrame(HdlcdClientNewStatus::Create(a_SerialPortNbr, a_bIsResumed, a_bIsAlive));
132 }
133 
134 void ConfigServer::HdlcdClientError(uint16_t a_SerialPortNbr, E_HDLCD_CLIENT_ERROR a_ErrorCode) {
135  // Prepare and send control packet
136  m_FrameEndpoint->SendFrame(HdlcdClientError::Create(a_SerialPortNbr, a_ErrorCode));
137 }
138 
139 bool ConfigServer::OnFrame(std::shared_ptr<Frame> a_Frame) {
140  // Dispatch
141  assert(a_Frame);
142  auto l_ConfigFrame = std::dynamic_pointer_cast<ConfigFrame>(a_Frame);
143  assert(l_ConfigFrame);
144  switch (l_ConfigFrame->GetConfigFrameType()) {
146  m_GatewayClientHandlerCollection->CleanAll();
147  break;
148  }
150  auto l_GatewayClientCreate = std::dynamic_pointer_cast<GatewayClientCreate>(l_ConfigFrame);
151  m_GatewayClientHandlerCollection->CreateClient(l_GatewayClientCreate->GetReferenceNbr(),
152  l_GatewayClientCreate->GetRemoteAddress(),
153  l_GatewayClientCreate->GetRemotePortNbr());
154  break;
155  }
157  auto l_GatewayClientDestroy = std::dynamic_pointer_cast<GatewayClientDestroy>(l_ConfigFrame);
158  m_GatewayClientHandlerCollection->DestroyClient(l_GatewayClientDestroy->GetReferenceNbr());
159  break;
160  }
162  m_HdlcdClientHandlerCollection->CleanAll();
163  break;
164  }
166  auto l_HdlcdClientCreate = std::dynamic_pointer_cast<HdlcdClientCreate>(l_ConfigFrame);
167  m_HdlcdClientHandlerCollection->CreateHdlcdClient(l_HdlcdClientCreate->GetRemoteAddress(), l_HdlcdClientCreate->GetTcpPortNbr(), l_HdlcdClientCreate->GetSerialPortNbr());
168  break;
169  }
171  auto l_HdlcdClientDestroy = std::dynamic_pointer_cast<HdlcdClientDestroy>(l_ConfigFrame);
172  m_HdlcdClientHandlerCollection->DestroyHdlcdClient(l_HdlcdClientDestroy->GetSerialPortNbr());
173  break;
174  }
176  auto l_HdlcdClientSuspend = std::dynamic_pointer_cast<HdlcdClientSuspend>(l_ConfigFrame);
177  m_HdlcdClientHandlerCollection->SuspendHdlcdClient(l_HdlcdClientSuspend->GetSerialPortNbr());
178  break;
179  }
181  auto l_HdlcdClientResume = std::dynamic_pointer_cast<HdlcdClientResume>(l_ConfigFrame);
182  m_HdlcdClientHandlerCollection->ResumeHdlcdClient(l_HdlcdClientResume->GetSerialPortNbr());
183  break;
184  }
185  default:
186  // Ignore
187  break;
188  } // switch
189 
190  return true;
191 }
192 
193 void ConfigServer::OnClosed() {
194  Close();
195 }
static HdlcdClientDestroyed Create(uint16_t a_SerialPortNbr)
void HdlcdClientNewStatus(uint16_t a_SerialPortNbr, bool a_bIsResumed, bool a_bIsAlive)
E_GATEWAY_CLIENT_ERROR
void Start(std::shared_ptr< GatewayClientHandlerCollection > a_GatewayClientHandlerCollection, std::shared_ptr< HdlcdClientHandlerCollection > a_HdlcdClientHandlerCollection)
void HdlcdClientConnected(uint16_t a_SerialPortNbr)
void HdlcdClientCreated(uint16_t a_SerialPortNbr)
static std::shared_ptr< GatewayClientCreate > CreateDeserializedFrame()
static GatewayClientDestroyed Create(uint16_t a_ReferenceNbr)
static GatewayClientConnected Create(uint16_t a_ReferenceNbr)
void HdlcdClientDisconnected(uint16_t a_SerialPortNbr)
E_HDLCD_CLIENT_ERROR
void GatewayClientCreated(uint16_t a_ReferenceNbr)
void GatewayClientConnected(uint16_t a_ReferenceNbr)
static std::shared_ptr< GatewayClientCleanup > CreateDeserializedFrame()
void GatewayClientDestroyed(uint16_t a_ReferenceNbr)
static GatewayClientDisconnected Create(uint16_t a_ReferenceNbr)
static GatewayClientCreated Create(uint16_t a_ReferenceNbr)
void HdlcdClientDestroyed(uint16_t a_SerialPortNbr)
void GatewayClientDisconnected(uint16_t a_ReferenceNbr)
static HdlcdClientDisconnected Create(uint16_t a_SerialPortNbr)
static GatewayClientError Create(uint16_t a_ReferenceNbr, uint16_t a_ErrorCode)
static HdlcdClientConnected Create(uint16_t a_SerialPortNbr)
static std::shared_ptr< HdlcdClientCreate > CreateDeserializedFrame()
void GatewayClientError(uint16_t a_ReferenceNbr, E_GATEWAY_CLIENT_ERROR a_ErrorCode)
static HdlcdClientError Create(uint16_t a_SerialPortNbr, uint16_t a_ErrorCode)
void HdlcdClientError(uint16_t a_SerialPortNbr, E_HDLCD_CLIENT_ERROR a_ErrorCode)
static std::shared_ptr< HdlcdClientCleanup > CreateDeserializedFrame()
static std::shared_ptr< HdlcdClientDestroy > CreateDeserializedFrame()
ConfigServer(boost::asio::io_service &a_IOService, boost::asio::ip::tcp::tcp::socket &a_TcpSocket)
static std::shared_ptr< HdlcdClientResume > CreateDeserializedFrame()
static HdlcdClientNewStatus Create(uint16_t a_SerialPortNbr, bool a_bIsResumed, bool a_bIsAlive)
static HdlcdClientCreated Create(uint16_t a_SerialPortNbr)
static std::shared_ptr< GatewayClientDestroy > CreateDeserializedFrame()
static std::shared_ptr< HdlcdClientSuspend > CreateDeserializedFrame()