From 5c5966545d14de43500b95109e8ce81058ebe2c3 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 28 Feb 2010 12:07:38 -0800
Subject: Initial Online friends notification seems to be working reliably now.
All this needs more testing, but everything is there.
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 27 +++++++++++++++++++++++-
OpenSim/Region/Framework/Scenes/Scene.cs | 6 +++++-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 6 +++++-
3 files changed, 36 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 57e1c37..ac04462 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -66,13 +66,16 @@ namespace OpenSim.Region.Framework.Scenes
public event OnClientConnectCoreDelegate OnClientConnect;
public delegate void OnNewClientDelegate(IClientAPI client);
-
+
///
/// Deprecated in favour of OnClientConnect.
/// Will be marked Obsolete after IClientCore has 100% of IClientAPI interfaces.
///
public event OnNewClientDelegate OnNewClient;
+ public delegate void OnClientLoginDelegate(IClientAPI client);
+ public event OnClientLoginDelegate OnClientLogin;
+
public delegate void OnNewPresenceDelegate(ScenePresence presence);
public event OnNewPresenceDelegate OnNewPresence;
@@ -583,6 +586,28 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ public void TriggerOnClientLogin(IClientAPI client)
+ {
+ OnClientLoginDelegate handlerClientLogin = OnClientLogin;
+ if (handlerClientLogin != null)
+ {
+ foreach (OnClientLoginDelegate d in handlerClientLogin.GetInvocationList())
+ {
+ try
+ {
+ d(client);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat(
+ "[EVENT MANAGER]: Delegate for TriggerOnClientLogin failed - continuing. {0} {1}",
+ e.Message, e.StackTrace);
+ }
+ }
+ }
+
+ }
+
public void TriggerOnNewPresence(ScenePresence presence)
{
OnNewPresenceDelegate handlerNewPresence = OnNewPresence;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b9b16ad..d00c990 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2422,6 +2422,8 @@ namespace OpenSim.Region.Framework.Scenes
///
public override void AddNewClient(IClientAPI client)
{
+ bool vialogin = false;
+
m_clientManager.Add(client);
CheckHeartbeat();
@@ -2463,6 +2465,7 @@ namespace OpenSim.Region.Framework.Scenes
if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0)
{
m_log.DebugFormat("[Scene]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName);
+ vialogin = true;
IUserAgentVerificationModule userVerification = RequestModuleInterface();
if (userVerification != null)
{
@@ -2512,7 +2515,8 @@ namespace OpenSim.Region.Framework.Scenes
m_LastLogin = Util.EnvironmentTickCount();
EventManager.TriggerOnNewClient(client);
-
+ if (vialogin)
+ EventManager.TriggerOnClientLogin(client);
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index af9afa6..f83a4d2 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1114,7 +1114,7 @@ namespace OpenSim.Region.Framework.Scenes
/// This is called upon a very important packet sent from the client,
/// so it's client-controlled. Never call this method directly.
///
- public void CompleteMovement()
+ public void CompleteMovement(IClientAPI client)
{
//m_log.Debug("[SCENE PRESENCE]: CompleteMovement");
@@ -1159,6 +1159,10 @@ namespace OpenSim.Region.Framework.Scenes
m_agentTransfer.EnableChildAgents(this);
else
m_log.DebugFormat("[SCENE PRESENCE]: Unable to create child agents in neighbours, because AgentTransferModule is not active");
+
+ IFriendsModule friendsModule = m_scene.RequestModuleInterface();
+ if (friendsModule != null)
+ friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
}
}
--
cgit v1.1