Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands3/src/libraries/network/Host.cc @ 7621

Last change on this file since 7621 was 7236, checked in by landauf, 14 years ago

replaced the temporary names of all ConsoleCommand related classes and functions by their real names

  • 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/ObjectList.h"
35#include "core/command/ConsoleCommand.h"
36#include "ChatListener.h"
37
38namespace orxonox {
39
40  static const std::string __CC_printRTT_name = "printRTT";
41
42  SetConsoleCommand("chat", &Host::Chat);
43  SetConsoleCommand(__CC_printRTT_name, &Host::printRTT);
44
45  // Host*               Host::instance_=0;
46  uint32_t            Host::clientID_s=0;
47  uint32_t            Host::shipID_s=-1;
48  std::vector<Host*>  Host::instances_s;
49
50  /**
51  * @brief Constructor: assures that only one reference will be created and sets the pointer
52  */
53  Host::Host()
54  {
55  //   assert(instance_==0);
56    instances_s.push_back(this);
57    ModifyConsoleCommand(__CC_printRTT_name).setObject(this);
58    this->bIsActive_ = false;
59  }
60
61
62  /**
63  * @brief Destructor: resets the instance pointer to 0
64  */
65  Host::~Host()
66  {
67    assert( std::find( instances_s.begin(), instances_s.end(), this )!=instances_s.end() );
68    instances_s.erase(std::find( instances_s.begin(), instances_s.end(), this ));
69    ModifyConsoleCommand(__CC_printRTT_name).setObject(0);
70  }
71
72  /**
73  * This function is used to add an enetpacket to be sent to another peer
74  * @param packet Packet to be added
75  * @param clientID ID of the client the packet should be sent to
76  * @return success?
77  */
78  bool Host::addPacket(ENetPacket *packet, int clientID)
79  {
80    bool result = true;
81    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
82    {
83      if( (*it)->isActive() )
84      {
85        if( !(*it)->queuePacket(packet, clientID) )
86          result = false;
87      }
88    }
89    return result;
90  }
91
92  void Host::Chat(const std::string& message)
93  {
94    if(instances_s.size()==0)
95    {
96      for (ObjectList<ChatListener>::iterator it = ObjectList<ChatListener>::begin(); it != ObjectList<ChatListener>::end(); ++it)
97        it->incomingChat(message, 0);
98//      return true;
99    }
100    else
101    {
102      bool result = true;
103      for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
104      {
105        if( (*it)->isActive() )
106        {
107          if( !(*it)->chat(message) )
108            result = false;
109        }
110      }
111//      return result;
112    }
113  }
114
115  bool Host::Broadcast(const std::string& message)
116  {
117    if(instances_s.size()==0)
118    {
119      for (ObjectList<ChatListener>::iterator it = ObjectList<ChatListener>::begin(); it != ObjectList<ChatListener>::end(); ++it)
120        it->incomingChat(message, CLIENTID_UNKNOWN);
121      return true;
122    }
123    else
124    {
125      bool result = true;
126      for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
127      {
128        if( (*it)->isActive() )
129        {
130          if( !(*it)->broadcast(message) )
131            result = false;
132        }
133      }
134      return result;
135    }
136  }
137
138  bool Host::incomingChat(const std::string& message, unsigned int playerID)
139  {
140    for (ObjectList<ChatListener>::iterator it = ObjectList<ChatListener>::begin(); it != ObjectList<ChatListener>::end(); ++it)
141      it->incomingChat(message, playerID);
142
143    bool result = true;
144    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
145    {
146      if( (*it)->isActive() )
147      {
148        if( !(*it)->processChat(message, playerID) )
149          result = false;
150      }
151    }
152    return result;
153  }
154
155  bool Host::isServer()
156  {
157    for (std::vector<Host*>::iterator it=instances_s.begin(); it!=instances_s.end(); ++it )
158    {
159      if( (*it)->isServer_() )
160        return true;
161    }
162    return false;
163  }
164
165}//namespace orxonox
Note: See TracBrowser for help on using the repository browser.