Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim

slimupdates
Melanie 2010-03-06 20:05:33 +00:00
commit 2e5f7ec926
6 changed files with 58 additions and 13 deletions

View File

@ -91,6 +91,8 @@ namespace OpenSim.Framework
/// </exception>
bool PresenceChildStatus(UUID agentId);
bool TryGetAvatar(UUID agentID, out object scenePresence);
T RequestModuleInterface<T>();
T[] RequestModuleInterfaces<T>();

View File

@ -29,6 +29,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
@ -1443,6 +1444,7 @@ namespace OpenSim.Framework
}
#endregion FireAndForget Threading Pattern
/// <summary>
/// Environment.TickCount is an int but it counts all 32 bits so it goes positive
/// and negative every 24.9 days. This trims down TickCount so it doesn't wrap
@ -1467,5 +1469,21 @@ namespace OpenSim.Framework
Int32 diff = EnvironmentTickCount() - prevValue;
return (diff >= 0) ? diff : (diff + EnvironmentTickCountMask + 1);
}
/// <summary>
/// Prints the call stack at any given point. Useful for debugging.
/// </summary>
public static void PrintCallStack()
{
StackTrace stackTrace = new StackTrace(); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
// write call stack method names
foreach (StackFrame stackFrame in stackFrames)
{
m_log.Debug(stackFrame.GetMethod().DeclaringType + "." + stackFrame.GetMethod().Name); // write method name
}
}
}
}

View File

@ -77,23 +77,28 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence
public void OnNewClient(IClientAPI client)
{
client.OnLogout += OnLogout;
client.OnConnectionClosed += OnConnectionClose;
}
public void OnLogout(IClientAPI client)
public void OnConnectionClose(IClientAPI client)
{
client.OnLogout -= OnLogout;
ScenePresence sp = null;
Vector3 position = new Vector3(128, 128, 0);
Vector3 lookat = new Vector3(0, 1, 0);
if (m_aScene.TryGetAvatar(client.AgentId, out sp))
if (client.IsLoggingOut)
{
position = sp.AbsolutePosition;
lookat = sp.Lookat;
object sp = null;
Vector3 position = new Vector3(128, 128, 0);
Vector3 lookat = new Vector3(0, 1, 0);
if (client.Scene.TryGetAvatar(client.AgentId, out sp))
{
if (sp is ScenePresence)
{
position = ((ScenePresence)sp).AbsolutePosition;
lookat = ((ScenePresence)sp).Lookat;
}
}
m_PresenceService.LogoutAgent(client.SessionId, position, lookat);
}
m_PresenceService.LogoutAgent(client.SessionId, position, lookat);
}
}

View File

@ -4216,7 +4216,7 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.GetGroupByPrim(localID);
}
public bool TryGetAvatar(UUID avatarId, out ScenePresence avatar)
public override bool TryGetAvatar(UUID avatarId, out ScenePresence avatar)
{
return m_sceneGraph.TryGetAvatar(avatarId, out avatar);
}

View File

@ -190,6 +190,21 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="agentID"></param>
public abstract void RemoveClient(UUID agentID);
public bool TryGetAvatar(UUID agentID, out object scenePresence)
{
scenePresence = null;
ScenePresence sp = null;
if (TryGetAvatar(agentID, out sp))
{
scenePresence = sp;
return true;
}
return false;
}
public abstract bool TryGetAvatar(UUID agentID, out ScenePresence scenePresence);
#endregion
/// <summary>

View File

@ -65,6 +65,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{
throw new NotImplementedException();
}
public override bool TryGetAvatar(UUID agentID, out ScenePresence scenePresence)
{
throw new NotImplementedException();
}
}
[Test]