www.pudn.com > loseserver.rar > Serversettings.h


/* 
Copyright (C) 2004  freeplay.dk 
 
This program is free software; you can redistribute it and/or 
modify it under the terms of the GNU General Public License 
as published by the Free Software Foundation; either version 2 
of the License, or (at your option) any later version. 
 
This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
GNU General Public License for more details. 
 
You should have received a copy of the GNU General Public License 
along with this program; if not, write to the Free Software 
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
 
You may contact me for further information on admin@freeplay.dk 
*/ 
#define WIN32_LEAN_AND_MEAN 
 
// disable map warnings for std::map 
#pragma warning (disable: 4786) 
#pragma warning (disable: 4788) 
 
#include  
#include  
#include  
#include  
#include  
#include  
#include "Types.h" 
#include "Logging.h" 
 
using namespace std; 
 
struct serversettings 
{ 
	char * serverip; 
	char * maxusers; 
	char * dbip; 
	char * dbuser; 
	char * dbpass; 
	char * dbname; 
	int usersonline; 
}; 
 
class ServerSettings 
{ 
private: 
	map mss; 
	struct serversettings ss; 
	char server[200], maxusers[200] ,host[200], user[200], passwd[200], database[200], buf[200], type[200]; 
 
public: 
	//********************* 
	// Reads the network settings and store to memory for later use 
	//********************* 
	int readsettings(HWND hdwnd) 
	{ 
		int items[6] = {0, 0, 0, 0, 0, 0}; 
 
		FILE *f; 
		SetCurrentDirectory(".."); 
		if (!(f = fopen ("network.ini", "r"))) 
		{ 
			MessageBox(hdwnd, "Couldn't open 'network.ini'", "Fatal Error", MB_OK | MB_ICONERROR); 
			Log2File(TRUE, "FATAL ERROR: Couldn't open 'network.ini'.\n"); 
			exit (1); 
		} 
		 
		do 
		{ 
			fgets (buf, 199, f); 
			if (feof (f)) 
			{ 
			MessageBox(hdwnd, "[network] block not found in network.ini", "Fatal Error", MB_OK | MB_ICONERROR); 
			Log2File(TRUE, "FATAL ERROR: [network] block not found in network.ini.\n"); 
			exit (1); 
			} 
		} 
		while (strncasecmp (buf, "[network]\n", 11) != 0 && strncasecmp (buf, "[network]\r\n", 12) != 0); 
 
		while (!feof (f)) 
		{ 
		#ifdef WIN32 
			if (fscanf (f, "%[^=]=%[^\n]\n", type, buf) == 2) 
			#else	 
				if (fscanf (f, "%[^=]=%[^\r\n]\n", type, buf) == 2) 
				#endif 
				{ 
					if (!strncasecmp (type, "GameserverIP", 12)) 
					{ 
						strncpy (server, buf, 199); 
						items[0] = 1; 
					} 
					if (!strncasecmp (type, "Maxusers", 8)) 
					{ 
						strncpy (maxusers, buf, 199); 
						items[1] = 1; 
					} 
					if (!strncasecmp (type, "DatabaseIP", 10)) 
					{ 
						strncpy (host, buf, 199); 
						items[2] = 1; 
					} 
					if (!strncasecmp (type, "DBUsername", 10)) 
					{ 
						strncpy (user, buf, 199); 
						items[3] = 1; 
					} 
 
					if (!strncasecmp (type, "DBPassword", 10)) 
					{ 
						strncpy (passwd, buf, 199); 
						items[4] = 1; 
					} 
					if (!strncasecmp (type, "DBName", 6)) 
					{ 
						strncpy (database, buf, 199); 
						items[5] = 1; 
					} 
				} 
		} 
		 
		if (!items[0] || !items[1] || !items[2] || !items[3] || !items[4] || !items[5]) 
		{ 
			MessageBox(hdwnd, "FATAL ERROR : Incomplete network.ini", "Fatal Error", MB_OK | MB_ICONERROR); 
			Log2File(TRUE, "FATAL ERROR : Incomplete network.ini\n"); 
			exit (1); 
		} 
		Log2File(TRUE, "Network settings succesfully loaded.\n"); 
		fclose (f); 
 
		// add all settings to memory 
		setServerip("GameserverIP", server); 
		setMaxusers("Maxusers", maxusers); 
		setDBIp("DatabaseIP", host); 
		setDBUser("DBUsername", user); 
		setDBPass("DBPassword", passwd); 
		setDBName("DBName", database); 
 
		return 1; 
	} 
	//************************ 
	// std::map remove a map 
	//************************ 
	void removeMap(char * keyid) 
	{ 
		mss.erase(keyid); 
	} 
	//************************ 
	// std::map setters / getters 
	//************************ 
	//** set server ip ** 
    void setServerip(char * key, char * serverip) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.serverip = serverip; 
		else 
		{ 
			ss.serverip = serverip; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get server ip ** 
	char * getServerip(char * key) 
    { 
        char * serverip = mss[key].serverip; 
        return serverip; 
    } 
 
	//** set max users ** 
    void setMaxusers(char * key, char * maxusers) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.maxusers = maxusers; 
		else 
		{ 
			ss.maxusers = maxusers; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get max users ** 
	char * getMaxusers(char * key) 
    { 
        char * maxusers = mss[key].maxusers; 
        return maxusers; 
    } 
 
	//** set database ip ** 
    void setDBIp(char * key, char * dbip) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.dbip = dbip; 
		else 
		{ 
			ss.dbip = dbip; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get database ip ** 
	char * getDBIp(char * key) 
    { 
        char * dbip = mss[key].dbip; 
        return dbip; 
    } 
 
	//** set database username ** 
    void setDBUser(char * key, char * dbuser) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.dbuser = dbuser; 
		else 
		{ 
			ss.dbuser = dbuser; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get database username ** 
	char * getDBUser(char * key) 
    { 
        char * dbuser = mss[key].dbuser; 
        return dbuser; 
    } 
 
	//** set database password ** 
    void setDBPass(char * key, char * dbpass) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.dbpass = dbpass; 
		else 
		{ 
			ss.dbpass = dbpass; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get database password ** 
	char * getDBPass(char * key) 
    { 
        char * dbpass = mss[key].dbpass; 
        return dbpass; 
    } 
 
	//** set database name ** 
    void setDBName(char * key, char * dbname) 
    { 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.dbname = dbname; 
		else 
		{ 
			ss.dbname = dbname; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get database name ** 
	char * getDBName(char * key) 
    { 
        char * dbname = mss[key].dbname; 
        return dbname; 
    } 
	//** set amount of users online ** 
    void setUsersonline(int usersonline) 
    { 
		char * key = "Usersonline"; 
 
		map::iterator it = mss.find(key); 
		if(it != mss.end()) 
			it->second.usersonline = usersonline; 
		else 
		{ 
			ss.usersonline = usersonline; 
			mss.insert(make_pair(key, ss)); 
		} 
    } 
	//** Get amount of users online ** 
	int getUsersonline() 
    { 
		char * key = "Usersonline"; 
 
        int usersonline = mss[key].usersonline; 
        return usersonline; 
    } 
};