Some work on cleanly removing Regions.

afrisby
MW 2007-11-13 12:23:05 +00:00
parent 7f8a69f181
commit 297cc7ef4f
7 changed files with 87 additions and 30 deletions

View File

@ -439,6 +439,7 @@ namespace OpenSim.Framework
void SetDebug(int newDebug); void SetDebug(int newDebug);
void InPacket(Packet NewPack); void InPacket(Packet NewPack);
void Close(); void Close();
void Stop();
event ViewerEffectEventHandler OnViewerEffect; event ViewerEffectEventHandler OnViewerEffect;
event Action<IClientAPI> OnLogout; event Action<IClientAPI> OnLogout;
event Action<IClientAPI> OnConnectionClosed; event Action<IClientAPI> OnConnectionClosed;

View File

@ -435,10 +435,6 @@ namespace OpenSim
} }
} }
protected void ConnectToRemoteGridServer()
{
}
#endregion #endregion
/// <summary> /// <summary>

View File

@ -158,6 +158,16 @@ namespace OpenSim.Region.ClientStack
ClientThread.Abort(); ClientThread.Abort();
} }
public void Stop()
{
clientPingTimer.Stop();
libsecondlife.Packets.DisableSimulatorPacket disable = new libsecondlife.Packets.DisableSimulatorPacket();
OutPacket(disable);
ClientThread.Abort();
}
#endregion #endregion
# region Packet Handling # region Packet Handling

View File

