aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs256
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs3
2 files changed, 2 insertions, 257 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs
deleted file mode 100644
index 0d913bc..0000000
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs
+++ /dev/null
@@ -1,256 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.Reflection;
30
31using OpenSim.Region.Framework.Interfaces;
32using OpenSim.Region.Framework.Scenes;
33using OpenSim.Server.Base;
34using OpenSim.Services.Interfaces;
35using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
36
37using OpenMetaverse;
38using log4net;
39using Nini.Config;
40
41namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence
42{
43 public class HGPresenceBroker : ISharedRegionModule, IPresenceService
44 {
45 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
46
47 #region ISharedRegionModule
48
49 private bool m_Enabled = false;
50
51 private PresenceDetector m_PresenceDetector;
52 private IPresenceService m_GridService;
53 private IPresenceService m_HGService;
54
55 public Type ReplaceableInterface
56 {
57 get { return null; }
58 }
59
60 public string Name
61 {
62 get { return "HGPresenceBroker"; }
63 }
64
65 public void Initialise(IConfigSource source)
66 {
67 IConfig moduleConfig = source.Configs["Modules"];
68 if (moduleConfig != null)
69 {
70 string name = moduleConfig.GetString("PresenceServices", "");
71 if (name == Name)
72 {
73 //m_RemoteConnector = new InventoryServicesConnector(source);
74
75 m_Enabled = true;
76
77 m_PresenceDetector = new PresenceDetector(this);
78
79
80 IConfig pConfig = source.Configs["PresenceService"];
81 if (pConfig == null)
82 {
83 m_log.Error("[HG PRESENCE CONNECTOR]: PresenceService missing from OpenSim.ini");
84 return;
85 }
86
87 string localDll = pConfig.GetString("LocalGridPresenceService",
88 String.Empty);
89 string HGDll = pConfig.GetString("HypergridPresenceService",
90 String.Empty);
91
92 if (localDll == String.Empty)
93 {
94 m_log.Error("[HG PRESENCE CONNECTOR]: No LocalGridPresenceService named in section PresenceService");
95 //return;
96 throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's");
97 }
98
99 if (HGDll == String.Empty)
100 {
101 m_log.Error("[HG PRESENCE CONNECTOR]: No HypergridPresenceService named in section PresenceService");
102 //return;
103 throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's");
104 }
105
106 Object[] args = new Object[] { source };
107 m_GridService = ServerUtils.LoadPlugin<IPresenceService>(localDll, args);
108
109 m_HGService = ServerUtils.LoadPlugin<IPresenceService>(HGDll, args);
110 // no. This will be:
111 // m_HGService = new HGPresenceServiceConnector();
112
113 if (m_GridService == null)
114 {
115 m_log.Error("[HG PRESENCE CONNECTOR]: Can't load local presence service");
116 return;
117 }
118 if (m_HGService == null)
119 {
120 m_log.Error("[HG PRESENCE CONNECTOR]: Can't load hypergrid presence service");
121 return;
122 }
123
124 m_log.Info("[HG PRESENCE CONNECTOR]: Hypergrid presence enabled");
125 }
126 }
127
128 }
129
130 public void PostInitialise()
131 {
132 }
133
134 public void Close()
135 {
136 }
137
138 public void AddRegion(Scene scene)
139 {
140 if (!m_Enabled)
141 return;
142
143 scene.RegisterModuleInterface<IPresenceService>(this);
144 m_PresenceDetector.AddRegion(scene);
145
146 m_log.InfoFormat("[HG PRESENCE CONNECTOR]: Enabled hypergrid presence for region {0}", scene.RegionInfo.RegionName);
147
148 }
149
150 public void RemoveRegion(Scene scene)
151 {
152 if (!m_Enabled)
153 return;
154
155 m_PresenceDetector.RemoveRegion(scene);
156 }
157
158 public void RegionLoaded(Scene scene)
159 {
160 if (!m_Enabled)
161 return;
162
163 }
164
165 #endregion
166
167 #region IPresenceService
168
169 public bool LoginAgent(UUID principalID, UUID sessionID, UUID secureSessionID)
170 {
171 m_log.Warn("[HG PRESENCE CONNECTOR]: LoginAgent connector not implemented at the simulators");
172 return false;
173 }
174
175 public bool LogoutAgent(UUID sessionID)
176 {
177 return m_GridService.LogoutAgent(sessionID);
178 }
179
180
181 public bool LogoutRegionAgents(UUID regionID)
182 {
183 return m_GridService.LogoutRegionAgents(regionID);
184 }
185
186 public bool ReportAgent(UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
187 {
188 return m_GridService.ReportAgent(sessionID, regionID, position, lookAt);
189 }
190
191 public PresenceInfo GetAgent(UUID sessionID)
192 {
193 return m_GridService.GetAgent(sessionID);
194 }
195
196 public PresenceInfo[] GetAgents(string[] principalIDs)
197 {
198 Dictionary<string, List<string>> triage = new Dictionary<string, List<string>>();
199 List<PresenceInfo> presences = new List<PresenceInfo>();
200
201 foreach (string s in principalIDs)
202 {
203 string url = string.Empty;
204 string uuid = UUID.Zero.ToString();
205 StringToUrlAndUUID(s, out url, out uuid);
206 if (triage.ContainsKey(url))
207 triage[url].Add(uuid);
208 else
209 {
210 List<string> list = new List<string>();
211 list.Add(uuid);
212 triage.Add(url, list);
213 }
214 }
215
216 foreach (KeyValuePair<string, List<string>> kvp in triage)
217 {
218 if (kvp.Key == "local")
219 {
220 PresenceInfo[] pinfos = m_GridService.GetAgents(kvp.Value.ToArray());
221 presences.AddRange(pinfos);
222 }
223 else
224 {
225 PresenceInfo[] pinfos = m_HGService.GetAgents(/*kvp.Key,*/ kvp.Value.ToArray());
226 presences.AddRange(pinfos);
227 }
228 }
229
230 return presences.ToArray();
231 }
232
233 #endregion
234
235 private void StringToUrlAndUUID(string id, out string url, out string uuid)
236 {
237 url = String.Empty;
238 uuid = String.Empty;
239
240 Uri uri;
241
242 if (Uri.TryCreate(id, UriKind.Absolute, out uri) &&
243 uri.Scheme == Uri.UriSchemeHttp)
244 {
245 url = "http://" + uri.Authority;
246 uuid = uri.LocalPath.Trim(new char[] { '/' });
247 }
248 else
249 {
250 url = "local";
251 uuid = id;
252 }
253 }
254
255 }
256}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs
index eacf467..d75ed51 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs
@@ -32,6 +32,7 @@ using OpenSim.Region.Framework.Interfaces;
32using OpenSim.Region.Framework.Scenes; 32using OpenSim.Region.Framework.Scenes;
33using OpenSim.Server.Base; 33using OpenSim.Server.Base;
34using OpenSim.Services.Interfaces; 34using OpenSim.Services.Interfaces;
35using OpenSim.Services.Connectors;
35using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; 36using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
36 37
37using OpenMetaverse; 38using OpenMetaverse;
@@ -69,7 +70,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence
69 string name = moduleConfig.GetString("PresenceServices", ""); 70 string name = moduleConfig.GetString("PresenceServices", "");
70 if (name == Name) 71 if (name == Name)
71 { 72 {
72 //m_RemoteConnector = new PresenceServicesConnector(source); 73 m_RemoteConnector = new PresenceServicesConnector(source);
73 74
74 m_Enabled = true; 75 m_Enabled = true;
75 76