Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/src/libraries/network/Host.cc @ 10480

Last change on this file since 10480 was 10380, checked in by landauf, 10 years ago

registered missing classes.
WorldEntityCollisionShape is the only class which was really missing, all other classes are singletons or part of the framework.

  • Property svn:eol-style set to native
File size: 4.5 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
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
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Oliver Scheuss <scheusso [at] ee.ethz.ch>, (C) 2008
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "Host.h"
30
31#include <cassert>
32#include <string>
33
34#include "core/CoreIncludes.h"
35#include "core/object/ObjectList.h"
36#include "core/command/ConsoleCommandIncludes.h"
37#include "NetworkChatListener.h"
38
39namespace orxonox {
40
41  static const std::string __CC_printRTT_group = "Stats";
42  static const std::string __CC_printRTT_name = "printRTT";
43
44  SetConsoleCommand(__CC_printRTT_group, __CC_printRTT_name, &Host::printRTT);
45
46  // Host*               Host::instance_=0;
47  uint32_t            Host::clientID_s=0;
48//   uint32_t            Host::shipID_s=-1;
49  std::vector<Host*>  Host::instances_s;
50
51  /**
52  * @brief Constructor: assures that only one reference will be created and sets the pointer
53  */
54  Host::Host()
55  {
56  //   assert(instance_==0);
57    instances_s.push_back(this);
58    ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(this);
59    this->bIsActive_ = false;
60  }
61
62
63  /**
64  * @brief Destructor: resets the instance pointer to 0
65  */
66  Host::~Host()
67  {
68    assert( std::find( instances_s.begin(), instances_s.end(), this )!=instances_s.end() );
69    instances_s.erase(std::find( instances_s.begin(), instances_s.end(), this ));
70    ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(0);
71  }
72
73  /**
74  * This function is used to add an enetpacket to be sent to another peer
75  * @param packet Packet to be added
76  * @param clientID ID of the client the packet should be sent to
77  * @param channelID ID of the channel.
78  * @return success?
79  */
80  void Host::addPacket(ENetPacket *packet, int clientID, uint8_t channelID)
81  {
82    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
83    {
84      if( (*it)->isActive() )
85      {
86        (*it)->queuePacket(packet, clientID, channelID);
87      }
88    }
89  }
90
91  /**
92   * @brief Sends a chat message through the network.
93   * @param message message to be sent
94   * @param sourceID the ID of the sender
95   * @param targetID the ID of the receiver
96   */
97  void Host::sendChat(const std::string& message, unsigned int sourceID, unsigned int targetID)
98  {
99    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
100      if( (*it)->isActive() )
101        (*it)->doSendChat(message, sourceID, targetID);
102  }
103
104  /**
105   * @brief Gets called if a packet::Chat packet is received. Passes the message to the listeners.
106   */
107  void Host::doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID)
108  {
109    for (ObjectList<NetworkChatListener>::iterator it = ObjectList<NetworkChatListener>::begin(); it != ObjectList<NetworkChatListener>::end(); ++it)
110      it->incomingChat(message, sourceID);
111  }
112
113
114  bool Host::isServer()
115  {
116    for (std::vector<Host*>::iterator it=instances_s.begin(); it!=instances_s.end(); ++it )
117    {
118      if( (*it)->isActive() )
119      {
120        if( (*it)->isServer_() )
121          return true;
122      }
123    }
124    return false;
125  }
126
127  Host* Host::getActiveInstance()
128  {
129    std::vector<Host*>::iterator it = Host::instances_s.begin();
130    while( it != Host::instances_s.end() )
131    {
132      if( (*it)->isActive() )
133        return *it;
134      else
135        ++it;
136    }
137    return 0;
138  }
139
140
141  //////////////////////////////////////////////////////////////////////////
142  // NetworkChatListener                                                  //
143  //////////////////////////////////////////////////////////////////////////
144
145  RegisterAbstractClass(NetworkChatListener).inheritsFrom<Listable>();
146
147  NetworkChatListener::NetworkChatListener()
148  {
149      RegisterObject(NetworkChatListener);
150  }
151
152}//namespace orxonox
Note: See TracBrowser for help on using the repository browser.