<?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%2FFriends_Connector</id>
	<title>OpenSimulator Internals/Connector Architecture/Friends 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%2FFriends_Connector"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Friends_Connector&amp;action=history"/>
	<updated>2026-08-04T16:05:50Z</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/Friends_Connector&amp;diff=76&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/Friends_Connector&amp;diff=76&amp;oldid=prev"/>
		<updated>2026-07-07T12:21:31Z</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/Friends Connector =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
FriendsServicesConnector is the simulator-side remote connector for IFriendsService. It translates IFriendsService calls into HTTP POST requests to the ROBUST Friends handler at /friends.&lt;br /&gt;
&lt;br /&gt;
Source file:&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
Config section: [FriendsService]&lt;br /&gt;
&lt;br /&gt;
Required key:&lt;br /&gt;
* FriendsServerURI -- URL of the ROBUST friends endpoint; throws if missing&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) -- URI must be set externally&lt;br /&gt;
* String URI -- used by callers that pass the URI 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_ServerURI + &amp;quot;/friends&amp;quot; using SynchronousRestFormsRequester.&lt;br /&gt;
&lt;br /&gt;
Unlike most other connectors, requests do not include VERSIONMIN / VERSIONMAX fields.&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 !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| GetFriends(UUID principalID) || &amp;quot;getfriends&amp;quot; || UUID overload&lt;br /&gt;
|-&lt;br /&gt;
| GetFriends(string principalID) || &amp;quot;getfriends_string&amp;quot; || String overload -- used for HG UUI identifiers&lt;br /&gt;
|-&lt;br /&gt;
| StoreFriend(principalID, friend, flags) || &amp;quot;storefriend&amp;quot; || Sends PrincipalID, Friend, MyFlags; returns bool from Result field&lt;br /&gt;
|-&lt;br /&gt;
| Delete(UUID principalID, string friend) || &amp;quot;deletefriend&amp;quot; || UUID overload&lt;br /&gt;
|-&lt;br /&gt;
| Delete(string principalID, string friend) || &amp;quot;deletefriend_string&amp;quot; || String overload -- used for HG UUI identifiers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GetFriends() (both overloads) delegate to a protected GetFriends(Dictionary, string) helper:&lt;br /&gt;
* Returns empty FriendInfo[] if result == &amp;quot;null&amp;quot;&lt;br /&gt;
* Iterates all values in reply dictionary, constructs FriendInfo for each dictionary entry&lt;br /&gt;
* Returns empty FriendInfo[] on empty reply or exception (never returns null)&lt;br /&gt;
&lt;br /&gt;
StoreFriend() and Delete():&lt;br /&gt;
* Check replyData[&amp;quot;Result&amp;quot;] (capital R -- different from most other connectors which use lowercase &amp;quot;result&amp;quot;)&lt;br /&gt;
* Parse as bool via Boolean.TryParse()&lt;br /&gt;
* Return false on empty reply, null response, or exception&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* Two string overloads exist (GetFriends, Delete) to support HyperGrid UUI identifiers which are not valid UUIDs.&lt;br /&gt;
* Result field key is &amp;quot;Result&amp;quot; (capital R) -- inconsistent with most other ROBUST service connectors which use lowercase &amp;quot;result&amp;quot;.&lt;br /&gt;
* No VERSIONMIN/VERSIONMAX sent -- unlike GridUser, Presence, Avatar, and UserAccount connectors.&lt;br /&gt;
* GetFriends() returns empty array (not null) on all failure paths.&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]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/Shared]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>