]> git.mxchange.org Git - flightgear.git/blobdiff - src/MultiPlayer/multiplaymgr.hxx
Update Mac configure script for new ALUT scheme; support --with-alut-framework.
[flightgear.git] / src / MultiPlayer / multiplaymgr.hxx
index 857557cfd1b7ec7ce9a09ea4ceb172ae8faa66f3..96e56f2428a29f8e56f3313650be78b978029331 100644 (file)
@@ -20,7 +20,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 // $Id$
 //  
 
 #define MULTIPLAYTXMGR_HID "$Id$"
 
-#include "mpplayer.hxx"
 #include "mpmessages.hxx"
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include STL_STRING
-SG_USING_STD(string);
+#include <string>
+using std::string;
 #include <vector>
-SG_USING_STD(vector);
+using std::vector;
 
 #include <simgear/compiler.h>
 #include <simgear/props/props.hxx>
 #include <plib/netSocket.h>
 #include <Main/globals.hxx>
 
-// Maximum number of players that can exist at any time
-// FIXME: use a list<mplayer> instead
-#define MAX_PLAYERS 10
+#include <AIModel/AIMultiplayer.hxx>
+
+struct FGExternalMotionInfo;
 
 class FGMultiplayMgr 
 {
 public:
-    FGMultiplayMgr();
-    ~FGMultiplayMgr();
-    bool init(void);
-    void Close(void);
-    // transmitter
-    void SendMyPosition (const double lat, const double lon, const double alt,
-                         const double heading, const double roll, const double pitch,
-                         const double speedN, const double speedE, const double speedD,
-                         const double left_aileron, const double right_aileron, const double elevator, const double rudder,
-                         //const double rpms[6],
-                         const double rateH, const double rateR, const double rateP,
-                                                const double accN, const double accE, const double accD
-                                                );
-    void SendPropMessage (const string &property, SGPropertyNode::Type type, double value);
-    void SendTextMessage (const string &sMsgText) const;
-    // receiver
-    void ProcessData(void);
-    void ProcessPosMsg ( const char *Msg, netAddress & SenderAddress );
-    void ProcessChatMsg ( const char *Msg, netAddress & SenderAddress );
-    void ProcessPropMsg ( const char *Msg, netAddress & SenderAddress );
-    void Update(void);
 
-       /* getters/setters */
-       bool getSendAllProps();
-       void setSendAllProps(bool s);
-       bool send_all_props;
+  struct IdPropertyList {
+    unsigned id;
+    const char* name;
+    simgear::props::Type type;
+  };
+  static const IdPropertyList sIdPropertyList[];
+  static const unsigned numProperties;
 
+  static const IdPropertyList* findProperty(unsigned id);
+  
+  FGMultiplayMgr();
+  ~FGMultiplayMgr();
+  bool init(void);
+  void Close(void);
+  // transmitter
+  void SendMyPosition(const FGExternalMotionData& motionInfo);
+  void SendTextMessage(const string &sMsgText);
+  // receiver
+  void Update(void);
+  
 private:
-    typedef vector<MPPlayer*>           t_MPClientList;
-    typedef t_MPClientList::iterator    t_MPClientListIterator;
-    MPPlayer*       m_LocalPlayer;
-    netSocket*      m_DataSocket;
-    netAddress      m_Server;
-    bool            m_HaveServer;
-    bool            m_Initialised;
-    t_MPClientList  m_MPClientList;
-    string          m_RxAddress;
-    int             m_RxPort;
-    string          m_Callsign;
+  union MsgBuf;
+  FGAIMultiplayer* addMultiplayer(const std::string& callsign,
+                                  const std::string& modelName);
+  FGAIMultiplayer* getMultiplayer(const std::string& callsign);
+  void FillMsgHdr(T_MsgHdr *MsgHdr, int iMsgId, unsigned _len = 0u);
+  void ProcessPosMsg(const MsgBuf& Msg, const netAddress& SenderAddress,
+                     long stamp);
+  void ProcessChatMsg(const MsgBuf& Msg, const netAddress& SenderAddress);
+
+  /// maps from the callsign string to the FGAIMultiplayer
+  typedef std::map<std::string, osg::ref_ptr<FGAIMultiplayer> > MultiPlayerMap;
+  MultiPlayerMap mMultiPlayerMap;
+
+  netSocket* mSocket;
+  netAddress mServer;
+  bool mHaveServer;
+  bool mInitialised;
+  string mCallsign;
 };
 
 #endif