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

remotes/origin/0.6.7-post-fixes
Melanie 2009-09-02 16:29:50 +01:00
commit 8e7b385883
16 changed files with 236 additions and 110 deletions

View File

@ -66,7 +66,7 @@ namespace OpenSim.Framework.Communications.Tests
CachedUserInfo nonExistingUserInfo; CachedUserInfo nonExistingUserInfo;
TestCommunicationsManager commsManager = new TestCommunicationsManager(); TestCommunicationsManager commsManager = new TestCommunicationsManager();
Scene myScene = SceneSetupHelpers.SetupScene(commsManager, ""); // Scene myScene = SceneSetupHelpers.SetupScene(commsManager, "");
// Check we can't retrieve info before it exists by uuid // Check we can't retrieve info before it exists by uuid
nonExistingUserInfo = commsManager.UserProfileCacheService.GetUserDetails(userId); nonExistingUserInfo = commsManager.UserProfileCacheService.GetUserDetails(userId);

View File

@ -93,12 +93,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
string userFirstName = "Jock"; string userFirstName = "Jock";
string userLastName = "Stirrup"; string userLastName = "Stirrup";
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
CachedUserInfo userInfo; // CachedUserInfo userInfo;
lock (this) lock (this)
{ {
userInfo UserProfileTestUtils.CreateUserWithInventory(
= UserProfileTestUtils.CreateUserWithInventory(
cm, userFirstName, userLastName, userId, InventoryReceived); cm, userFirstName, userLastName, userId, InventoryReceived);
Monitor.Wait(this, 60000); Monitor.Wait(this, 60000);
} }

View File

@ -8,6 +8,7 @@
</Dependencies> </Dependencies>
<Extension path = "/OpenSim/RegionModules"> <Extension path = "/OpenSim/RegionModules">
<RegionModule id="LandManagementModule" type="OpenSim.Region.CoreModules.World.Land.LandManagementModule" />
<RegionModule id="ExportSerialisationModule" type="OpenSim.Region.CoreModules.World.Serialiser.SerialiserModule" /> <RegionModule id="ExportSerialisationModule" type="OpenSim.Region.CoreModules.World.Serialiser.SerialiserModule" />
<RegionModule id="ArchiverModule" type="OpenSim.Region.CoreModules.World.Archiver.ArchiverModule" /> <RegionModule id="ArchiverModule" type="OpenSim.Region.CoreModules.World.Archiver.ArchiverModule" />
<RegionModule id="CapabilitiesModule" type="OpenSim.Region.CoreModules.Agent.Capabilities.CapabilitiesModule" /> <RegionModule id="CapabilitiesModule" type="OpenSim.Region.CoreModules.Agent.Capabilities.CapabilitiesModule" />

View File

