X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fnative.cxx;h=48edaf11566d4d81ccb1d697598ad8090190b4e9;hb=206053722eb59b31ed2fb182044f84bac0058f8a;hp=0057040537e30b8450a46e80afc373b3fc60efc5;hpb=52ac173257bf9cc780f0faee5049314442083140;p=flightgear.git diff --git a/src/Network/native.cxx b/src/Network/native.cxx index 005704053..48edaf115 100644 --- a/src/Network/native.cxx +++ b/src/Network/native.cxx @@ -25,10 +25,12 @@ #endif #include -#include + #include "native.hxx" +#include
+#include #include FGNative::FGNative() { @@ -58,40 +60,21 @@ bool FGNative::open() { return true; } -/** - * The design of FGNative requires direct, memcpy access to FGInterface, - * unfortunately. Since this is the only remaining place that does, the - * extern lives here, rather than a header file. - * - */ -extern FGInterface* evil_global_fdm_state; - // process work for this port -bool FGNative::process() { +bool FGNative::process() +{ + FDMShell* fdm = static_cast(globals->get_subsystem("flight")); + FGInterface* fdmState = fdm->getInterface(); + if (!fdmState) { + return false; + } + SGIOChannel *io = get_io_channel(); - int length = sizeof(FGInterface); - if ( get_direction() == SG_IO_OUT ) { - buf = *evil_global_fdm_state; - if ( ! io->write( (char *)(& buf), length ) ) { - SG_LOG( SG_IO, SG_ALERT, "Error writing data." ); - return false; - } - } else if ( get_direction() == SG_IO_IN ) { - if ( io->get_type() == sgFileType ) { - if ( io->read( (char *)(& buf), length ) == length ) { - SG_LOG( SG_IO, SG_DEBUG, "Success reading data." ); - *evil_global_fdm_state = buf; - } - } else { - while ( io->read( (char *)(& buf), length ) == length ) { - SG_LOG( SG_IO, SG_DEBUG, "Success reading data." ); - *evil_global_fdm_state = buf; - } - } + return fdmState->writeState(io); + } else { + return fdmState->readState(io); } - - return true; }