From bf8214815272efae07b05288103cbc8216c97af0 Mon Sep 17 00:00:00 2001
From: Teravus Ovares
Date: Tue, 26 Feb 2008 09:16:31 +0000
Subject: * Added base thread pool based presence informing to the message
server. * Not ready yet for use.
---
OpenSim/Grid/MessagingServer/MessageService.cs | 53 ++++++++++-----------
OpenSim/Grid/MessagingServer/PresenceInformer.cs | 59 ++++++++++++++++++++++++
2 files changed, 86 insertions(+), 26 deletions(-)
create mode 100644 OpenSim/Grid/MessagingServer/PresenceInformer.cs
(limited to 'OpenSim')
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;
using System.Net.Sockets;
using System.Collections;
using System.Collections.Generic;
+using System.Threading;
//using System.Xml;
using libsecondlife;
using Nwc.XmlRpc;
@@ -59,6 +60,8 @@ namespace OpenSim.Grid.MessagingServer
// Hashtable containing work units that need to be processed
private Hashtable m_unProcessedWorkUnits = new Hashtable();
+
+
public MessageService(MessageServerConfig cfg)
{
m_cfg = cfg;
@@ -66,29 +69,7 @@ namespace OpenSim.Grid.MessagingServer
#region RegionComms Methods
- ///
- /// Informs a region about an Agent
- ///
- /// User to talk about
- /// User we're sending this too (contains the region)
- public void SendRegionPresenceUpdate(UserPresenceData TalkingAbout, UserPresenceData UserToUpdate)
- {
- // TODO: Fill in pertenant Presence Data from 'TalkingAbout'
-
- RegionProfileData whichRegion = UserToUpdate.regionData;
- //whichRegion.httpServerURI
-
- Hashtable PresenceParams = new Hashtable();
- ArrayList SendParams = new ArrayList();
- SendParams.Add(PresenceParams);
-
- m_log.Info("[PRESENCE]: Informing " + whichRegion.regionName + " at " + whichRegion.httpServerURI);
- // Send
- XmlRpcRequest RegionReq = new XmlRpcRequest("presence_update", SendParams);
- XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
- }
-
-
+
#endregion
#region FriendList Methods
@@ -152,7 +133,13 @@ namespace OpenSim.Grid.MessagingServer
// we need to send out online status update, but the user is already subscribed
}
- SendRegionPresenceUpdate(friendpresence, userpresence);
+ PresenceInformer friendlistupdater = new PresenceInformer();
+ friendlistupdater.presence1 = friendpresence;
+ friendlistupdater.presence2 = userpresence;
+ WaitCallback cb = new WaitCallback(friendlistupdater.go);
+ ThreadPool.QueueUserWorkItem(cb);
+
+ //SendRegionPresenceUpdate(friendpresence, userpresence);
}
if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0)
{
@@ -166,7 +153,14 @@ namespace OpenSim.Grid.MessagingServer
// we need to send out online status update, but the user is already subscribed
}
- SendRegionPresenceUpdate(userpresence, friendpresence);
+ PresenceInformer friendlistupdater = new PresenceInformer();
+ friendlistupdater.presence1 = userpresence;
+ friendlistupdater.presence2 = friendpresence;
+
+ WaitCallback cb2 = new WaitCallback(friendlistupdater.go);
+ ThreadPool.QueueUserWorkItem(cb2);
+
+ //SendRegionPresenceUpdate(userpresence, friendpresence);
}
}
@@ -280,7 +274,14 @@ namespace OpenSim.Grid.MessagingServer
m_presences[AgentsNeedingNotification[i]] = friendd;
}
- SendRegionPresenceUpdate(AgentData, friendd);
+ PresenceInformer friendlistupdater = new PresenceInformer();
+ friendlistupdater.presence1 = AgentData;
+ friendlistupdater.presence2 = friendd;
+
+ WaitCallback cb3 = new WaitCallback(friendlistupdater.go);
+ ThreadPool.QueueUserWorkItem(cb3);
+
+ //SendRegionPresenceUpdate(AgentData, friendd);
//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 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using libsecondlife;
+using Nwc.XmlRpc;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Data;
+using OpenSim.Framework.Servers;
+
+namespace OpenSim.Grid.MessagingServer
+{
+ public class PresenceInformer
+ {
+ public UserPresenceData presence1 = null;
+ public UserPresenceData presence2 = null;
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ public PresenceInformer()
+ {
+
+ }
+ public void go(object o)
+ {
+ if (presence1 != null && presence2 != null)
+ {
+ SendRegionPresenceUpdate(presence1, presence2);
+ }
+
+ }
+
+ ///
+ /// Informs a region about an Agent
+ ///
+ /// User to talk about
+ /// User we're sending this too (contains the region)
+ public void SendRegionPresenceUpdate(UserPresenceData TalkingAbout, UserPresenceData UserToUpdate)
+ {
+ // TODO: Fill in pertenant Presence Data from 'TalkingAbout'
+
+ RegionProfileData whichRegion = UserToUpdate.regionData;
+ //whichRegion.httpServerURI
+
+ Hashtable PresenceParams = new Hashtable();
+ ArrayList SendParams = new ArrayList();
+ SendParams.Add(PresenceParams);
+
+ m_log.Info("[PRESENCE]: Informing " + whichRegion.regionName + " at " + whichRegion.httpServerURI);
+ // Send
+ XmlRpcRequest RegionReq = new XmlRpcRequest("presence_update", SendParams);
+ XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
+ }
+
+
+ }
+}
--
cgit v1.1