/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@hom.net MUD++ development mailing list mudpp@van.ml.org ------------------------------------------------------------------------------ cluster.cc */ #include "config.h" #include "mmp.h" #include "cluster.h" #include "io.h" LList< Host > cluster; Host local; Host master; int Host::connect() { mm_packet packet; socket = new Socket( SOCK_DGRAM, (const char*)host, port1 ); if( socket->error() ) { delete socket; socket = 0; tries++; gettimeofday( &last, 0 ); return -1; } strcpy( packet.cmd, CMD_HELLO ); socket->send( (char*)&packet, sizeof( packet ) ); return 0; } int loadHostsFile() { bool localFound = false; char type[ 256 ]; char host[ 256 ]; char name[ 256 ]; char pass[ 256 ]; int port1; int port2; int count = 0; Host * node; InputFile inf( "../etc/HOSTS" ); if( !inf ) return -1; while( !inf.eof() ) { // Skip comment lines if( *inf.getword( type ) == '#' ) { inf.skipline(); continue; } if( inf.eof() ) { Cout << "Registered " << count << " hosts.\n"; if( !localFound ) { Cout << "'local' entry not found in HOSTS file.\n"; exit(0); } return 0; } inf.getword( host ); inf.getword( name ); inf.getword( pass ); port1 = inf.getnum(); port2 = inf.getnum(); if( !strcmp( type, "local" ) ) { localFound = true; local.setName( name ); local.setPasswd( pass ); local.setHost( host ); local.setPlayerPort( port1 ); local.setCommPort( port2 ); continue; } node = new Host( name, pass, host, port1, port2, 0, 0 ); cluster.addTop( node ); Cout << "Registered node " << name << " at " << host << endl; count++; inf.skipwhite(); } Cout << "Registered " << count << " hosts.\n"; if( !localFound ) { Cout << "'local' entry not found in HOSTS file.\n"; exit(0); } return 0; } Host * getHostCluster( const String & id ) { cluster.reset(); while( cluster.peek() ) { if( cluster.peek()->getName() == id ) return cluster.peek(); cluster.next(); } return 0; }