User:Fly-man-/Webbased Regions
From OpenSimulator
How to create a region server that uses the Web to get his regions:
1: Create a database called regionxml
CREATE DATABASE regionxml
2: Create 2 tables that hold all the information for the regionserver and regions themselves
CREATE TABLE regionservers ( `IP` varchar(20) NOT NULL, `ServerID` int(1) NOT NULL, PRIMARY KEY (`IP`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `xmlregions` ( `sim_UUID` varchar(50) NOT NULL, `sim_name` varchar(255) NOT NULL, `sim_location_x` int(6) NOT NULL, `sim_location_y` int(6) NOT NULL, `internal_ip_address` varchar(20) NOT NULL default '0.0.0.0', `regionserver` int(1) NOT NULL, `master_avatar_uuid` varchar(50) NOT NULL default '00000000-0000-0000-0000-000000000000', `master_avatar_first` varchar(255) NOT NULL, `master_avatar_last` varchar(255) NOT NULL, `master_avatar_pass` varchar(255) NOT NULL, `lastmap_uuid` varchar(50) NOT NULL, `lastmap_refresh` int(11) NOT NULL, PRIMARY KEY (`sim_UUID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
3: Fill in your region server and give them a number
INSERT INTO `regionservers` VALUES ('<IP>', <number>);
4: Fill the xmlregion table with the region info you need
INSERT INTO `xmlregions` VALUES ('<UUID>', '<region name>', <X>, <Y>, '0.0.0.0', <regionserver>, '00000000-0000-0000-0000-000000000000', '<master_first>', '<master_last>', '<master_password>', '', 0);
5: Use these settings in your OpenSim.ini to get the region to poll the Grid server for regions:
; Determine where OpenSimulator looks for the files which tell it which regions to server ; Defaults to "filesystem" if this setting isn't present ; region_info_source = "filesystem" region_info_source = "web" ; Determines where the region XML files are stored if you are loading these from the filesystem. ; Defaults to bin/Regions in your OpenSimulator installation directory ; regionload_regionsdir="C:\somewhere\xmlfiles\" ; Determines the page from which regions xml is retrieved if you are loading these from the web ; The XML here has the same format as it does on the filesystem (including the <Root> tag), ; except that everything is also enclosed in a <Regions> tag. regionload_webserver_url = "http://grid/opensim/regions.php";
The region.php file looks like this:
<? include("database.inc.php"); // Setup the database connection mysql_connect($host,$username,$password); mysql_select_db($database); // Getting the region server credits $external = ($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; $requestregion = "SELECT ServerID from regionservers where IP = '$external'"; $trapregion = mysql_query($requestregion); while ($regions = mysql_fetch_row($trapregion)) { $region = $regions[0]; } // Getting all region info for the calling server $sql = "SELECT sim_UUID,sim_name,sim_location_x,sim_location_y,master_avatar_uuid, master_avatar_first,master_avatar_last,master_avatar_pass, lastmap_uuid,lastmap_refresh FROM $table WHERE regionserver = $region"; $result = mysql_query($sql); // Set the Start for the XML echo "<Regions>\r\n"; // Additional port info set here $port = 9000; // Fill the XML with the region from the database while ($row = mysql_fetch_row($result)) { echo "<Root>\r\n"; echo '<Config sim_UUID="'.$row[0].'" sim_name="'.$row[1].'" sim_location_x="'.$row[2].'" sim_location_y="'.$row[3].'" internal_ip_address="0.0.0.0" internal_ip_port="'.$port.'" external_host_name="'.$external.'" master_avatar_uuid="'.$row[4].'" master_avatar_first="'.$row[5].'" master_avatar_last="'.$row[6].'" master_avatar_pass="'.$row[7].'"/>'; echo "\r\n"; echo "</Root>\r\n"; $port = $port + 1; } echo "</Regions>"; ?>