aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorDiva Canto2009-12-27 20:34:42 -0800
committerDiva Canto2009-12-27 20:34:42 -0800
commit3ef513e863097bdccffa8c84283ab8ffc0915a8f (patch)
tree0e388f2a40f738b4f48e48d833d545b6eb70528b /OpenSim/Region
parentChanged GetAgents to take string[] instead of UUID[] (diff)
downloadopensim-SC_OLD-3ef513e863097bdccffa8c84283ab8ffc0915a8f.zip
opensim-SC_OLD-3ef513e863097bdccffa8c84283ab8ffc0915a8f.tar.gz
opensim-SC_OLD-3ef513e863097bdccffa8c84283ab8ffc0915a8f.tar.bz2
opensim-SC_OLD-3ef513e863097bdccffa8c84283ab8ffc0915a8f.tar.xz
Presence remote connector and handler. Presence HG Broker. Nothing tested, just compiles.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs256
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs1
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs158
3 files changed, 414 insertions, 1 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs
new file mode 100644
index 0000000..0d913bc
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/HGPresenceBroker.cs
@@ -0,0 +1,256 @@
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/LocalPresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs
index 24362c7..510e9cb 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs
@@ -47,7 +47,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence
47 #region ISharedRegionModule 47 #region ISharedRegionModule
48 48
49 private bool m_Enabled = false; 49 private bool m_Enabled = false;
50 private bool m_Initialized = false;
51 50
52 private PresenceDetector m_PresenceDetector; 51 private PresenceDetector m_PresenceDetector;
53 private IPresenceService m_PresenceService; 52 private IPresenceService m_PresenceService;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs
new file mode 100644
index 0000000..eacf467
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs
@@ -0,0 +1,158 @@
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 RemotePresenceServiceConnector : 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_RemoteConnector;
53
54 public Type ReplaceableInterface
55 {
56 get { return null; }
57 }
58
59 public string Name
60 {
61 get { return "RemotePresenceServiceConnector"; }
62 }
63
64 public void Initialise(IConfigSource source)
65 {
66 IConfig moduleConfig = source.Configs["Modules"];
67 if (moduleConfig != null)
68 {
69 string name = moduleConfig.GetString("PresenceServices", "");
70 if (name == Name)
71 {
72 //m_RemoteConnector = new PresenceServicesConnector(source);
73
74 m_Enabled = true;
75
76 m_PresenceDetector = new PresenceDetector(this);
77
78 m_log.Info("[INVENTORY CONNECTOR]: Remote presence enabled");
79 }
80 }
81
82 }
83
84 public void PostInitialise()
85 {
86 }
87
88 public void Close()
89 {
90 }
91
92 public void AddRegion(Scene scene)
93 {
94 if (!m_Enabled)
95 return;
96
97 scene.RegisterModuleInterface<IPresenceService>(this);
98 m_PresenceDetector.AddRegion(scene);
99
100 m_log.InfoFormat("[REMOTE PRESENCE CONNECTOR]: Enabled remote presence for region {0}", scene.RegionInfo.RegionName);
101
102 }
103
104 public void RemoveRegion(Scene scene)
105 {
106 if (!m_Enabled)
107 return;
108
109 m_PresenceDetector.RemoveRegion(scene);
110 }
111
112 public void RegionLoaded(Scene scene)
113 {
114 if (!m_Enabled)
115 return;
116
117 }
118
119 #endregion
120
121 #region IPresenceService
122
123 public bool LoginAgent(UUID principalID, UUID sessionID, UUID secureSessionID)
124 {
125 m_log.Warn("[REMOTE PRESENCE CONNECTOR]: LoginAgent connector not implemented at the simulators");
126 return false;
127 }
128
129 public bool LogoutAgent(UUID sessionID)
130 {
131 return m_RemoteConnector.LogoutAgent(sessionID);
132 }
133
134
135 public bool LogoutRegionAgents(UUID regionID)
136 {
137 return m_RemoteConnector.LogoutRegionAgents(regionID);
138 }
139
140 public bool ReportAgent(UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
141 {
142 return m_RemoteConnector.ReportAgent(sessionID, regionID, position, lookAt);
143 }
144
145 public PresenceInfo GetAgent(UUID sessionID)
146 {
147 return m_RemoteConnector.GetAgent(sessionID);
148 }
149
150 public PresenceInfo[] GetAgents(string[] principalIDs)
151 {
152 return m_RemoteConnector.GetAgents(principalIDs);
153 }
154
155 #endregion
156
157 }
158}