]> git.mxchange.org Git - flightgear.git/blob - src/Network/multiplay.cxx
Working at unraveling and breaking dependencies inside of src/Model.
[flightgear.git] / src / Network / multiplay.cxx
1 // multiplay.cxx -- protocol object for multiplay in Flightgear
2 //
3 // Written by Diarmuid Tyson, started February 2003.
4 // diarmuid.tyson@airservicesaustralia.com
5 //
6 // Copyright (C) 2003  Airservices Australia
7 //
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 //
22
23
24 #include <simgear/compiler.h>
25
26 #include STL_STRING
27
28 #include <iostream>
29
30 #include <simgear/debug/logstream.hxx>
31
32 #include <Model/placement.hxx>
33
34 #include "multiplay.hxx"
35
36 SG_USING_STD(string);
37
38
39 // These constants are provided so that the ident command can list file versions.
40 const char sFG_MULTIPLAY_BID[] = "$Id$";
41 const char sFG_MULTIPLAY_HID[] = FG_MULTIPLAY_HID;
42
43
44 /******************************************************************
45 * Name: FGMultiplay
46 * Description: Constructor.  Initialises the protocol and stores
47 * host and port information.
48 ******************************************************************/
49 FGMultiplay::FGMultiplay (const string &dir, const int rate, const string &host, const int port) {
50
51   set_hz(rate);
52
53   set_direction(dir);
54
55   if (get_direction() == SG_IO_IN) {
56
57     fgSetInt("/sim/multiplay/rxport", port);
58     fgSetString("/sim/multiplay/rxhost", host.c_str());
59
60   } else if (get_direction() == SG_IO_OUT) {
61
62     fgSetInt("/sim/multiplay/txport", port);
63     fgSetString("/sim/multiplay/txhost", host.c_str());
64
65   }
66
67 }
68
69
70 /******************************************************************
71 * Name: ~FGMultiplay
72 * Description: Destructor.
73 ******************************************************************/
74 FGMultiplay::~FGMultiplay () {
75 }
76
77
78 /******************************************************************
79 * Name: open
80 * Description: Enables the protocol.
81 ******************************************************************/
82 bool FGMultiplay::open() {
83
84     if ( is_enabled() ) {
85         SG_LOG( SG_IO, SG_ALERT, "This shouldn't happen, but the channel "
86                 << "is already in use, ignoring" );
87         return false;
88     }
89
90     set_enabled(true);
91
92     return is_enabled();
93 }
94
95
96 /******************************************************************
97 * Name: process
98 * Description: Prompts the multiplayer mgr to either send
99 * or receive data over the network
100 ******************************************************************/
101 bool FGMultiplay::process() {
102
103   if (get_direction() == SG_IO_IN) {
104
105     globals->get_multiplayer_rx_mgr()->ProcessData();
106
107   } else if (get_direction() == SG_IO_OUT) {
108
109     globals->get_multiplayer_tx_mgr()->
110     SendMyPosition(globals->get_aircraft_model()->get3DModel()->get_POS());
111
112   }
113
114     return true;
115 }
116
117
118 /******************************************************************
119 * Name: close
120 * Description:  Closes the multiplayer mgrs to stop any further
121 * network processing
122 ******************************************************************/
123 bool FGMultiplay::close() {
124
125   if (get_direction() == SG_IO_IN) {
126
127     globals->get_multiplayer_rx_mgr()->Close();
128
129   } else if (get_direction() == SG_IO_OUT) {
130
131     globals->get_multiplayer_tx_mgr()->Close();
132
133   }
134
135     return true;
136 }
137