<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FConnector_Architecture%2FGrid_Connector</id>
	<title>OpenSimulator Internals/Connector Architecture/Grid Connector - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FConnector_Architecture%2FGrid_Connector"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Grid_Connector&amp;action=history"/>
	<updated>2026-08-04T15:36:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Grid_Connector&amp;diff=77&amp;oldid=prev</id>
		<title>Jwbshaw: first</title>
		<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Grid_Connector&amp;diff=77&amp;oldid=prev"/>
		<updated>2026-07-07T12:22:18Z</updated>

		<summary type="html">&lt;p&gt;first&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= OpenSimulator Internals/Connector Architecture/Grid Connector =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
GridServicesConnector is the simulator-side remote connector for IGridService. It translates IGridService calls into HTTP POST requests to the ROBUST Grid handler at /grid.&lt;br /&gt;
&lt;br /&gt;
Source file:&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Services/Connectors/Grid/GridServicesConnector.cs&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
Config section: [GridService]&lt;br /&gt;
&lt;br /&gt;
Required key:&lt;br /&gt;
* GridServerURI -- URL of the ROBUST grid endpoint; throws if missing&lt;br /&gt;
&lt;br /&gt;
Two URIs are constructed:&lt;br /&gt;
* m_ServerURI -- base URI (trailing slash trimmed)&lt;br /&gt;
* m_ServerGridURI -- m_ServerURI + &amp;quot;/grid&amp;quot; -- used for all requests&lt;br /&gt;
&lt;br /&gt;
Base class BaseServiceConnector.Initialise() called for auth setup.&lt;br /&gt;
&lt;br /&gt;
Three constructors:&lt;br /&gt;
* Default (no args) -- URIs must be set externally&lt;br /&gt;
* String URI -- sets both m_ServerURI and m_ServerGridURI directly&lt;br /&gt;
* IConfigSource -- calls Initialise(), normal grid mode&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Transport ===&lt;br /&gt;
&lt;br /&gt;
All methods POST to m_ServerGridURI using SynchronousRestFormsRequester.MakePostRequest(). All requests include a METHOD field. Most also include SCOPEID.&lt;br /&gt;
&lt;br /&gt;
List-returning methods iterate all values in the reply dictionary and construct GridRegion from each dictionary entry. Empty list returned on empty reply or exception.&lt;br /&gt;
&lt;br /&gt;
Single-region methods check for a &amp;quot;result&amp;quot; key containing a dictionary and construct GridRegion from it. Null returned if not found.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! METHOD field !! Returns !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| RegisterRegion(scopeID, regionInfo) || &amp;quot;register&amp;quot; || string || Empty string on success; error message on failure. Sends full GridRegion via ToKeyValuePairs(). Checks Result field for &amp;quot;success&amp;quot;/&amp;quot;failure&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| DeregisterRegion(regionID) || &amp;quot;deregister&amp;quot; || bool || Checks Result == &amp;quot;success&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| GetNeighbours(scopeID, regionID) || &amp;quot;get_neighbours&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionByUUID(scopeID, regionID) || &amp;quot;get_region_by_uuid&amp;quot; || GridRegion || Null on not found&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionByHandle(scopeID, handle) || (none) || GridRegion || Converts handle to x,y coords; delegates to GetRegionByPosition()&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionByPosition(scopeID, x, y) || &amp;quot;get_region_by_position&amp;quot; || GridRegion || Null on not found&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionByName(scopeID, name) || &amp;quot;get_region_by_name&amp;quot; || GridRegion || Null on not found&lt;br /&gt;
|-&lt;br /&gt;
| GetLocalRegionByName(scopeID, name) || &amp;quot;get_localregion_by_name&amp;quot; || GridRegion || Null on not found; used by GatekeeperService&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionByURI(scopeID, uri) || (none) || GridRegion || Always returns null -- not implemented&lt;br /&gt;
|-&lt;br /&gt;
| GetLocalRegionByURI(scopeID, uri) || (none) || GridRegion || Always returns null -- not implemented&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionsByName(scopeID, name, max) || &amp;quot;get_regions_by_name&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Name prefix search; max limits results&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionsByURI(scopeID, uri, max) || (none) || List&amp;lt;GridRegion&amp;gt; || Always returns null -- not implemented&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionRange(scopeID, xmin, xmax, ymin, ymax) || &amp;quot;get_region_range&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Bounding box query&lt;br /&gt;
|-&lt;br /&gt;
| GetDefaultRegions(scopeID) || &amp;quot;get_default_regions&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetDefaultHypergridRegions(scopeID) || &amp;quot;get_default_hypergrid_regions&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetFallbackRegions(scopeID, x, y) || &amp;quot;get_fallback_regions&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetOnlineRegions(scopeID, x, y, max) || &amp;quot;get_online_regions&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Sends MC for max count; returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetHyperlinks(scopeID) || &amp;quot;get_hyperlinks&amp;quot; || List&amp;lt;GridRegion&amp;gt; || Returns empty list on failure&lt;br /&gt;
|-&lt;br /&gt;
| GetRegionFlags(scopeID, regionID) || &amp;quot;get_region_flags&amp;quot; || int || Returns -1 on failure; parses result as int&lt;br /&gt;
|-&lt;br /&gt;
| GetExtraFeatures() || &amp;quot;get_grid_extra_features&amp;quot; || Dictionary&amp;lt;string,object&amp;gt; || Returns all key-value pairs from reply; empty dict on failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
RegisterRegion() result handling:&lt;br /&gt;
* &amp;quot;success&amp;quot; (case-insensitive) -- returns empty string&lt;br /&gt;
* &amp;quot;failure&amp;quot; (case-insensitive) -- logs Message field and returns it&lt;br /&gt;
* Anything else -- logs &amp;quot;unexpected result&amp;quot; and returns it&lt;br /&gt;
* All errors return a non-empty string; callers check for empty string to detect success&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* GetRegionByURI(), GetLocalRegionByURI(), and GetRegionsByURI() always return null -- RegionURI queries are not implemented in this connector.&lt;br /&gt;
* GetRegionByHandle() is a local conversion wrapper -- it does not make a separate HTTP call with the handle value.&lt;br /&gt;
* List methods return empty list (not null) on all failure paths.&lt;br /&gt;
* Single-region methods return null on failure.&lt;br /&gt;
* GetRegionFlags() returns -1 on failure, not 0 -- callers should check for negative values.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenSimulator Internals/Connector Architecture]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/ROBUST/GridService RegisterRegion]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/Shared]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>