1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Header: FGOutputSocket.h
4 Author: Bertrand Coconnier
7 ------------- Copyright (C) 2011 Bertrand Coconnier -------------
9 This program is free software; you can redistribute it and/or modify it under
10 the terms of the GNU Lesser General Public License as published by the Free Software
11 Foundation; either version 2 of the License, or (at your option) any later
14 This program is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
19 You should have received a copy of the GNU Lesser General Public License along with
20 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21 Place - Suite 330, Boston, MA 02111-1307, USA.
23 Further information about the GNU Lesser General Public License can also be found on
24 the world wide web at http://www.gnu.org.
27 --------------------------------------------------------------------------------
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34 #ifndef FGOUTPUTSOCKET_H
35 #define FGOUTPUTSOCKET_H
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 #include "FGOutputType.h"
42 #include "input_output/net_fdm.hxx"
43 #include "input_output/FGfdmSocket.h"
45 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
49 #define ID_OUTPUTSOCKET "$Id: FGOutputSocket.h,v 1.3 2013/01/12 18:08:40 bcoconni Exp $"
51 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
57 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
61 /** Implements the output to a socket. This class outputs data to a socket
62 according to the JSBSim format. It can be inherited as a generic class that
63 provides services for socket outputs. For instance FGOutputFG inherits
64 FGOutputSocket for the socket management but outputs data with a format
65 different than FGOutputSocket.
68 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
70 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
72 class FGOutputSocket : public FGOutputType
76 FGOutputSocket(FGFDMExec* fdmex);
81 /** Overwrites the name identifier under which the output will be logged.
82 This method is taken into account if it is called before
83 FGFDMExec::RunIC() otherwise it is ignored until the next call to
85 @param name new name in the form "hostname:port/proto"
86 hostname could be an ip, port a numerical value and
87 proto should be UDP or TCP (the default if omitted)
89 virtual void SetOutputName(const std::string& name);
91 /** Init the output directives from an XML file.
92 @param element XML Element that is pointing to the output directives
94 virtual bool Load(Element* el);
96 /** Initializes the instance. This method basically opens the socket to which
97 outputs will be directed.
98 @result true if the execution succeeded.
100 bool InitModel(void);
101 /// Generates the output.
104 /** Outputs a status thru the socket. This method issues a message prepended
105 by the string "<STATUS>" to the socket.
106 @param out_str status message
108 void SocketStatusOutput(const std::string& out_str);
111 virtual void PrintHeaders(void);
113 std::string SockName;
114 unsigned int SockPort;
115 FGfdmSocket::ProtocolType SockProtocol;
119 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%