Skip to content

Commit eafb75d

Browse files
committed
rearranging, commenting and checking disconnection upon sending as well
1 parent ffda701 commit eafb75d

File tree

1 file changed

+137
-96
lines changed

1 file changed

+137
-96
lines changed

src/dds.net-connector-cpp.lib/connector/src/internal/src/network_client.cpp

Lines changed: 137 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ static int wsaStartCount = 0;
3333

3434

3535

36+
/*********************************************************************************/
37+
/* */
38+
/* Init / deinit */
39+
/* */
40+
/*********************************************************************************/
3641
dds::net::connector::_internal::
3742
NetworkClient::NetworkClient(
3843
Logger* logger,
@@ -123,6 +128,15 @@ dds::net::connector::_internal::
123128
#endif
124129
}
125130

131+
132+
133+
/*********************************************************************************/
134+
/* */
135+
/* External interface */
136+
/* - Data queues */
137+
/* - Connection callbacks */
138+
/* */
139+
/*********************************************************************************/
126140
SyncQueueReader<PacketFromServer*>*
127141
dds::net::connector::_internal::
128142
NetworkClient::getDataQueueFromServer()
@@ -158,102 +172,12 @@ void
158172
}
159173

160174

161-
void
162-
dds::net::connector::_internal::
163-
ioThreadFunc(NetworkClient* net)
164-
{
165-
net->isConnected = false;
166-
167-
//-
168-
//- The thread functionality
169-
//-
170-
while (net->isIOThreadStarted)
171-
{
172-
if (net->isConnected == false)
173-
{
174-
net->connectWithServer();
175-
176-
if (net->isConnected == false)
177-
{
178-
sleep_msec(500);
179-
}
180-
}
181-
else
182-
{
183-
bool doneAnythingInIteration = false;
184-
185-
try
186-
{
187-
//-
188-
//- Receiving data
189-
//-
190-
191-
if (net->isDataAvailable())
192-
{
193-
doneAnythingInIteration = true;
194-
195-
BufferAddress bytes = net->bufferManager->get4k();
196-
197-
int totalReceived = recv(net->socketFileDescriptor, bytes, 4096, 0);
198-
199-
if (totalReceived <= 0)
200-
{
201-
net->isConnected = false;
202-
net->closeSocket();
203-
204-
if (net->onDisconnected != nullptr)
205-
{
206-
net->onDisconnected(net->onDisconnectedObj);
207-
}
208-
209-
net->bufferManager->free(bytes);
210-
211-
throw std::exception();
212-
}
213-
else
214-
{
215-
net->dataFromServerQueue->enqueue(new PacketFromServer(bytes, totalReceived));
216-
}
217-
}
218-
219-
//-
220-
//- Transmitting data
221-
//-
222-
223-
while (net->dataToServerQueue->canDequeue())
224-
{
225-
doneAnythingInIteration = true;
226-
227-
PacketToServer* packet = net->dataToServerQueue->dequeue();
228-
229-
send(net->socketFileDescriptor, packet->buffer, packet->size, 0);
230-
231-
net->bufferManager->free(packet->buffer);
232-
delete(packet);
233-
}
234-
}
235-
catch (std::exception&)
236-
{
237-
net->isConnected = false;
238-
net->closeSocket();
239-
240-
if (net->onDisconnected != nullptr)
241-
{
242-
net->onDisconnected(net->onDisconnectedObj);
243-
}
244-
}
245-
246-
if (!doneAnythingInIteration)
247-
{
248-
sleep_msec(10);
249-
}
250-
}
251-
} // while (isIOThreadStarted)
252-
253-
net->closeSocket();
254-
}
255-
256175

176+
/*********************************************************************************/
177+
/* */
178+
/* Starting / stopping the connectivity handling routine */
179+
/* */
180+
/*********************************************************************************/
257181
void
258182
dds::net::connector::_internal::
259183
NetworkClient::connect(
@@ -400,6 +324,17 @@ void
400324
dataLock.unlock();
401325
}
402326

327+
328+
329+
/*********************************************************************************/
330+
/* */
331+
/* Internal */
332+
/* - Creating socket */
333+
/* - Closing socket */
334+
/* - Connecting with the server */
335+
/* - Checking data availability */
336+
/* */
337+
/*********************************************************************************/
403338
bool
404339
dds::net::connector::_internal::
405340
NetworkClient::createSocket()
@@ -473,7 +408,7 @@ void
473408
{
474409
unableToConnectMessageFlag = true;
475410

476-
std::string errorMessage = "Unable to connect to ";
411+
std::string errorMessage = "Unable to connect with ";
477412
errorMessage += ipv4;
478413
errorMessage += ":";
479414
errorMessage += std::to_string(tcpPort);
@@ -583,3 +518,109 @@ bool
583518
#error "Cannot check packet availability on selected platform"
584519
#endif
585520
}
521+
522+
523+
524+
/*********************************************************************************/
525+
/* */
526+
/* Internal */
527+
/* - Working thread */
528+
/* */
529+
/*********************************************************************************/
530+
void
531+
dds::net::connector::_internal::
532+
ioThreadFunc(NetworkClient* net)
533+
{
534+
net->isConnected = false;
535+
536+
while (net->isIOThreadStarted)
537+
{
538+
if (net->isConnected == false)
539+
{
540+
net->connectWithServer();
541+
542+
// Wait when not connected upon attempt
543+
if (net->isConnected == false)
544+
{
545+
sleep_msec(500);
546+
}
547+
}
548+
else
549+
{
550+
bool doneAnythingInIteration = false;
551+
552+
try
553+
{
554+
//-
555+
//- Receiving data
556+
//-
557+
558+
if (net->isDataAvailable())
559+
{
560+
doneAnythingInIteration = true;
561+
562+
BufferAddress bytes = net->bufferManager->get4k();
563+
564+
int totalReceived = recv(net->socketFileDescriptor, bytes, 4096, 0);
565+
566+
if (totalReceived <= 0)
567+
{
568+
// Disconnected from the server
569+
570+
net->bufferManager->free(bytes);
571+
572+
throw std::exception();
573+
}
574+
else
575+
{
576+
// Data is received from the server
577+
578+
net->dataFromServerQueue->enqueue(new PacketFromServer(bytes, totalReceived));
579+
}
580+
}
581+
582+
//-
583+
//- Transmitting data
584+
//-
585+
586+
while (net->dataToServerQueue->canDequeue())
587+
{
588+
doneAnythingInIteration = true;
589+
590+
PacketToServer* packet = net->dataToServerQueue->dequeue();
591+
592+
int totalSent = send(net->socketFileDescriptor, packet->buffer, packet->size, 0);
593+
594+
if (totalSent <= 0)
595+
{
596+
// Disconnected from the server
597+
throw std::exception();
598+
}
599+
else
600+
{
601+
net->bufferManager->free(packet->buffer);
602+
delete(packet);
603+
}
604+
}
605+
}
606+
catch (std::exception&)
607+
{
608+
net->isConnected = false;
609+
net->closeSocket();
610+
611+
if (net->onDisconnected != nullptr)
612+
{
613+
net->onDisconnected(net->onDisconnectedObj);
614+
}
615+
}
616+
617+
if (!doneAnythingInIteration)
618+
{
619+
sleep_msec(10);
620+
}
621+
}
622+
} // while (isIOThreadStarted)
623+
624+
net->closeSocket();
625+
}
626+

0 commit comments

Comments
 (0)