JSBSim Flight Dynamics Model  1.0 (02 March 2017)
An Open Source Flight Dynamics and Control Software Library in C++
FGfdmSocket.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 
3  Header: FGfdmSocket.h
4  Author: Jon S. Berndt
5  Date started: 11/08/99
6 
7  ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) -------------
8 
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
12  version.
13 
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
17  details.
18 
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.
22 
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.
25 
26 HISTORY
27 --------------------------------------------------------------------------------
28 11/08/99 JSB Created
29 11/08/07 HDW Added Generic Socket Send
30 
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 SENTRY
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34 
35 #ifndef FGfdmSocket_H
36 #define FGfdmSocket_H
37 
38 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 INCLUDES
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 
42 #include <string>
43 #include <sstream>
44 #include <sys/types.h>
45 #include "FGJSBBase.h"
46 
47 #if defined(_MSC_VER) || defined(__MINGW32__)
48  #include <winsock.h>
49  #include <io.h>
50 #else
51  #include <unistd.h>
52  #include <sys/socket.h>
53  #include <netinet/in.h>
54  #include <arpa/inet.h>
55  #include <netdb.h>
56  #include <errno.h>
57  #include <sys/ioctl.h>
58 #endif
59 
60 #ifdef _MSC_VER
61 # pragma comment (lib,"WSock32.lib")
62 #endif
63 
64 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 DEFINITIONS
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
67 
68 #define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.24 2016/04/17 13:13:29 bcoconni Exp $"
69 
70 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71 FORWARD DECLARATIONS
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
73 
74 namespace JSBSim {
75 
76 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77 CLASS DOCUMENTATION
78 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
79 
85 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86 CLASS DECLARATION
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
88 
89 class FGfdmSocket : public FGJSBBase
90 {
91 public:
92  FGfdmSocket(const std::string&, int);
93  FGfdmSocket(const std::string&, int, int);
94  FGfdmSocket(int, int, int);
95  FGfdmSocket(int);
96  ~FGfdmSocket();
97  void Send(void);
98  void Send(const char *data, int length);
99 
100  std::string Receive(void);
101  int Reply(const std::string& text);
102  void Append(const std::string& s) {Append(s.c_str());}
103  void Append(const char*);
104  void Append(double);
105  void Append(long);
106  void Clear(void);
107  void Clear(const std::string& s);
108  void Close(void);
109  bool GetConnectStatus(void) {return connected;}
110 
111  enum ProtocolType {ptUDP, ptTCP};
112  enum DirectionType {dIN, dOUT};
113 
114 private:
115  int sckt;
116  int sckt_in;
117  DirectionType Direction;
118  ProtocolType Protocol;
119  struct sockaddr_in scktName;
120  struct hostent *host;
121  std::ostringstream buffer;
122  bool connected;
123  void Debug(int from);
124 };
125 }
126 #endif
JSBSim Base class.
Definition: FGJSBBase.h:80
Encapsulates an object that enables JSBSim to communicate via socket (input and/or output)...
Definition: FGfdmSocket.h:89