aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid/MessagingServer
diff options
context:
space:
mode:
authorTeravus Ovares2008-02-26 09:16:31 +0000
committerTeravus Ovares2008-02-26 09:16:31 +0000
commitbf8214815272efae07b05288103cbc8216c97af0 (patch)
tree3a57e14b5c5dac897a5b57e5fb79f00b212e8d41 /OpenSim/Grid/MessagingServer
parent* More Message server stuff. Still not ready. (diff)
downloadopensim-SC-bf8214815272efae07b05288103cbc8216c97af0.zip
opensim-SC-bf8214815272efae07b05288103cbc8216c97af0.tar.gz
opensim-SC-bf8214815272efae07b05288103cbc8216c97af0.tar.bz2
opensim-SC-bf8214815272efae07b05288103cbc8216c97af0.tar.xz
* Added base thread pool based presence informing to the message server.
* Not ready yet for use.
Diffstat (limited to 'OpenSim/Grid/MessagingServer')
-rw-r--r--OpenSim/Grid/MessagingServer/MessageService.cs53
-rw-r--r--OpenSim/Grid/MessagingServer/PresenceInformer.cs59
2 files changed, 86 insertions, 26 deletions
diff --git a/OpenSim/Grid/MessagingServer/MessageService.cs b/OpenSim/Grid/MessagingServer/MessageService.cs
index d0b939b..fc16a88 100644
--- a/OpenSim/Grid/MessagingServer/MessageService.cs
+++ b/OpenSim/Grid/MessagingServer/MessageService.cs
@@ -30,6 +30,7 @@ using System.Net;
30using System.Net.Sockets; 30using System.Net.Sockets;
31using System.Collections; 31using System.Collections;
32using System.Collections.Generic; 32using System.Collections.Generic;
33using System.Threading;
33//using System.Xml; 34//using System.Xml;
34using libsecondlife; 35using libsecondlife;
35using Nwc.XmlRpc; 36using Nwc.XmlRpc;
@@ -59,6 +60,8 @@ namespace OpenSim.Grid.MessagingServer
59 // Hashtable containing work units that need to be processed 60 // Hashtable containing work units that need to be processed
60 private Hashtable m_unProcessedWorkUnits = new Hashtable(); 61 private Hashtable m_unProcessedWorkUnits = new Hashtable();
61 62
63
64
62 public MessageService(MessageServerConfig cfg) 65 public MessageService(MessageServerConfig cfg)
63 { 66 {
64 m_cfg = cfg; 67 m_cfg = cfg;
@@ -66,29 +69,7 @@ namespace OpenSim.Grid.MessagingServer
66 69
67 #region RegionComms Methods 70 #region RegionComms Methods
68 71
69 /// <summary> 72
70 /// Informs a region about an Agent
71 /// </summary>
72 /// <param name="TalkingAbout">User to talk about</param>
73 /// <param name="UserToUpdate">User we're sending this too (contains the region)</param>
74 public void SendRegionPresenceUpdate(UserPresenceData TalkingAbout, UserPresenceData UserToUpdate)
75 {
76 // TODO: Fill in pertenant Presence Data from 'TalkingAbout'
77
78 RegionProfileData whichRegion = UserToUpdate.regionData;
79 //whichRegion.httpServerURI
80
81 Hashtable PresenceParams = new Hashtable();
82 ArrayList SendParams = new ArrayList();
83 SendParams.Add(PresenceParams);
84
85 m_log.Info("[PRESENCE]: Informing " + whichRegion.regionName + " at " + whichRegion.httpServerURI);
86 // Send
87 XmlRpcRequest RegionReq = new XmlRpcRequest("presence_update", SendParams);
88 XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
89 }
90
91
92 #endregion 73 #endregion
93 74
94 #region FriendList Methods 75 #region FriendList Methods
@@ -152,7 +133,13 @@ namespace OpenSim.Grid.MessagingServer
152 // we need to send out online status update, but the user is already subscribed 133 // we need to send out online status update, but the user is already subscribed
153 134
154 } 135 }
155 SendRegionPresenceUpdate(friendpresence, userpresence); 136 PresenceInformer friendlistupdater = new PresenceInformer();
137 friendlistupdater.presence1 = friendpresence;
138 friendlistupdater.presence2 = userpresence;
139 WaitCallback cb = new WaitCallback(friendlistupdater.go);
140 ThreadPool.QueueUserWorkItem(cb);
141
142 //SendRegionPresenceUpdate(friendpresence, userpresence);
156 } 143 }
157 if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0) 144 if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0)
158 { 145 {
@@ -166,7 +153,14 @@ namespace OpenSim.Grid.MessagingServer
166 // we need to send out online status update, but the user is already subscribed 153 // we need to send out online status update, but the user is already subscribed
167 154
168 } 155 }
169 SendRegionPresenceUpdate(userpresence, friendpresence); 156 PresenceInformer friendlistupdater = new PresenceInformer();
157 friendlistupdater.presence1 = userpresence;
158 friendlistupdater.presence2 = friendpresence;
159
160 WaitCallback cb2 = new WaitCallback(friendlistupdater.go);
161 ThreadPool.QueueUserWorkItem(cb2);
162
163 //SendRegionPresenceUpdate(userpresence, friendpresence);
170 } 164 }
171 165
172 } 166 }
@@ -280,7 +274,14 @@ namespace OpenSim.Grid.MessagingServer
280 m_presences[AgentsNeedingNotification[i]] = friendd; 274 m_presences[AgentsNeedingNotification[i]] = friendd;
281 275
282 } 276 }
283 SendRegionPresenceUpdate(AgentData, friendd); 277 PresenceInformer friendlistupdater = new PresenceInformer();
278 friendlistupdater.presence1 = AgentData;
279 friendlistupdater.presence2 = friendd;
280
281 WaitCallback cb3 = new WaitCallback(friendlistupdater.go);
282 ThreadPool.QueueUserWorkItem(cb3);
283
284 //SendRegionPresenceUpdate(AgentData, friendd);
284 285
285 286
286 //removeBackReference(AgentID, AgentsNeedingNotification[i]); 287 //removeBackReference(AgentID, AgentsNeedingNotification[i]);
diff --git a/OpenSim/Grid/MessagingServer/PresenceInformer.cs b/OpenSim/Grid/MessagingServer/PresenceInformer.cs
new file mode 100644
index 0000000..877d104
--- /dev/null
+++ b/OpenSim/Grid/MessagingServer/PresenceInformer.cs
@@ -0,0 +1,59 @@
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Net;
5using System.Net.Sockets;
6using System.Text;
7using libsecondlife;
8using Nwc.XmlRpc;
9using OpenSim.Framework;
10using OpenSim.Framework.Console;
11using OpenSim.Framework.Data;
12using OpenSim.Framework.Servers;
13
14namespace OpenSim.Grid.MessagingServer
15{
16 public class PresenceInformer
17 {
18 public UserPresenceData presence1 = null;
19 public UserPresenceData presence2 = null;
20 private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
21
22 public PresenceInformer()
23 {
24
25 }
26 public void go(object o)
27 {
28 if (presence1 != null && presence2 != null)
29 {
30 SendRegionPresenceUpdate(presence1, presence2);
31 }
32
33 }
34
35 /// <summary>
36 /// Informs a region about an Agent
37 /// </summary>
38 /// <param name="TalkingAbout">User to talk about</param>
39 /// <param name="UserToUpdate">User we're sending this too (contains the region)</param>
40 public void SendRegionPresenceUpdate(UserPresenceData TalkingAbout, UserPresenceData UserToUpdate)
41 {
42 // TODO: Fill in pertenant Presence Data from 'TalkingAbout'
43
44 RegionProfileData whichRegion = UserToUpdate.regionData;
45 //whichRegion.httpServerURI
46
47 Hashtable PresenceParams = new Hashtable();
48 ArrayList SendParams = new ArrayList();
49 SendParams.Add(PresenceParams);
50
51 m_log.Info("[PRESENCE]: Informing " + whichRegion.regionName + " at " + whichRegion.httpServerURI);
52 // Send
53 XmlRpcRequest RegionReq = new XmlRpcRequest("presence_update", SendParams);
54 XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
55 }
56
57
58 }
59}