@ -47,7 +47,7 @@ using OpenSim.Region.Environment.Scenes.Scripting;
using OpenSim.Region.Environment.Types; using OpenSim.Region.Environment.Types;
using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Manager;
using OpenSim.Region.Terrain; using OpenSim.Region.Terrain;
using Timer=System.Timers.Timer; using Timer = System.Timers.Timer;
namespace OpenSim.Region.Environment.Scenes namespace OpenSim.Region.Environment.Scenes
{ {
@ -195,7 +195,7 @@ namespace OpenSim.Region.Environment.Scenes
ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim) ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim)
{ {
updateLock = new Mutex(false); updateLock = new Mutex(false);
m_moduleLoader = moduleLoader; m_moduleLoader = moduleLoader;
m_authenticateHandler = authen; m_authenticateHandler = authen;
CommsManager = commsMan; CommsManager = commsMan;
@ -228,7 +228,7 @@ namespace OpenSim.Region.Environment.Scenes
m_sceneObjects = new Dictionary<LLUUID, SceneObjectGroup>(); m_sceneObjects = new Dictionary<LLUUID, SceneObjectGroup>();
MainLog.Instance.Verbose("Creating LandMap"); MainLog.Instance.Verbose("Creating LandMap");
Terrain = new TerrainEngine((int) RegionInfo.RegionLocX, (int) RegionInfo.RegionLocY); Terrain = new TerrainEngine((int)RegionInfo.RegionLocX, (int)RegionInfo.RegionLocY);
ScenePresence.LoadAnims(); ScenePresence.LoadAnims();
@ -241,11 +241,26 @@ namespace OpenSim.Region.Environment.Scenes
#region Startup / Close Methods #region Startup / Close Methods
public override void Close() public override void Close()
{ {
ForEachScenePresence(delegate(ScenePresence avatar)
{
avatar.ControllingClient.Stop();
});
m_heartbeatTimer.Close(); m_heartbeatTimer.Close();
m_innerScene.Close(); m_innerScene.Close();
m_sceneGridService.Close(); m_sceneGridService.Close();
foreach (IRegionModule module in this.Modules.Values)
{
if (!module.IsSharedModule)
{
module.Close();
}
}
Modules.Clear();
base.Close(); base.Close();
} }
/// <summary> /// <summary>
@ -299,30 +314,30 @@ namespace OpenSim.Region.Environment.Scenes
if (m_frame == Int32.MaxValue) if (m_frame == Int32.MaxValue)
m_frame = 0; m_frame = 0;
if (m_frame%m_update_physics == 0) if (m_frame % m_update_physics == 0)
m_innerScene.UpdatePreparePhysics(); m_innerScene.UpdatePreparePhysics();
if (m_frame%m_update_entitymovement == 0) if (m_frame % m_update_entitymovement == 0)
m_innerScene.UpdateEntityMovement(); m_innerScene.UpdateEntityMovement();
if (m_frame%m_update_physics == 0) if (m_frame % m_update_physics == 0)
m_innerScene.UpdatePhysics( m_innerScene.UpdatePhysics(
Math.Max(SinceLastFrame.TotalSeconds, m_timespan) Math.Max(SinceLastFrame.TotalSeconds, m_timespan)
); );
if (m_frame%m_update_entities == 0) if (m_frame % m_update_entities == 0)
m_innerScene.UpdateEntities(); m_innerScene.UpdateEntities();
if (m_frame%m_update_events == 0) if (m_frame % m_update_events == 0)
UpdateEvents(); UpdateEvents();
if (m_frame%m_update_backup == 0) if (m_frame % m_update_backup == 0)
UpdateStorageBackup(); UpdateStorageBackup();
if (m_frame%m_update_terrain == 0) if (m_frame % m_update_terrain == 0)
UpdateTerrain(); UpdateTerrain();
if (m_frame%m_update_land == 0) if (m_frame % m_update_land == 0)
UpdateLand(); UpdateLand();
// if (m_frame%m_update_avatars == 0) // if (m_frame%m_update_avatars == 0)
@ -340,7 +355,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
updateLock.ReleaseMutex(); updateLock.ReleaseMutex();
m_timedilation = m_timespan/(float) SinceLastFrame.TotalSeconds; m_timedilation = m_timespan / (float)SinceLastFrame.TotalSeconds;
m_lastupdate = DateTime.Now; m_lastupdate = DateTime.Now;
} }
} }
@ -397,7 +412,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
for (int y = 0; y < 16; y++) for (int y = 0; y < 16; y++)
{ {
if (Terrain.Tainted(x*16, y*16)) if (Terrain.Tainted(x * 16, y * 16))
{ {
client.SendLayerData(x, y, terData); client.SendLayerData(x, y, terData);
} }
@ -524,7 +539,7 @@ namespace OpenSim.Region.Environment.Scenes
AddEntityFromStorage(prim); AddEntityFromStorage(prim);
SceneObjectPart rootPart = prim.GetChildPart(prim.UUID); SceneObjectPart rootPart = prim.GetChildPart(prim.UUID);
bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) if ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor = phyScene.AddPrimShape( rootPart.PhysActor = phyScene.AddPrimShape(
rootPart.Name, rootPart.Name,
rootPart.Shape, rootPart.Shape,
@ -570,11 +585,11 @@ namespace OpenSim.Region.Environment.Scenes
// if grass or tree, make phantom // if grass or tree, make phantom
if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255)) if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255))
{ {
rootPart.ObjectFlags += (uint) LLObject.ObjectFlags.Phantom; rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
} }
// if not phantom, add to physics // if not phantom, add to physics
bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) if ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor = rootPart.PhysActor =
phyScene.AddPrimShape( phyScene.AddPrimShape(
rootPart.Name, rootPart.Name,
@ -668,7 +683,7 @@ namespace OpenSim.Region.Environment.Scenes
client.OnRegionHandShakeReply += SendLayerData; client.OnRegionHandShakeReply += SendLayerData;
//remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
client.OnModifyTerrain += ModifyTerrain; client.OnModifyTerrain += ModifyTerrain;
// client.OnRequestWearables += InformClientOfNeighbours; // client.OnRequestWearables += InformClientOfNeighbours;
client.OnAddPrim += AddNewPrim; client.OnAddPrim += AddNewPrim;
client.OnUpdatePrimGroupPosition += m_innerScene.UpdatePrimPosition; client.OnUpdatePrimGroupPosition += m_innerScene.UpdatePrimPosition;
client.OnUpdatePrimSinglePosition += m_innerScene.UpdatePrimSinglePosition; client.OnUpdatePrimSinglePosition += m_innerScene.UpdatePrimSinglePosition;
@ -843,7 +858,7 @@ namespace OpenSim.Region.Environment.Scenes
if (m_capsHandlers.ContainsKey(agent.AgentID)) if (m_capsHandlers.ContainsKey(agent.AgentID))
{ {
//MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + //MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " +
// agent.AgentID.ToStringHyphenated()); // agent.AgentID.ToStringHyphenated());
m_capsHandlers[agent.AgentID] = cap; m_capsHandlers[agent.AgentID] = cap;
} }
else else
@ -871,7 +886,7 @@ namespace OpenSim.Region.Environment.Scenes
if (regionHandle == m_regionHandle) if (regionHandle == m_regionHandle)
{ {
ScenePresence presence = m_innerScene.GetScenePresence(agentID); ScenePresence presence = m_innerScene.GetScenePresence(agentID);
if(presence != null) if (presence != null)
{ {
libsecondlife.Packets.DisableSimulatorPacket disable = new libsecondlife.Packets.DisableSimulatorPacket(); libsecondlife.Packets.DisableSimulatorPacket disable = new libsecondlife.Packets.DisableSimulatorPacket();
presence.ControllingClient.OutPacket(disable); presence.ControllingClient.OutPacket(disable);
@ -879,7 +894,7 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -951,17 +966,17 @@ namespace OpenSim.Region.Environment.Scenes
public void RegisterModuleInterface<M>(M mod) public void RegisterModuleInterface<M>(M mod)
{ {
if (!ModuleInterfaces.ContainsKey(typeof (M))) if (!ModuleInterfaces.ContainsKey(typeof(M)))
{ {
ModuleInterfaces.Add(typeof (M), mod); ModuleInterfaces.Add(typeof(M), mod);
} }
} }
public T RequestModuleInterface<T>() public T RequestModuleInterface<T>()
{ {
if (ModuleInterfaces.ContainsKey(typeof (T))) if (ModuleInterfaces.ContainsKey(typeof(T)))
{ {
return (T) ModuleInterfaces[typeof (T)]; return (T)ModuleInterfaces[typeof(T)];
} }
else else
{ {
@ -1073,7 +1088,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
if (ent is SceneObjectGroup) if (ent is SceneObjectGroup)
{ {
((SceneObjectGroup) ent).ScheduleGroupForFullUpdate(); ((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
} }
} }
} }
@ -1085,7 +1100,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
if (ent is SceneObjectGroup) if (ent is SceneObjectGroup)
{ {
SceneObjectPart part = ((SceneObjectGroup) ent).GetChildPart(((SceneObjectGroup) ent).UUID); SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID);
if (part != null) if (part != null)
{ {
if (part.Name == cmmdparams[0]) if (part.Name == cmmdparams[0])

View File

@ -179,6 +179,35 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
public bool TryGetScene(string regionName, out Scene scene)
{
foreach (Scene mscene in m_localScenes)
{
if (String.Compare(mscene.RegionInfo.RegionName, regionName, true) == 0)
{
scene = mscene;
return true;
}
}
scene = null;
return false;
}
public bool TryGetScene(LLUUID regionID, out Scene scene)
{
foreach (Scene mscene in m_localScenes)
{
if (mscene.RegionInfo.RegionID == regionID)
{
scene = mscene;
return true;
}
}
scene = null;
return false;
}
public void SetDebugPacketOnCurrentScene(LogBase log, int newDebug) public void SetDebugPacketOnCurrentScene(LogBase log, int newDebug)
{ {
ForEachCurrentScene(delegate(Scene scene) ForEachCurrentScene(delegate(Scene scene)

View File

@ -1197,6 +1197,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
m_wearables[wearableId] = wearable; m_wearables[wearableId] = wearable;
SendOwnWearables(); SendOwnWearables();
} }
private void SendOwnWearables() private void SendOwnWearables()

View File

@ -427,6 +427,11 @@ namespace SimpleApp
{ {
} }
public void Stop()
{
}
private uint m_circuitCode; private uint m_circuitCode;
public uint CircuitCode public uint CircuitCode