X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fprotocol.cxx;h=be4883ecfd09db29b692ed75f6d37c8abf17eaf2;hb=7d3448294bc7486af3f4c1f0ff5c8493b03ffc90;hp=2954f04b659e3691e0d93c0e67cf83f00d582ff9;hpb=1fd92702678bcf4a32f888fe3014c684e0235870;p=flightgear.git diff --git a/src/Network/protocol.cxx b/src/Network/protocol.cxx index 2954f04b6..be4883ecf 100644 --- a/src/Network/protocol.cxx +++ b/src/Network/protocol.cxx @@ -21,7 +21,8 @@ // $Id$ -#include +#include +#include #include "protocol.hxx" @@ -38,39 +39,70 @@ FGProtocol::~FGProtocol() { } -// dummy open routine +// standard I/O channel open routine bool FGProtocol::open() { - FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::open()" ); - enabled = false; - return false; + if ( is_enabled() ) { + SG_LOG( SG_IO, SG_ALERT, "This shouldn't happen, but the channel " + << "is already in use, ignoring" ); + return false; + } + + SGIOChannel *io = get_io_channel(); + + if ( ! io->open( get_direction() ) ) { + SG_LOG( SG_IO, SG_ALERT, "Error opening channel communication layer." ); + return false; + } + + set_enabled( true ); + + return true; } // dummy process routine bool FGProtocol::process() { - FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::process()" ); + SG_LOG( SG_IO, SG_INFO, "dummy FGProtocol::process()" ); return false; } // dummy close routine bool FGProtocol::close() { - FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::close()" ); + SG_LOG( SG_IO, SG_INFO, "dummy FGProtocol::close()" ); return false; } -// dummy close routine +// standard I/O channel close routine bool FGProtocol::gen_message() { - FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::gen_message()" ); - return false; + SGIOChannel *io = get_io_channel(); + + set_enabled( false ); + + if ( ! io->close() ) { + return false; + } + + return true; } // dummy close routine bool FGProtocol::parse_message() { - FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::close()" ); + SG_LOG( SG_IO, SG_INFO, "dummy FGProtocol::close()" ); return false; } +void FGProtocol::set_direction( const string& d ) { + if ( d == "in" ) { + dir = SG_IO_IN; + } else if ( d == "out" ) { + dir = SG_IO_OUT; + } else if ( d == "bi" ) { + dir = SG_IO_BI; + } else { + dir = SG_IO_NONE; + } +}