@@ -33,6 +33,11 @@ static int wsaStartCount = 0;
3333
3434
3535
36+ /* ********************************************************************************/
37+ /* */
38+ /* Init / deinit */
39+ /* */
40+ /* ********************************************************************************/
3641dds::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+ /* ********************************************************************************/
126140SyncQueueReader<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+ /* ********************************************************************************/
257181void
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+ /* ********************************************************************************/
403338bool
404339 dds::net::connector::_internal::
405340 NetworkClient::createSocket ()
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