@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Land
public uint x, y; public uint x, y;
} }
public class LandManagementModule : IRegionModule public class LandManagementModule : INonSharedRegionModule
{ {
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -61,7 +61,9 @@ namespace OpenSim.Region.CoreModules.World.Land
private Scene m_scene; private Scene m_scene;
// Minimum for parcels to work is 64m even if we don't actually use them. // Minimum for parcels to work is 64m even if we don't actually use them.
#pragma warning disable 0429
private const int landArrayMax = ((int)((int)Constants.RegionSize / 4) >= 64) ? (int)((int)Constants.RegionSize / 4) : 64; private const int landArrayMax = ((int)((int)Constants.RegionSize / 4) >= 64) ? (int)((int)Constants.RegionSize / 4) : 64;
#pragma warning restore 0429
private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax];
private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>();
@ -74,9 +76,18 @@ namespace OpenSim.Region.CoreModules.World.Land
// caches ExtendedLandData // caches ExtendedLandData
private Cache parcelInfoCache; private Cache parcelInfoCache;
#region IRegionModule Members #region INonSharedRegionModule Members
public void Initialise(Scene scene, IConfigSource source) public Type ReplaceableInterface
{
get { return null; }
}
public void Initialise(IConfigSource source)
{
}
public void AddRegion(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_landIDList.Initialize(); m_landIDList.Initialize();
@ -86,22 +97,21 @@ namespace OpenSim.Region.CoreModules.World.Land
parcelInfoCache.Size = 30; // the number of different parcel requests in this region to cache parcelInfoCache.Size = 30; // the number of different parcel requests in this region to cache
parcelInfoCache.DefaultTTL = new TimeSpan(0, 5, 0); parcelInfoCache.DefaultTTL = new TimeSpan(0, 5, 0);
m_scene.EventManager.OnParcelPrimCountAdd += AddPrimToLandPrimCounts; m_scene.EventManager.OnParcelPrimCountAdd += EventManagerOnParcelPrimCountAdd;
m_scene.EventManager.OnParcelPrimCountUpdate += UpdateLandPrimCounts; m_scene.EventManager.OnParcelPrimCountUpdate += EventManagerOnParcelPrimCountUpdate;
m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(handleAvatarChangingParcel); m_scene.EventManager.OnAvatarEnteringNewParcel += EventManagerOnAvatarEnteringNewParcel;
m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(handleAnyClientMovement); m_scene.EventManager.OnClientMovement += EventManagerOnClientMovement;
m_scene.EventManager.OnValidateLandBuy += handleLandValidationRequest; m_scene.EventManager.OnValidateLandBuy += EventManagerOnValidateLandBuy;
m_scene.EventManager.OnLandBuy += handleLandBuyRequest; m_scene.EventManager.OnLandBuy += EventManagerOnLandBuy;
m_scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); m_scene.EventManager.OnNewClient += EventManagerOnNewClient;
m_scene.EventManager.OnSignificantClientMovement += handleSignificantClientMovement; m_scene.EventManager.OnSignificantClientMovement += EventManagerOnSignificantClientMovement;
m_scene.EventManager.OnObjectBeingRemovedFromScene += RemovePrimFromLandPrimCounts; m_scene.EventManager.OnObjectBeingRemovedFromScene += EventManagerOnObjectBeingRemovedFromScene;
m_scene.EventManager.OnNoticeNoLandDataFromStorage += EventManagerOnNoLandDataFromStorage;
m_scene.EventManager.OnNoticeNoLandDataFromStorage += this.NoLandDataFromStorage; m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage;
m_scene.EventManager.OnIncomingLandDataFromStorage += this.IncomingLandObjectsFromStorage; m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan;
m_scene.EventManager.OnSetAllowForcefulBan += this.SetAllowedForcefulBans; m_scene.EventManager.OnRequestParcelPrimCountUpdate += EventManagerOnRequestParcelPrimCountUpdate;
m_scene.EventManager.OnRequestParcelPrimCountUpdate += this.PerformParcelPrimCountUpdate; m_scene.EventManager.OnParcelPrimCountTainted += EventManagerOnParcelPrimCountTainted;
m_scene.EventManager.OnParcelPrimCountTainted += this.SetPrimsTainted; m_scene.EventManager.OnRegisterCaps += EventManagerOnRegisterCaps;
m_scene.EventManager.OnRegisterCaps += this.OnRegisterCaps;
lock (m_scene) lock (m_scene)
{ {
@ -109,24 +119,31 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
void EventManager_OnNewClient(IClientAPI client) public void RegionLoaded(Scene scene)
{
}
public void RemoveRegion(Scene scene)
{
}
void EventManagerOnNewClient(IClientAPI client)
{ {
//Register some client events //Register some client events
client.OnParcelPropertiesRequest += new ParcelPropertiesRequest(handleParcelPropertiesRequest); client.OnParcelPropertiesRequest += ClientOnParcelPropertiesRequest;
client.OnParcelDivideRequest += new ParcelDivideRequest(handleParcelDivideRequest); client.OnParcelDivideRequest += ClientOnParcelDivideRequest;
client.OnParcelJoinRequest += new ParcelJoinRequest(handleParcelJoinRequest); client.OnParcelJoinRequest += ClientOnParcelJoinRequest;
client.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(handleParcelPropertiesUpdateRequest); client.OnParcelPropertiesUpdateRequest += ClientOnParcelPropertiesUpdateRequest;
client.OnParcelSelectObjects += new ParcelSelectObjects(handleParcelSelectObjectsRequest); client.OnParcelSelectObjects += ClientOnParcelSelectObjects;
client.OnParcelObjectOwnerRequest += new ParcelObjectOwnerRequest(handleParcelObjectOwnersRequest); client.OnParcelObjectOwnerRequest += ClientOnParcelObjectOwnerRequest;
client.OnParcelAccessListRequest += new ParcelAccessListRequest(handleParcelAccessRequest); client.OnParcelAccessListRequest += ClientOnParcelAccessListRequest;
client.OnParcelAccessListUpdateRequest += new ParcelAccessListUpdateRequest(handleParcelAccessUpdateRequest); client.OnParcelAccessListUpdateRequest += ClientOnParcelAccessUpdateListRequest;
client.OnParcelAbandonRequest += new ParcelAbandonRequest(handleParcelAbandonRequest); client.OnParcelAbandonRequest += ClientOnParcelAbandonRequest;
client.OnParcelGodForceOwner += new ParcelGodForceOwner(handleParcelGodForceOwner); client.OnParcelGodForceOwner += ClientOnParcelGodForceOwner;
client.OnParcelReclaim += new ParcelReclaim(handleParcelReclaim); client.OnParcelReclaim += ClientOnParcelReclaim;
client.OnParcelInfoRequest += new ParcelInfoRequest(handleParcelInfo); client.OnParcelInfoRequest += ClientOnParcelInfoRequest;
client.OnParcelDwellRequest += new ParcelDwellRequest(handleParcelDwell); client.OnParcelDwellRequest += ClientOnParcelDwellRequest;
client.OnParcelDeedToGroup += ClientOnParcelDeedToGroup;
client.OnParcelDeedToGroup += new ParcelDeedToGroup(handleParcelDeedToGroup);
if (m_scene.Entities.ContainsKey(client.AgentId)) if (m_scene.Entities.ContainsKey(client.AgentId))
{ {
@ -158,7 +175,7 @@ namespace OpenSim.Region.CoreModules.World.Land
#region Parcel Add/Remove/Get/Create #region Parcel Add/Remove/Get/Create
public void SetAllowedForcefulBans(bool forceful) public void EventManagerOnSetAllowedForcefulBan(bool forceful)
{ {
AllowedForcefulBans = forceful; AllowedForcefulBans = forceful;
} }
@ -256,7 +273,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleAvatarChangingParcel(ScenePresence avatar, int localLandID, UUID regionID) public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID)
{ {
if (m_scene.RegionInfo.RegionID == regionID) if (m_scene.RegionInfo.RegionID == regionID)
{ {
@ -353,7 +370,7 @@ namespace OpenSim.Region.CoreModules.World.Land
SendLandUpdate(avatar, false); SendLandUpdate(avatar, false);
} }
public void handleSignificantClientMovement(IClientAPI remote_client) public void EventManagerOnSignificantClientMovement(IClientAPI remote_client)
{ {
ScenePresence clientAvatar = m_scene.GetScenePresence(remote_client.AgentId); ScenePresence clientAvatar = m_scene.GetScenePresence(remote_client.AgentId);
@ -367,8 +384,9 @@ namespace OpenSim.Region.CoreModules.World.Land
if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) clientAvatar.sentMessageAboutRestrictedParcelFlyingDown)
{ {
handleAvatarChangingParcel(clientAvatar, parcel.landData.LocalID, m_scene.RegionInfo.RegionID); EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.landData.LocalID,
//They are going below the safety line! m_scene.RegionInfo.RegionID);
//They are going under the safety line!
if (!parcel.isBannedFromLand(clientAvatar.UUID)) if (!parcel.isBannedFromLand(clientAvatar.UUID))
{ {
clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false;
@ -383,8 +401,8 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleAnyClientMovement(ScenePresence avatar) public void EventManagerOnClientMovement(ScenePresence avatar)
//Like handleSignificantClientMovement, but called with an AgentUpdate regardless of distance. //Like handleEventManagerOnSignificantClientMovement, but called with an AgentUpdate regardless of distance.
{ {
ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
if (over != null) if (over != null)
@ -398,7 +416,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
public void handleParcelAccessRequest(UUID agentID, UUID sessionID, uint flags, int sequenceID, public void ClientOnParcelAccessListRequest(UUID agentID, UUID sessionID, uint flags, int sequenceID,
int landLocalID, IClientAPI remote_client) int landLocalID, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
@ -413,7 +431,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleParcelAccessUpdateRequest(UUID agentID, UUID sessionID, uint flags, int landLocalID, public void ClientOnParcelAccessUpdateListRequest(UUID agentID, UUID sessionID, uint flags, int landLocalID,
List<ParcelManager.ParcelAccessEntry> entries, List<ParcelManager.ParcelAccessEntry> entries,
IClientAPI remote_client) IClientAPI remote_client)
{ {
@ -615,7 +633,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void SetPrimsTainted() public void EventManagerOnParcelPrimCountTainted()
{ {
m_landPrimCountTainted = true; m_landPrimCountTainted = true;
} }
@ -625,7 +643,7 @@ namespace OpenSim.Region.CoreModules.World.Land
return m_landPrimCountTainted; return m_landPrimCountTainted;
} }
public void AddPrimToLandPrimCounts(SceneObjectGroup obj) public void EventManagerOnParcelPrimCountAdd(SceneObjectGroup obj)
{ {
Vector3 position = obj.AbsolutePosition; Vector3 position = obj.AbsolutePosition;
ILandObject landUnderPrim = GetLandObject(position.X, position.Y); ILandObject landUnderPrim = GetLandObject(position.X, position.Y);
@ -635,7 +653,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void RemovePrimFromLandPrimCounts(SceneObjectGroup obj) public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj)
{ {
lock (m_landList) lock (m_landList)
@ -687,7 +705,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void UpdateLandPrimCounts() public void EventManagerOnParcelPrimCountUpdate()
{ {
ResetAllLandPrimCounts(); ResetAllLandPrimCounts();
foreach (EntityBase obj in m_scene.Entities) foreach (EntityBase obj in m_scene.Entities)
@ -704,7 +722,7 @@ namespace OpenSim.Region.CoreModules.World.Land
m_landPrimCountTainted = false; m_landPrimCountTainted = false;
} }
public void PerformParcelPrimCountUpdate() public void EventManagerOnRequestParcelPrimCountUpdate()
{ {
ResetAllLandPrimCounts(); ResetAllLandPrimCounts();
m_scene.EventManager.TriggerParcelPrimCountUpdate(); m_scene.EventManager.TriggerParcelPrimCountUpdate();
@ -773,7 +791,7 @@ namespace OpenSim.Region.CoreModules.World.Land
m_landList[startLandObjectIndex].forceUpdateLandInfo(); m_landList[startLandObjectIndex].forceUpdateLandInfo();
} }
SetPrimsTainted(); EventManagerOnParcelPrimCountTainted();
//Now add the new land object //Now add the new land object
ILandObject result = AddLandObject(newLand); ILandObject result = AddLandObject(newLand);
@ -841,7 +859,7 @@ namespace OpenSim.Region.CoreModules.World.Land
performFinalLandJoin(masterLandObject, slaveLandObject); performFinalLandJoin(masterLandObject, slaveLandObject);
} }
} }
SetPrimsTainted(); EventManagerOnParcelPrimCountTainted();
masterLandObject.sendLandUpdateToAvatarsOverMe(); masterLandObject.sendLandUpdateToAvatarsOverMe();
} }
@ -942,7 +960,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, public void ClientOnParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id,
bool snap_selection, IClientAPI remote_client) bool snap_selection, IClientAPI remote_client)
{ {
//Get the land objects within the bounds //Get the land objects within the bounds
@ -982,7 +1000,7 @@ namespace OpenSim.Region.CoreModules.World.Land
SendParcelOverlay(remote_client); SendParcelOverlay(remote_client);
} }
public void handleParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client) public void ClientOnParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -993,22 +1011,23 @@ namespace OpenSim.Region.CoreModules.World.Land
if (land != null) land.updateLandProperties(args, remote_client); if (land != null) land.updateLandProperties(args, remote_client);
} }
public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) public void ClientOnParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client)
{ {
subdivide(west, south, east, north, remote_client.AgentId); subdivide(west, south, east, north, remote_client.AgentId);
} }
public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client) public void ClientOnParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client)
{ {
join(west, south, east, north, remote_client.AgentId); join(west, south, east, north, remote_client.AgentId);
} }
public void handleParcelSelectObjectsRequest(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client) public void ClientOnParcelSelectObjects(int local_id, int request_type,
List<UUID> returnIDs, IClientAPI remote_client)
{ {
m_landList[local_id].sendForceObjectSelect(local_id, request_type, returnIDs, remote_client); m_landList[local_id].sendForceObjectSelect(local_id, request_type, returnIDs, remote_client);
} }
public void handleParcelObjectOwnersRequest(int local_id, IClientAPI remote_client) public void ClientOnParcelObjectOwnerRequest(int local_id, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -1026,7 +1045,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleParcelGodForceOwner(int local_id, UUID ownerID, IClientAPI remote_client) public void ClientOnParcelGodForceOwner(int local_id, UUID ownerID, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -1046,7 +1065,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleParcelAbandonRequest(int local_id, IClientAPI remote_client) public void ClientOnParcelAbandonRequest(int local_id, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -1068,7 +1087,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
} }
public void handleParcelReclaim(int local_id, IClientAPI remote_client) public void ClientOnParcelReclaim(int local_id, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -1097,7 +1116,7 @@ namespace OpenSim.Region.CoreModules.World.Land
// and land has been validated as well, this method transfers // and land has been validated as well, this method transfers
// the land ownership // the land ownership
public void handleLandBuyRequest(Object o, EventManager.LandBuyArgs e) public void EventManagerOnLandBuy(Object o, EventManager.LandBuyArgs e)
{ {
if (e.economyValidated && e.landValidated) if (e.economyValidated && e.landValidated)
{ {
@ -1118,7 +1137,7 @@ namespace OpenSim.Region.CoreModules.World.Land
// be validated. This method validates the right to buy the // be validated. This method validates the right to buy the
// parcel // parcel
public void handleLandValidationRequest(Object o, EventManager.LandBuyArgs e) public void EventManagerOnValidateLandBuy(Object o, EventManager.LandBuyArgs e)
{ {
if (e.landValidated == false) if (e.landValidated == false)
{ {
@ -1150,7 +1169,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
void handleParcelDeedToGroup(int parcelLocalID, UUID groupID, IClientAPI remote_client) void ClientOnParcelDeedToGroup(int parcelLocalID, UUID groupID, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
lock (m_landList) lock (m_landList)
@ -1171,7 +1190,7 @@ namespace OpenSim.Region.CoreModules.World.Land
#region Land Object From Storage Functions #region Land Object From Storage Functions
public void IncomingLandObjectsFromStorage(List<LandData> data) public void EventManagerOnIncomingLandDataFromStorage(List<LandData> data)
{ {
for (int i = 0; i < data.Count; i++) for (int i = 0; i < data.Count; i++)
{ {
@ -1200,7 +1219,7 @@ namespace OpenSim.Region.CoreModules.World.Land
selectedParcel.returnLandObjects(returnType, agentIDs, taskIDs, remoteClient); selectedParcel.returnLandObjects(returnType, agentIDs, taskIDs, remoteClient);
} }
public void NoLandDataFromStorage() public void EventManagerOnNoLandDataFromStorage()
{ {
ResetSimLandObjects(); ResetSimLandObjects();
} }
@ -1224,7 +1243,7 @@ namespace OpenSim.Region.CoreModules.World.Land
#region CAPS handler #region CAPS handler
private void OnRegisterCaps(UUID agentID, Caps caps) private void EventManagerOnRegisterCaps(UUID agentID, Caps caps)
{ {
string capsBase = "/CAPS/" + caps.CapsObjectPath; string capsBase = "/CAPS/" + caps.CapsObjectPath;
caps.RegisterHandler("RemoteParcelRequest", caps.RegisterHandler("RemoteParcelRequest",
@ -1307,7 +1326,7 @@ namespace OpenSim.Region.CoreModules.World.Land
#endregion #endregion
private void handleParcelDwell(int localID, IClientAPI remoteClient) private void ClientOnParcelDwellRequest(int localID, IClientAPI remoteClient)
{ {
ILandObject selectedParcel = null; ILandObject selectedParcel = null;
lock (m_landList) lock (m_landList)
@ -1319,7 +1338,7 @@ namespace OpenSim.Region.CoreModules.World.Land
remoteClient.SendParcelDwellReply(localID, selectedParcel.landData.GlobalID, selectedParcel.landData.Dwell); remoteClient.SendParcelDwellReply(localID, selectedParcel.landData.GlobalID, selectedParcel.landData.Dwell);
} }
private void handleParcelInfo(IClientAPI remoteClient, UUID parcelID) private void ClientOnParcelInfoRequest(IClientAPI remoteClient, UUID parcelID)
{ {
if (parcelID == UUID.Zero) if (parcelID == UUID.Zero)
return; return;

View File

@ -44,7 +44,9 @@ namespace OpenSim.Region.CoreModules.World.Land
#region Member Variables #region Member Variables
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#pragma warning disable 0429
private const int landArrayMax = ((int)((int)Constants.RegionSize / 4) >= 64) ? (int)((int)Constants.RegionSize / 4) : 64; private const int landArrayMax = ((int)((int)Constants.RegionSize / 4) >= 64) ? (int)((int)Constants.RegionSize / 4) : 64;
#pragma warning restore 0429
private bool[,] m_landBitmap = new bool[landArrayMax,landArrayMax]; private bool[,] m_landBitmap = new bool[landArrayMax,landArrayMax];
protected LandData m_landData = new LandData(); protected LandData m_landData = new LandData();

View File

@ -495,6 +495,29 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
public void UnCombineRegion(RegionData rdata)
{
lock (m_regions)
{
if (m_regions.ContainsKey(rdata.RegionId))
{
// uncombine root region and virtual regions
}
else
{
foreach (RegionConnections r in m_regions.Values)
{
foreach (RegionData rd in r.ConnectedRegions)
{
if (rd.RegionId == rdata.RegionId)
{
// uncombine virtual region
}
}
}
}
}
}
// Create a set of infinite borders around the whole aabb of the combined island. // Create a set of infinite borders around the whole aabb of the combined island.
private void AdjustLargeRegionBounds() private void AdjustLargeRegionBounds()
{ {
@ -635,8 +658,8 @@ namespace OpenSim.Region.CoreModules.World.Land
public class LargeLandChannel : ILandChannel public class LargeLandChannel : ILandChannel
{ {
private static readonly ILog m_log = // private static readonly ILog m_log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private RegionData RegData; private RegionData RegData;
private ILandChannel RootRegionLandChannel; private ILandChannel RootRegionLandChannel;
private readonly List<RegionData> RegionConnections; private readonly List<RegionData> RegionConnections;

View File

@ -103,7 +103,7 @@ namespace OpenSim.Region.Framework.Scenes
case Cardinals.SE: // x+1, y-1 case Cardinals.SE: // x+1, y-1
break; break;
case Cardinals.S: // x+0, y-1 case Cardinals.S: // x+0, y-1
if (position.X >= BorderLine.X && position.X <= BorderLine.Y && position.Y-1 < BorderLine.Z) if (position.X >= BorderLine.X && position.X <= BorderLine.Y && position.Y < BorderLine.Z)
{ {
return true; return true;
} }
@ -111,7 +111,7 @@ namespace OpenSim.Region.Framework.Scenes
case Cardinals.SW: // x-1, y-1 case Cardinals.SW: // x-1, y-1
break; break;
case Cardinals.W: // x-1, y+0 case Cardinals.W: // x-1, y+0
if (position.Y >= BorderLine.X && position.Y <= BorderLine.Y && position.X-1 < BorderLine.Z) if (position.Y >= BorderLine.X && position.Y <= BorderLine.Y && position.X < BorderLine.Z)
{ {
return true; return true;
} }

View File

@ -337,22 +337,22 @@ namespace OpenSim.Region.Framework.Scenes
BordersLocked = true; BordersLocked = true;
Border northBorder = new Border(); Border northBorder = new Border();
northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize + 1); //<--- northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize); //<---
northBorder.CrossDirection = Cardinals.N; northBorder.CrossDirection = Cardinals.N;
NorthBorders.Add(northBorder); NorthBorders.Add(northBorder);
Border southBorder = new Border(); Border southBorder = new Border();
southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, -1); //---> southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //--->
southBorder.CrossDirection = Cardinals.S; southBorder.CrossDirection = Cardinals.S;
SouthBorders.Add(southBorder); SouthBorders.Add(southBorder);
Border eastBorder = new Border(); Border eastBorder = new Border();
eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize + 1); //<--- eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize); //<---
eastBorder.CrossDirection = Cardinals.E; eastBorder.CrossDirection = Cardinals.E;
EastBorders.Add(eastBorder); EastBorders.Add(eastBorder);
Border westBorder = new Border(); Border westBorder = new Border();
westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, -1); //---> westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //--->
westBorder.CrossDirection = Cardinals.W; westBorder.CrossDirection = Cardinals.W;
WestBorders.Add(westBorder); WestBorders.Add(westBorder);
@ -489,22 +489,22 @@ namespace OpenSim.Region.Framework.Scenes
{ {
BordersLocked = true; BordersLocked = true;
Border northBorder = new Border(); Border northBorder = new Border();
northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize + 1); //<--- northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize); //<---
northBorder.CrossDirection = Cardinals.N; northBorder.CrossDirection = Cardinals.N;
NorthBorders.Add(northBorder); NorthBorders.Add(northBorder);
Border southBorder = new Border(); Border southBorder = new Border();
southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, -1); //---> southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue,0); //--->
southBorder.CrossDirection = Cardinals.S; southBorder.CrossDirection = Cardinals.S;
SouthBorders.Add(southBorder); SouthBorders.Add(southBorder);
Border eastBorder = new Border(); Border eastBorder = new Border();
eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize + 1); //<--- eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize ); //<---
eastBorder.CrossDirection = Cardinals.E; eastBorder.CrossDirection = Cardinals.E;
EastBorders.Add(eastBorder); EastBorders.Add(eastBorder);
Border westBorder = new Border(); Border westBorder = new Border();
westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, -1); //---> westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue,0); //--->
westBorder.CrossDirection = Cardinals.W; westBorder.CrossDirection = Cardinals.W;
WestBorders.Add(westBorder); WestBorders.Add(westBorder);
BordersLocked = false; BordersLocked = false;
@ -1709,6 +1709,10 @@ namespace OpenSim.Region.Framework.Scenes
int thisx = (int)RegionInfo.RegionLocX; int thisx = (int)RegionInfo.RegionLocX;
int thisy = (int)RegionInfo.RegionLocY; int thisy = (int)RegionInfo.RegionLocY;
Vector3 EastCross = new Vector3(0.1f,0,0);
Vector3 WestCross = new Vector3(-0.1f, 0, 0);
Vector3 NorthCross = new Vector3(0, 0.1f, 0);
Vector3 SouthCross = new Vector3(0, -0.1f, 0);
// use this if no borders were crossed! // use this if no borders were crossed!
@ -1718,9 +1722,9 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 pos = attemptedPosition; Vector3 pos = attemptedPosition;
if (TestBorderCross(attemptedPosition, Cardinals.W)) if (TestBorderCross(attemptedPosition + WestCross, Cardinals.W))
{ {
if (TestBorderCross(attemptedPosition, Cardinals.S)) if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
{ {
//Border crossedBorderx = GetCrossedBorder(attemptedPosition,Cardinals.W); //Border crossedBorderx = GetCrossedBorder(attemptedPosition,Cardinals.W);
//Border crossedBordery = GetCrossedBorder(attemptedPosition, Cardinals.S); //Border crossedBordery = GetCrossedBorder(attemptedPosition, Cardinals.S);
@ -1733,7 +1737,7 @@ namespace OpenSim.Region.Framework.Scenes
// x - 1 // x - 1
// y - 1 // y - 1
} }
else if (TestBorderCross(attemptedPosition, Cardinals.N)) else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
{ {
pos.X = ((pos.X + Constants.RegionSize)); pos.X = ((pos.X + Constants.RegionSize));
pos.Y = ((pos.Y - Constants.RegionSize)); pos.Y = ((pos.Y - Constants.RegionSize));
@ -1752,9 +1756,9 @@ namespace OpenSim.Region.Framework.Scenes
// x - 1 // x - 1
} }
} }
else if (TestBorderCross(attemptedPosition, Cardinals.E)) else if (TestBorderCross(attemptedPosition + EastCross, Cardinals.E))
{ {
if (TestBorderCross(attemptedPosition, Cardinals.S)) if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
{ {
pos.X = ((pos.X - Constants.RegionSize)); pos.X = ((pos.X - Constants.RegionSize));
pos.Y = ((pos.Y + Constants.RegionSize)); pos.Y = ((pos.Y + Constants.RegionSize));
@ -1764,7 +1768,7 @@ namespace OpenSim.Region.Framework.Scenes
// x + 1 // x + 1
// y - 1 // y - 1
} }
else if (TestBorderCross(attemptedPosition, Cardinals.N)) else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
{ {
pos.X = ((pos.X - Constants.RegionSize)); pos.X = ((pos.X - Constants.RegionSize));
pos.Y = ((pos.Y - Constants.RegionSize)); pos.Y = ((pos.Y - Constants.RegionSize));
@ -1783,14 +1787,14 @@ namespace OpenSim.Region.Framework.Scenes
// x + 1 // x + 1
} }
} }
else if (TestBorderCross(attemptedPosition, Cardinals.S)) else if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
{ {
pos.Y = ((pos.Y + Constants.RegionSize)); pos.Y = ((pos.Y + Constants.RegionSize));
newRegionHandle newRegionHandle
= Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize)); = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize));
// y - 1 // y - 1
} }
else if (TestBorderCross(attemptedPosition, Cardinals.N)) else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
{ {
pos.Y = ((pos.Y - Constants.RegionSize)); pos.Y = ((pos.Y - Constants.RegionSize));

View File

@ -264,8 +264,8 @@ namespace OpenSim.Region.Framework.Scenes
{ {
Vector3 val = value; Vector3 val = value;
if ((m_scene.TestBorderCross(val,Cardinals.E) || m_scene.TestBorderCross(val,Cardinals.W) if ((m_scene.TestBorderCross(val - Vector3.UnitX, Cardinals.E) || m_scene.TestBorderCross(val + Vector3.UnitX, Cardinals.W)
|| m_scene.TestBorderCross(val, Cardinals.N) || m_scene.TestBorderCross(val, Cardinals.S)) || m_scene.TestBorderCross(val - Vector3.UnitY, Cardinals.N) || m_scene.TestBorderCross(val + Vector3.UnitY, Cardinals.S))
&& !IsAttachment) && !IsAttachment)
{ {
m_scene.CrossPrimGroupIntoNewRegion(val, this, true); m_scene.CrossPrimGroupIntoNewRegion(val, this, true);

View File

@ -85,7 +85,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static string m_freeSwitchRealm; private static string m_freeSwitchRealm;
private static string m_freeSwitchSIPProxy; private static string m_freeSwitchSIPProxy;
private static bool m_freeSwitchAttemptUseSTUN; private static bool m_freeSwitchAttemptUseSTUN;
private static string m_freeSwitchSTUNServer; // private static string m_freeSwitchSTUNServer;
private static string m_freeSwitchEchoServer; private static string m_freeSwitchEchoServer;
private static int m_freeSwitchEchoPort; private static int m_freeSwitchEchoPort;
private static string m_freeSwitchDefaultWellKnownIP; private static string m_freeSwitchDefaultWellKnownIP;
@ -144,7 +144,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty); m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm); m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true); m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm); // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm); m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505); m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm); m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);

View File

@ -172,6 +172,11 @@ namespace OpenSim.Region.Physics.Manager
return; return;
} }
public virtual void UnCombine(PhysicsScene pScene)
{
}
/// <summary> /// <summary>
/// Queue a raycast against the physics scene. /// Queue a raycast against the physics scene.
/// The provided callback method will be called when the raycast is complete /// The provided callback method will be called when the raycast is complete

View File

@ -3436,7 +3436,7 @@ namespace OpenSim.Region.Physics.OdePlugin
d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle);
d.GeomSetRotation(GroundGeom, ref R); d.GeomSetRotation(GroundGeom, ref R);
d.GeomSetPosition(GroundGeom, pOffset.X + ((int)Constants.RegionSize * 0.5f), pOffset.Y + ((int)Constants.RegionSize * 0.5f), 0); d.GeomSetPosition(GroundGeom, (pOffset.X + ((int)Constants.RegionSize * 0.5f)) - 1, (pOffset.Y + ((int)Constants.RegionSize * 0.5f)) - 1, 0);
IntPtr testGround = IntPtr.Zero; IntPtr testGround = IntPtr.Zero;
if (RegionTerrain.TryGetValue(pOffset, out testGround)) if (RegionTerrain.TryGetValue(pOffset, out testGround))
{ {
@ -3457,6 +3457,77 @@ namespace OpenSim.Region.Physics.OdePlugin
return waterlevel; return waterlevel;
} }
public override bool SupportsCombining()
{
return true;
}
public override void UnCombine(PhysicsScene pScene)
{
IntPtr localGround = IntPtr.Zero;
float[] localHeightfield;
bool proceed = false;
List<IntPtr> geomDestroyList = new List<IntPtr>();
lock (OdeLock)
{
if (RegionTerrain.TryGetValue(Vector3.Zero, out localGround))
{
foreach (IntPtr geom in TerrainHeightFieldHeights.Keys)
{
if (geom == localGround)
{
localHeightfield = TerrainHeightFieldHeights[geom];
proceed = true;
}
else
{
geomDestroyList.Add(geom);
}
}
if (proceed)
{
m_worldOffset = Vector3.Zero;
WorldExtents = new Vector2((int)Constants.RegionSize, (int)Constants.RegionSize);
m_parentScene = null;
foreach (IntPtr g in geomDestroyList)
{
// removingHeightField needs to be done or the garbage collector will
// collect the terrain data before we tell ODE to destroy it causing
// memory corruption
if (TerrainHeightFieldHeights.ContainsKey(g))
{
float[] removingHeightField = TerrainHeightFieldHeights[g];
TerrainHeightFieldHeights.Remove(g);
if (RegionTerrain.ContainsKey(g))
{
RegionTerrain.Remove(g);
}
d.GeomDestroy(g);
removingHeightField = new float[0];
}
}
}
else
{
m_log.Warn("[PHYSICS]: Couldn't proceed with UnCombine. Region has inconsistant data.");
}
}
}
}
public override void SetWaterLevel(float baseheight) public override void SetWaterLevel(float baseheight)

View File

@ -43,11 +43,11 @@ namespace OpenSim.Tests.Common.Mock
} }
private IUserDataPlugin m_userDataPlugin; private IUserDataPlugin m_userDataPlugin;
public IInventoryDataPlugin InventoryDataPlugin // public IInventoryDataPlugin InventoryDataPlugin
{ // {
get { return m_inventoryDataPlugin; } // get { return m_inventoryDataPlugin; }
} // }
private IInventoryDataPlugin m_inventoryDataPlugin; // private IInventoryDataPlugin m_inventoryDataPlugin;
public TestCommunicationsManager() public TestCommunicationsManager()
: this(null) : this(null)

View File

@ -163,7 +163,7 @@ namespace OpenSim.Tests.Common.Setup
godsModule.Initialise(testScene, new IniConfigSource()); godsModule.Initialise(testScene, new IniConfigSource());
testScene.AddModule(godsModule.Name, godsModule); testScene.AddModule(godsModule.Name, godsModule);
realServices = realServices.ToLower(); realServices = realServices.ToLower();
IConfigSource config = new IniConfigSource(); // IConfigSource config = new IniConfigSource();
// If we have a brand new scene, need to initialize shared region modules // If we have a brand new scene, need to initialize shared region modules
if ((m_assetService == null && m_inventoryService == null) || newScene) if ((m_assetService == null && m_inventoryService == null) || newScene)

View File

@ -1375,6 +1375,8 @@
[J2KDecoder] [J2KDecoder]
;CacheDir = "./j2kDecodeCache" ;CacheDir = "./j2kDecodeCache"
; Time in minutes before cached decodes expire. Set to 0 for no expiration. Default is 720 minutes.
;CacheTimeout = 720 ;CacheTimeout = 720
;; ;;