Changeset 7630 for code/branches/masterserver/src/libraries/network
- Timestamp:
- Nov 10, 2010, 2:19:44 PM (14 years ago)
- Location:
- code/branches/masterserver/src/libraries/network
- Files:
-
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/masterserver/src/libraries/network/WANDiscovery.cc
r7629 r7630 27 27 */ 28 28 29 #include " LANDiscovery.h"29 #include "WANDiscovery.h" 30 30 31 31 #include <enet/enet.h> … … 38 38 namespace orxonox 39 39 { 40 ManageScopedSingleton( LANDiscovery, ScopeID::Root, true);40 ManageScopedSingleton(WANDiscovery, ScopeID::Root, true); 41 41 42 LANDiscovery::LANDiscovery()42 WANDiscovery::WANDiscovery() 43 43 { 44 this->host_ = enet_host_create(NULL, 10, 0, 0, 0 );45 if ( this->host_ == NULL )46 COUT(1) << "LANDiscovery: host_ == NULL" << std::endl;47 44 } 48 45 49 LANDiscovery::~LANDiscovery()46 WANDiscovery::~WANDiscovery() 50 47 { 51 enet_host_destroy(this->host_);52 48 } 53 49 54 void LANDiscovery::discover()50 void WANDiscovery::discover() 55 51 { 56 52 this->servers_.clear(); 57 ENetPeer* peer;58 ENetAddress address;59 memset(&address, 0, sizeof(ENetAddress));60 address.port = LAN_DISCOVERY_PORT;61 62 /* TODO: check for availability of each protocol */63 /* IPv4 */64 address.host = ENET_HOST_BROADCAST;65 peer = enet_host_connect(this->host_, &address, 0, 0);66 if (peer == NULL)67 COUT(1) << "Error: Could not send LAN discovery to IPv4 Broadcast." << std::endl;68 69 /* IPv6 */70 enet_address_set_host(&address, "ff02::1"); // TODO: use a multicast group71 peer = enet_host_connect(this->host_, &address, 0, 0);72 if (peer == NULL)73 COUT(1) << "Error: Could not send LAN discovery to IPv6 Multicast." << std::endl;74 75 ENetEvent event;76 while( enet_host_service(this->host_, &event, 1000 ) )77 {78 switch( event.type )79 {80 case ENET_EVENT_TYPE_CONNECT:81 {82 COUT(4) << "Received LAN discovery connect from server " << event.peer->host->receivedAddress << std::endl;83 ENetPacket* packet = enet_packet_create(LAN_DISCOVERY_MESSAGE, strlen(LAN_DISCOVERY_MESSAGE)+1, ENET_PACKET_FLAG_RELIABLE);84 enet_peer_send(event.peer, 0, packet);85 break;86 }87 case ENET_EVENT_TYPE_RECEIVE:88 {89 packet::ServerInformation info(&event);90 COUT(3) << "Received LAN discovery server information; Name: " << info.getServerName() << ", Address: " << info.getServerIP() << ", RTT: " << info.getServerRTT() << endl;91 std::vector<packet::ServerInformation>::iterator it;92 for( it=this->servers_.begin(); it!=this->servers_.end(); ++it )93 {94 if( (*it).getServerIP() == info.getServerIP() )95 break;96 }97 if( it==this->servers_.end() )98 this->servers_.push_back(info);99 }100 // enet_address_get_host_ip(&event.peer->address, buffer, buflen );101 // serverIPs.push_back(std::string(buffer));102 break;103 default:104 break;105 }106 }107 53 } 108 54 109 std::string LANDiscovery::getServerListItemName(unsigned int index)55 std::string WANDiscovery::getServerListItemName(unsigned int index) 110 56 { 111 if( index >= this->servers_.size() ) 112 return BLANKSTRING; 113 else 114 return this->servers_[index].getServerName(); 57 115 58 } 116 59 117 std::string LANDiscovery::getServerListItemIP(unsigned int index)60 std::string WANDiscovery::getServerListItemIP(unsigned int index) 118 61 { 119 if( index >= this->servers_.size() ) 120 return BLANKSTRING; 121 else 122 return this->servers_[index].getServerIP(); 62 123 63 } 124 64 -
code/branches/masterserver/src/libraries/network/WANDiscovery.h
r7629 r7630 21 21 * 22 22 * Author: 23 * Fabian 'x3n' Landau 23 * Fabian 'x3n' Landau (original) 24 24 * Co-authors: 25 * ...25 * Sandro 'smerkli' Merkli (copied and adapted to WAN) 26 26 * 27 27 */ 28 28 29 #ifndef LANDISCOVERY_H30 #define LANDISCOVERY_H29 #ifndef WANDISCOVERY_H 30 #define WANDISCOVERY_H 31 31 32 32 #include "NetworkPrereqs.h" … … 40 40 { 41 41 42 class _NetworkExport LANDiscovery42 class _NetworkExport WANDiscovery 43 43 // tolua_end 44 : public Singleton< LANDiscovery>44 : public Singleton<WANDiscovery> 45 45 { // tolua_export 46 friend class Singleton< LANDiscovery>;46 friend class Singleton<WANDiscovery>; 47 47 public: 48 LANDiscovery();49 ~ LANDiscovery();48 WANDiscovery(); 49 ~WANDiscovery(); 50 50 void discover(); // tolua_export 51 51 std::string getServerListItemName( unsigned int index ); // tolua_export 52 52 std::string getServerListItemIP( unsigned int index ); // tolua_export 53 static LANDiscovery& getInstance(){ return Singleton<LANDiscovery>::getInstance(); } // tolua_export53 static WANDiscovery& getInstance(){ return Singleton<WANDiscovery>::getInstance(); } // tolua_export 54 54 55 55 private: 56 static LANDiscovery* singletonPtr_s;56 static WANDiscovery* singletonPtr_s; 57 57 ENetHost* host_; 58 58 std::vector<packet::ServerInformation> servers_; … … 61 61 } // tolua_export 62 62 63 #endif // LANDISCOVERY_H63 #endif // WANDISCOVERY_H
Note: See TracChangeset
for help on using the changeset viewer.