mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. 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.h
*/

#ifndef _CLUSTER_H
#include "string.h"
#include "socket.h"
#include "llist.h"

class Host 
{
	protected:
		String name;
		String passwd;
		String host;
		int port1;
		int port2;
		int tries;
		int maxtries; // how many times should we try connection
		timeval last; // last connect attempt
		timeval timeout; // time in between tries
		Socket * socket; // set if connected otherwise null

	public:
		Host()
		:	port1(0), port2(0), tries(0), maxtries(0), socket(0)
		{
		}

		Host( char *n, char *pw, char *h, int p1, int p2, int t, int secs )
		:	port1(p1), port2(p2), tries(t), socket(0)
		{
			name = n;
			passwd = pw;
			host = h;
			timeout.tv_sec = secs;
			timeout.tv_usec = 0;
		}

		const String & getName() { return name; }
		const String & getPasswd() { return passwd; }
		const String & getHost() { return host; }
		int getPlayerPort() { return port1; }
		int getCommPort() { return port2; }
		void setName( const String & x ) { name = x; }
		void setPasswd( const String & x ) { passwd = x; }
		void setHost( const String & x ) { host = x; }
		void setPlayerPort( int x ) { port1 = x; }
		void setCommPort( int x ) { port2 = x; }

		int connect();
		Socket * connected() { return socket; }
		int write( const char * str );
		int read( char * str, int bytes );
};


inline int Host::read( char * str, int max_read )
{
	if( socket )
		return socket->read( str, max_read );
	return -1;
}


inline int Host::write( const char * str )
{
	if( socket )
		return socket->write( str );
	return -1;
}


extern LList< Host > cluster;
extern Host local;
Host * getHostCluster( const String & );
int loadHostsFile();

#endif