]> git.mxchange.org Git - flightgear.git/commitdiff
If more than one packet has arrived in the mean time, process them all.
authorehofman <ehofman>
Mon, 29 Jun 2009 14:23:26 +0000 (14:23 +0000)
committerTim Moore <timoore@redhat.com>
Thu, 2 Jul 2009 06:59:16 +0000 (08:59 +0200)
src/Network/generic.cxx

index e2651d06e8fd2208e17d5946beb696f11e1bb47d..74a7090a0da2f53875b392e687f7eba1b65f7eec 100644 (file)
@@ -446,32 +446,41 @@ bool FGGeneric::process() {
             goto error_out;
         }
     } else if ( get_direction() == SG_IO_IN ) {
-        if (!binary_mode) {
-            if ( (length = io->readline( buf, FG_MAX_MSG_SIZE )) > 0 ) {
-                parse_message();
+        if ( io->get_type() == sgFileType ) {
+            if (!binary_mode) {
+                length = io->readline( buf, FG_MAX_MSG_SIZE );
+                if ( length > 0 ) {
+                    parse_message();
+                } else {
+                    SG_LOG( SG_IO, SG_ALERT, "Error reading data." );
+                    return false;
+                }
             } else {
-                SG_LOG( SG_IO, SG_ALERT, "Error reading data." );
-                return false;
-            }
-        } else {
-            if ( (length = io->read( buf, binary_record_length )) > 0 ) {
-                if (length != binary_record_length) {
+                length = io->read( buf, binary_record_length );
+                if ( length == binary_record_length ) {
+                    parse_message();
+                } else {
                     SG_LOG( SG_IO, SG_ALERT,
                             "Generic protocol: Received binary "
                             "record of unexpected size, expected: "
-                            << binary_record_length << "received: "
+                            << binary_record_length << " but received: "
                             << length);
-                } else {
-                    SG_LOG( SG_IO, SG_DEBUG,
-                           "Generic protocol: received record of " << length <<
-                           " bytes.");
-                    parse_message();
                 }
-            } else {
-                SG_LOG( SG_IO, SG_INFO,
-                        "Generic protocol: Error reading data." );
-                return false;
             }
+        } else {
+            do {
+                if (!binary_mode) {
+                    length = io->readline( buf, FG_MAX_MSG_SIZE );
+                    if ( length > 0 ) {
+                        parse_message();
+                    }
+                } else {
+                    length = io->read( buf, binary_record_length );
+                    if ( length == binary_record_length ) {
+                        parse_message();
+                    }
+                }
+            } while ( length == binary_record_length );
         }
     }
     return true;