seems to compile ( tests comented out)
parent
371c9dd2af
commit
a11edceb00
|
@ -1296,7 +1296,7 @@ namespace OpenSim.Groups
|
||||||
presence.Grouptitle = Title;
|
presence.Grouptitle = Title;
|
||||||
|
|
||||||
if (! presence.IsChildAgent)
|
if (! presence.IsChildAgent)
|
||||||
presence.SendAvatarDataToAllClients();
|
presence.SendAvatarDataToAllAgents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,23 +25,28 @@
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.IO;
|
||||||
|
using System.Web;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.Imaging;
|
using OpenMetaverse.StructuredData;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using System;
|
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Web;
|
|
||||||
|
|
||||||
namespace OpenSim.Capabilities.Handlers
|
namespace OpenSim.Capabilities.Handlers
|
||||||
{
|
{
|
||||||
public class GetMeshHandler : BaseStreamHandler
|
public class GetMeshHandler
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -53,9 +58,6 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
public GetMeshHandler(IAssetService assService)
|
public GetMeshHandler(IAssetService assService)
|
||||||
{
|
{
|
||||||
m_assetService = assService;
|
m_assetService = assService;
|
||||||
m_RedirectURL = redirectURL;
|
|
||||||
if (m_RedirectURL != null && !m_RedirectURL.EndsWith("/"))
|
|
||||||
m_RedirectURL += "/";
|
|
||||||
}
|
}
|
||||||
public Hashtable Handle(Hashtable request)
|
public Hashtable Handle(Hashtable request)
|
||||||
{
|
{
|
||||||
|
@ -96,107 +98,38 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
}
|
}
|
||||||
public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap)
|
public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap)
|
||||||
{
|
{
|
||||||
// Try to parse the texture ID from the request URL
|
Hashtable responsedata = new Hashtable();
|
||||||
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
responsedata["int_response_code"] = 400; //501; //410; //404;
|
||||||
string textureStr = query.GetOne("mesh_id");
|
responsedata["content_type"] = "text/plain";
|
||||||
|
responsedata["keepalive"] = false;
|
||||||
|
responsedata["str_response_string"] = "Request wasn't what was expected";
|
||||||
responsedata["reusecontext"] = false;
|
responsedata["reusecontext"] = false;
|
||||||
responsedata["int_lod"] = 0;
|
responsedata["int_lod"] = 0;
|
||||||
responsedata["int_bytes"] = 0;
|
responsedata["int_bytes"] = 0;
|
||||||
|
|
||||||
|
string meshStr = string.Empty;
|
||||||
|
|
||||||
|
if (request.ContainsKey("mesh_id"))
|
||||||
|
meshStr = request["mesh_id"].ToString();
|
||||||
|
|
||||||
|
UUID meshID = UUID.Zero;
|
||||||
|
if (!String.IsNullOrEmpty(meshStr) && UUID.TryParse(meshStr, out meshID))
|
||||||
|
{
|
||||||
if (m_assetService == null)
|
if (m_assetService == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[GETMESH]: Cannot fetch mesh " + textureStr + " without an asset service");
|
responsedata["int_response_code"] = 404; //501; //410; //404;
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
responsedata["content_type"] = "text/plain";
|
||||||
|
responsedata["keepalive"] = false;
|
||||||
|
responsedata["str_response_string"] = "The asset service is unavailable. So is your mesh.";
|
||||||
|
responsedata["reusecontext"] = false;
|
||||||
|
return responsedata;
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID meshID;
|
AssetBase mesh = m_assetService.Get(meshID.ToString());
|
||||||
if (!String.IsNullOrEmpty(textureStr) && UUID.TryParse(textureStr, out meshID))
|
|
||||||
{
|
|
||||||
// OK, we have an array with preferred formats, possibly with only one entry
|
|
||||||
|
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
|
||||||
AssetBase mesh;
|
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(m_RedirectURL))
|
|
||||||
{
|
|
||||||
// Only try to fetch locally cached meshes. Misses are redirected
|
|
||||||
mesh = m_assetService.GetCached(meshID.ToString());
|
|
||||||
|
|
||||||
if (mesh != null)
|
if (mesh != null)
|
||||||
{
|
{
|
||||||
if (mesh.Type != (sbyte)AssetType.Mesh)
|
if (mesh.Type == (SByte)AssetType.Mesh)
|
||||||
{
|
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
|
||||||
}
|
|
||||||
WriteMeshData(httpRequest, httpResponse, mesh);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string textureUrl = m_RedirectURL + "?mesh_id="+ meshID.ToString();
|
|
||||||
m_log.Debug("[GETMESH]: Redirecting mesh request to " + textureUrl);
|
|
||||||
httpResponse.StatusCode = (int)OSHttpStatusCode.RedirectMovedPermanently;
|
|
||||||
httpResponse.RedirectLocation = textureUrl;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // no redirect
|
|
||||||
{
|
|
||||||
// try the cache
|
|
||||||
mesh = m_assetService.GetCached(meshID.ToString());
|
|
||||||
|
|
||||||
if (mesh == null)
|
|
||||||
{
|
|
||||||
// Fetch locally or remotely. Misses return a 404
|
|
||||||
mesh = m_assetService.Get(meshID.ToString());
|
|
||||||
|
|
||||||
if (mesh != null)
|
|
||||||
{
|
|
||||||
if (mesh.Type != (sbyte)AssetType.Mesh)
|
|
||||||
{
|
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
WriteMeshData(httpRequest, httpResponse, mesh);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // it was on the cache
|
|
||||||
{
|
|
||||||
if (mesh.Type != (sbyte)AssetType.Mesh)
|
|
||||||
{
|
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
WriteMeshData(httpRequest, httpResponse, mesh);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// not found
|
|
||||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.Warn("[GETTEXTURE]: Failed to parse a mesh_id from GetMesh request: " + httpRequest.Url);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WriteMeshData(IOSHttpRequest request, IOSHttpResponse response, AssetBase texture)
|
|
||||||
{
|
|
||||||
string range = request.Headers.GetOne("Range");
|
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(range))
|
|
||||||
{
|
|
||||||
// Range request
|
|
||||||
int start, end;
|
|
||||||
if (TryParseRange(range, out start, out end))
|
|
||||||
{
|
|
||||||
// Before clamping start make sure we can satisfy it in order to avoid
|
|
||||||
// sending back the last byte instead of an error status
|
|
||||||
if (start >= texture.Data.Length)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
Hashtable headers = new Hashtable();
|
Hashtable headers = new Hashtable();
|
||||||
|
@ -252,7 +185,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
|
|
||||||
if (start == 0 && len == mesh.Data.Length) // well redudante maybe
|
if (start == 0 && len == mesh.Data.Length) // well redudante maybe
|
||||||
{
|
{
|
||||||
responsedata["int_response_code"] = (int) System.Net.HttpStatusCode.OK;
|
responsedata["int_response_code"] = (int)System.Net.HttpStatusCode.OK;
|
||||||
responsedata["bin_response_data"] = mesh.Data;
|
responsedata["bin_response_data"] = mesh.Data;
|
||||||
responsedata["int_bytes"] = mesh.Data.Length;
|
responsedata["int_bytes"] = mesh.Data.Length;
|
||||||
responsedata["reusecontext"] = false;
|
responsedata["reusecontext"] = false;
|
||||||
|
@ -262,7 +195,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
responsedata["int_response_code"] =
|
responsedata["int_response_code"] =
|
||||||
(int) System.Net.HttpStatusCode.PartialContent;
|
(int)System.Net.HttpStatusCode.PartialContent;
|
||||||
headers["Content-Range"] = String.Format("bytes {0}-{1}/{2}", start, end,
|
headers["Content-Range"] = String.Format("bytes {0}-{1}/{2}", start, end,
|
||||||
mesh.Data.Length);
|
mesh.Data.Length);
|
||||||
|
|
||||||
|
@ -293,6 +226,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
responsedata["int_lod"] = 3;
|
responsedata["int_lod"] = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Optionally add additional mesh types here
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
responsedata["int_response_code"] = 404; //501; //410; //404;
|
responsedata["int_response_code"] = 404; //501; //410; //404;
|
||||||
|
@ -315,58 +249,8 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
return responsedata;
|
return responsedata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// Full content request
|
|
||||||
response.StatusCode = (int)System.Net.HttpStatusCode.OK;
|
|
||||||
response.ContentLength = texture.Data.Length;
|
|
||||||
response.ContentType = "application/vnd.ll.mesh";
|
|
||||||
response.Body.Write(texture.Data, 0, texture.Data.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
return responsedata;
|
||||||
/// Parse a range header.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// As per http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,
|
|
||||||
/// this obeys range headers with two values (e.g. 533-4165) and no second value (e.g. 533-).
|
|
||||||
/// Where there is no value, -1 is returned.
|
|
||||||
/// FIXME: Need to cover the case where only a second value is specified (e.g. -4165), probably by returning -1
|
|
||||||
/// for start.</remarks>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <param name='header'></param>
|
|
||||||
/// <param name='start'>Start of the range. Undefined if this was not a number.</param>
|
|
||||||
/// <param name='end'>End of the range. Will be -1 if no end specified. Undefined if there was a raw string but this was not a number.</param>
|
|
||||||
private bool TryParseRange(string header, out int start, out int end)
|
|
||||||
{
|
|
||||||
start = end = 0;
|
|
||||||
|
|
||||||
if (header.StartsWith("bytes="))
|
|
||||||
{
|
|
||||||
string[] rangeValues = header.Substring(6).Split('-');
|
|
||||||
|
|
||||||
if (rangeValues.Length == 2)
|
|
||||||
{
|
|
||||||
if (!Int32.TryParse(rangeValues[0], out start))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
string rawEnd = rangeValues[1];
|
|
||||||
|
|
||||||
if (rawEnd == "")
|
|
||||||
{
|
|
||||||
end = -1;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (Int32.TryParse(rawEnd, out end))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
start = end = 0;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
private bool TryParseRange(string header, out int start, out int end)
|
private bool TryParseRange(string header, out int start, out int end)
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,13 +64,15 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
|
|
||||||
string rurl = serverConfig.GetString("GetMeshRedirectURL");
|
string rurl = serverConfig.GetString("GetMeshRedirectURL");
|
||||||
|
|
||||||
server.AddStreamHandler(
|
GetMeshHandler gmeshHandler = new GetMeshHandler(m_AssetService);
|
||||||
new GetTextureHandler("/CAPS/GetMesh/" /*+ UUID.Random() */, m_AssetService, "GetMesh", null, rurl));
|
IRequestHandler reqHandler
|
||||||
|
= new RestHTTPHandler(
|
||||||
rurl = serverConfig.GetString("GetMesh2RedirectURL");
|
"GET",
|
||||||
|
"/CAPS/" + UUID.Random(),
|
||||||
server.AddStreamHandler(
|
httpMethod => gmeshHandler.ProcessGetMesh(httpMethod, UUID.Zero, null),
|
||||||
new GetTextureHandler("/CAPS/GetMesh2/" /*+ UUID.Random() */, m_AssetService, "GetMesh2", null, rurl));
|
"GetMesh",
|
||||||
|
null);
|
||||||
|
server.AddStreamHandler(reqHandler); ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -63,9 +63,6 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
public GetTextureHandler(IAssetService assService)
|
public GetTextureHandler(IAssetService assService)
|
||||||
{
|
{
|
||||||
m_assetService = assService;
|
m_assetService = assService;
|
||||||
m_RedirectURL = redirectURL;
|
|
||||||
if (m_RedirectURL != null && !m_RedirectURL.EndsWith("/"))
|
|
||||||
m_RedirectURL += "/";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hashtable Handle(Hashtable request)
|
public Hashtable Handle(Hashtable request)
|
||||||
|
|
|
@ -66,7 +66,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
string rurl = serverConfig.GetString("GetTextureRedirectURL");
|
string rurl = serverConfig.GetString("GetTextureRedirectURL");
|
||||||
;
|
;
|
||||||
server.AddStreamHandler(
|
server.AddStreamHandler(
|
||||||
new GetTextureHandler("/CAPS/GetTexture/" /*+ UUID.Random() */, m_AssetService, "GetTexture", null, rurl));
|
new GetTextureHandler("/CAPS/GetTexture/" */ /*+ UUID.Random() */ /*, m_AssetService, "GetTexture", null, rurl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,8 @@ namespace OpenSim.Data
|
||||||
bool UpdateAvatarProperties(ref UserProfileProperties props, ref string result);
|
bool UpdateAvatarProperties(ref UserProfileProperties props, ref string result);
|
||||||
bool UpdateAvatarInterests(UserProfileProperties up, ref string result);
|
bool UpdateAvatarInterests(UserProfileProperties up, ref string result);
|
||||||
bool GetClassifiedInfo(ref UserClassifiedAdd ad, ref string result);
|
bool GetClassifiedInfo(ref UserClassifiedAdd ad, ref string result);
|
||||||
|
bool UpdateUserPreferences(ref UserPreferences pref, ref string result);
|
||||||
|
bool GetUserPreferences(ref UserPreferences pref, ref string result);
|
||||||
bool GetUserAppData(ref UserAppData props, ref string result);
|
bool GetUserAppData(ref UserAppData props, ref string result);
|
||||||
bool SetUserAppData(UserAppData props, ref string result);
|
bool SetUserAppData(UserAppData props, ref string result);
|
||||||
OSDArray GetUserImageAssets(UUID avatarId);
|
OSDArray GetUserImageAssets(UUID avatarId);
|
||||||
|
|
|
@ -184,35 +184,6 @@ namespace OpenSim.Data.MySQL
|
||||||
asset.Description, asset.ID, asset.Description.Length, assetDescription.Length);
|
asset.Description, asset.ID, asset.Description.Length, assetDescription.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (cmd)
|
|
||||||
{
|
|
||||||
// create unix epoch time
|
|
||||||
int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow);
|
|
||||||
cmd.Parameters.AddWithValue("?id", asset.ID);
|
|
||||||
cmd.Parameters.AddWithValue("?name", assetName);
|
|
||||||
cmd.Parameters.AddWithValue("?description", assetDescription);
|
|
||||||
cmd.Parameters.AddWithValue("?assetType", asset.Type);
|
|
||||||
cmd.Parameters.AddWithValue("?local", asset.Local);
|
|
||||||
cmd.Parameters.AddWithValue("?temporary", asset.Temporary);
|
|
||||||
cmd.Parameters.AddWithValue("?create_time", now);
|
|
||||||
cmd.Parameters.AddWithValue("?access_time", now);
|
|
||||||
cmd.Parameters.AddWithValue("?CreatorID", asset.Metadata.CreatorID);
|
|
||||||
cmd.Parameters.AddWithValue("?asset_flags", (int)asset.Flags);
|
|
||||||
cmd.Parameters.AddWithValue("?data", asset.Data);
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
string assetDescription = asset.Description;
|
|
||||||
if (asset.Description.Length > 64)
|
|
||||||
{
|
|
||||||
assetDescription = asset.Description.Substring(0, 64);
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[ASSET DB]: Description '{0}' for asset {1} truncated from {2} to {3} characters on add",
|
|
||||||
asset.Description, asset.ID, asset.Description.Length, assetDescription.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (cmd)
|
using (cmd)
|
||||||
|
@ -234,6 +205,7 @@ namespace OpenSim.Data.MySQL
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
|
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
|
||||||
|
@ -241,15 +213,6 @@ namespace OpenSim.Data.MySQL
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.Error(
|
|
||||||
string.Format(
|
|
||||||
"[ASSET DB]: MySQL failure creating asset {0} with name {1}. Exception ",
|
|
||||||
asset.FullID, asset.Name)
|
|
||||||
, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1086,45 +1086,6 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
dbcon.Open();
|
dbcon.Open();
|
||||||
|
|
||||||
using (MySqlCommand cmd = dbcon.CreateCommand())
|
|
||||||
{
|
|
||||||
cmd.CommandText = "replace into regionsettings (regionUUID, " +
|
|
||||||
"block_terraform, block_fly, allow_damage, " +
|
|
||||||
"restrict_pushing, allow_land_resell, " +
|
|
||||||
"allow_land_join_divide, block_show_in_search, " +
|
|
||||||
"agent_limit, object_bonus, maturity, " +
|
|
||||||
"disable_scripts, disable_collisions, " +
|
|
||||||
"disable_physics, terrain_texture_1, " +
|
|
||||||
"terrain_texture_2, terrain_texture_3, " +
|
|
||||||
"terrain_texture_4, elevation_1_nw, " +
|
|
||||||
"elevation_2_nw, elevation_1_ne, " +
|
|
||||||
"elevation_2_ne, elevation_1_se, " +
|
|
||||||
"elevation_2_se, elevation_1_sw, " +
|
|
||||||
"elevation_2_sw, water_height, " +
|
|
||||||
"terrain_raise_limit, terrain_lower_limit, " +
|
|
||||||
"use_estate_sun, fixed_sun, sun_position, " +
|
|
||||||
"covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " +
|
|
||||||
"sunvectorz, loaded_creation_datetime, " +
|
|
||||||
"loaded_creation_id, map_tile_ID, " +
|
|
||||||
"TelehubObject, parcel_tile_ID) " +
|
|
||||||
"values (?RegionUUID, ?BlockTerraform, " +
|
|
||||||
"?BlockFly, ?AllowDamage, ?RestrictPushing, " +
|
|
||||||
"?AllowLandResell, ?AllowLandJoinDivide, " +
|
|
||||||
"?BlockShowInSearch, ?AgentLimit, ?ObjectBonus, " +
|
|
||||||
"?Maturity, ?DisableScripts, ?DisableCollisions, " +
|
|
||||||
"?DisablePhysics, ?TerrainTexture1, " +
|
|
||||||
"?TerrainTexture2, ?TerrainTexture3, " +
|
|
||||||
"?TerrainTexture4, ?Elevation1NW, ?Elevation2NW, " +
|
|
||||||
"?Elevation1NE, ?Elevation2NE, ?Elevation1SE, " +
|
|
||||||
"?Elevation2SE, ?Elevation1SW, ?Elevation2SW, " +
|
|
||||||
"?WaterHeight, ?TerrainRaiseLimit, " +
|
|
||||||
"?TerrainLowerLimit, ?UseEstateSun, ?FixedSun, " +
|
|
||||||
"?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " +
|
|
||||||
"?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
|
|
||||||
"?LoadedCreationDateTime, ?LoadedCreationID, " +
|
|
||||||
"?TerrainImageID, " +
|
|
||||||
"?TelehubObject, ?ParcelImageID)";
|
|
||||||
|
|
||||||
using (MySqlCommand cmd = dbcon.CreateCommand())
|
using (MySqlCommand cmd = dbcon.CreateCommand())
|
||||||
{
|
{
|
||||||
cmd.CommandText = "replace into regionsettings (regionUUID, " +
|
cmd.CommandText = "replace into regionsettings (regionUUID, " +
|
||||||
|
@ -1166,10 +1127,10 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
ExecuteNonQuery(cmd);
|
ExecuteNonQuery(cmd);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
SaveSpawnPoints(rs);
|
SaveSpawnPoints(rs);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public virtual List<LandData> LoadLandObjects(UUID regionUUID)
|
public virtual List<LandData> LoadLandObjects(UUID regionUUID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -896,7 +896,7 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
|
|
||||||
#region User Preferences
|
#region User Preferences
|
||||||
public OSDArray GetUserPreferences(UUID avatarId)
|
public bool GetUserPreferences(ref UserPreferences pref, ref string result)
|
||||||
{
|
{
|
||||||
string query = string.Empty;
|
string query = string.Empty;
|
||||||
|
|
||||||
|
@ -913,19 +913,16 @@ namespace OpenSim.Data.MySQL
|
||||||
dbcon.Open();
|
dbcon.Open();
|
||||||
using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
|
using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
|
||||||
{
|
{
|
||||||
cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
|
cmd.Parameters.AddWithValue("?Id", pref.UserId.ToString());
|
||||||
|
|
||||||
using (MySqlDataReader reader = cmd.ExecuteReader())
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
||||||
{
|
{
|
||||||
if(reader.HasRows)
|
if (reader.HasRows)
|
||||||
{
|
{
|
||||||
reader.Read();
|
reader.Read();
|
||||||
OSDMap record = new OSDMap();
|
bool.TryParse((string)reader["imviaemail"], out pref.IMViaEmail);
|
||||||
|
bool.TryParse((string)reader["visible"], out pref.Visible);
|
||||||
record.Add("imviaemail",OSD.FromString((string)reader["imviaemail"]));
|
pref.EMail = (string)reader["email"];
|
||||||
record.Add("visible",OSD.FromString((string)reader["visible"]));
|
|
||||||
record.Add("email",OSD.FromString((string)reader["email"]));
|
|
||||||
data.Add(record);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -938,8 +935,8 @@ namespace OpenSim.Data.MySQL
|
||||||
using (MySqlCommand put = new MySqlCommand(query, dbcon))
|
using (MySqlCommand put = new MySqlCommand(query, dbcon))
|
||||||
{
|
{
|
||||||
|
|
||||||
// put.Parameters.AddWithValue("?Email", pref.EMail);
|
put.Parameters.AddWithValue("?Email", pref.EMail);
|
||||||
// put.Parameters.AddWithValue("?uuid", pref.UserId.ToString());
|
put.Parameters.AddWithValue("?uuid", pref.UserId.ToString());
|
||||||
|
|
||||||
put.ExecuteNonQuery();
|
put.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
|
@ -952,15 +949,17 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[PROFILES_DATA]" +
|
m_log.ErrorFormat("[PROFILES_DATA]" +
|
||||||
": Get preferences exception {0}", e.Message);
|
": Get preferences exception {0}", e.Message);
|
||||||
|
result = e.Message;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return data;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool UpdateUserPreferences(bool emailIm, bool visible, UUID avatarId )
|
public bool UpdateUserPreferences(ref UserPreferences pref, ref string result)
|
||||||
{
|
{
|
||||||
string query = string.Empty;
|
string query = string.Empty;
|
||||||
|
|
||||||
query += "UPDATE userpsettings SET ";
|
query += "UPDATE usersettings SET ";
|
||||||
query += "imviaemail=?ImViaEmail, ";
|
query += "imviaemail=?ImViaEmail, ";
|
||||||
query += "visible=?Visible, ";
|
query += "visible=?Visible, ";
|
||||||
query += "email=?EMail ";
|
query += "email=?EMail ";
|
||||||
|
@ -986,6 +985,7 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[PROFILES_DATA]" +
|
m_log.ErrorFormat("[PROFILES_DATA]" +
|
||||||
": UserPreferencesUpdate exception {0} {1}", e.Message, e.InnerException);
|
": UserPreferencesUpdate exception {0} {1}", e.Message, e.InnerException);
|
||||||
|
result = e.Message;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -2227,6 +2227,11 @@ namespace OpenSim.Data.PGSQL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UUID[] GetObjectIDs(UUID regionID)
|
||||||
|
{
|
||||||
|
return new UUID[0];
|
||||||
|
}
|
||||||
|
|
||||||
public void SaveExtra(UUID regionID, string name, string value)
|
public void SaveExtra(UUID regionID, string name, string value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -2013,7 +2013,7 @@ namespace OpenSim.Data.SQLite
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -741,7 +741,7 @@ namespace OpenSim.Data.SQLite
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
public bool UpdateUserPreferences(ref UserPreferences pref, ref string result)
|
public bool UpdateUserPreferences(ref UserPreferences pref, ref string result)
|
||||||
{
|
{
|
||||||
string query = string.Empty;
|
string query = string.Empty;
|
||||||
|
@ -826,7 +826,6 @@ namespace OpenSim.Data.SQLite
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
public bool GetUserAppData(ref UserAppData props, ref string result)
|
public bool GetUserAppData(ref UserAppData props, ref string result)
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,12 +150,8 @@ namespace OpenSim.Framework
|
||||||
Type == (sbyte)AssetType.Folder ||
|
Type == (sbyte)AssetType.Folder ||
|
||||||
Type == (sbyte)AssetType.ImageJPEG ||
|
Type == (sbyte)AssetType.ImageJPEG ||
|
||||||
Type == (sbyte)AssetType.ImageTGA ||
|
Type == (sbyte)AssetType.ImageTGA ||
|
||||||
<<<<<<< HEAD
|
|
||||||
Type == (sbyte)AssetType.LSLBytecode);
|
|
||||||
=======
|
|
||||||
Type == (sbyte)AssetType.Mesh ||
|
Type == (sbyte)AssetType.Mesh ||
|
||||||
Type == (sbyte) AssetType.LSLBytecode);
|
Type == (sbyte) AssetType.LSLBytecode);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -395,26 +395,7 @@ namespace OpenSim.Framework.Communications
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
using (Stream src = _response.GetResponseStream())
|
|
||||||
{
|
|
||||||
int length = src.Read(_readbuf, 0, BufferSize);
|
|
||||||
while (length > 0)
|
|
||||||
{
|
|
||||||
_resource.Write(_readbuf, 0, length);
|
|
||||||
length = src.Read(_readbuf, 0, BufferSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO! Implement timeout, without killing the server
|
|
||||||
// this line implements the timeout, if there is a timeout, the callback fires and the request becomes aborted
|
|
||||||
//ThreadPool.RegisterWaitForSingleObject(responseAsyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), _request, DefaultTimeout, true);
|
|
||||||
|
|
||||||
// _allDone.WaitOne();
|
|
||||||
if (_response != null)
|
|
||||||
_response.Close();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (_asyncException != null)
|
if (_asyncException != null)
|
||||||
throw _asyncException;
|
throw _asyncException;
|
||||||
|
|
||||||
|
@ -444,7 +425,6 @@ namespace OpenSim.Framework.Communications
|
||||||
auth.AddAuthorization(_request.Headers);
|
auth.AddAuthorization(_request.Headers);
|
||||||
|
|
||||||
src.Seek(0, SeekOrigin.Begin);
|
src.Seek(0, SeekOrigin.Begin);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
int reqnum = WebUtil.RequestNumber++;
|
int reqnum = WebUtil.RequestNumber++;
|
||||||
if (WebUtil.DebugLevel >= 3)
|
if (WebUtil.DebugLevel >= 3)
|
||||||
|
@ -452,16 +432,7 @@ namespace OpenSim.Framework.Communications
|
||||||
if (WebUtil.DebugLevel >= 5)
|
if (WebUtil.DebugLevel >= 5)
|
||||||
WebUtil.LogOutgoingDetail(string.Format("SEND {0}: ", reqnum), src);
|
WebUtil.LogOutgoingDetail(string.Format("SEND {0}: ", reqnum), src);
|
||||||
|
|
||||||
Stream dst = _request.GetRequestStream();
|
|
||||||
|
|
||||||
byte[] buf = new byte[1024];
|
|
||||||
int length = src.Read(buf, 0, 1024);
|
|
||||||
while (length > 0)
|
|
||||||
=======
|
|
||||||
m_log.Info("[REST]: Seek is ok");
|
|
||||||
|
|
||||||
using (Stream dst = _request.GetRequestStream())
|
using (Stream dst = _request.GetRequestStream())
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_log.Info("[REST]: GetRequestStream is ok");
|
m_log.Info("[REST]: GetRequestStream is ok");
|
||||||
|
|
||||||
|
|
|
@ -363,13 +363,26 @@ namespace OpenSim.Framework
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsBanned(UUID avatarID)
|
||||||
|
{
|
||||||
|
if (!IsEstateManagerOrOwner(avatarID))
|
||||||
|
{
|
||||||
|
foreach (EstateBan ban in l_EstateBans)
|
||||||
|
if (ban.BannedUserID == avatarID)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsBanned(UUID avatarID, int userFlags)
|
public bool IsBanned(UUID avatarID, int userFlags)
|
||||||
|
{
|
||||||
|
if (!IsEstateManagerOrOwner(avatarID))
|
||||||
{
|
{
|
||||||
foreach (EstateBan ban in l_EstateBans)
|
foreach (EstateBan ban in l_EstateBans)
|
||||||
if (ban.BannedUserID == avatarID)
|
if (ban.BannedUserID == avatarID)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!IsEstateManagerOrOwner(avatarID) && !HasAccess(avatarID))
|
if (!HasAccess(avatarID))
|
||||||
{
|
{
|
||||||
if (DenyMinors)
|
if (DenyMinors)
|
||||||
{
|
{
|
||||||
|
@ -386,7 +399,7 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,18 +65,13 @@ namespace OpenSim.Framework
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
AvatarAppearance Appearance { get; set; }
|
AvatarAppearance Appearance { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set if initial data about the scene (avatars, objects) has been sent to the client.
|
|
||||||
/// </summary>
|
|
||||||
bool SentInitialDataToClient { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send initial scene data to the client controlling this agent
|
/// Send initial scene data to the client controlling this agent
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// This includes scene object data and the appearance data of other avatars.
|
/// This includes scene object data and the appearance data of other avatars.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
void SendInitialDataToClient();
|
void SendInitialDataToMe();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Direction in which the scene presence is looking.
|
/// Direction in which the scene presence is looking.
|
||||||
|
|
|
@ -245,15 +245,6 @@ namespace OpenSim.Framework
|
||||||
// occasionally seems to corrupt its addin cache
|
// occasionally seems to corrupt its addin cache
|
||||||
// Hence, as a temporary solution we'll remove it before each startup
|
// Hence, as a temporary solution we'll remove it before each startup
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (Directory.Exists(dir + "/addin-db-000"))
|
|
||||||
Directory.Delete(dir + "/addin-db-000", true);
|
|
||||||
|
|
||||||
if (Directory.Exists(dir + "/addin-db-001"))
|
|
||||||
Directory.Delete(dir + "/addin-db-001", true);
|
|
||||||
=======
|
|
||||||
string customDir = Environment.GetEnvironmentVariable ("MONO_ADDINS_REGISTRY");
|
string customDir = Environment.GetEnvironmentVariable ("MONO_ADDINS_REGISTRY");
|
||||||
string v0 = "addin-db-000";
|
string v0 = "addin-db-000";
|
||||||
string v1 = "addin-db-001";
|
string v1 = "addin-db-001";
|
||||||
|
@ -269,7 +260,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
if (Directory.Exists(v1))
|
if (Directory.Exists(v1))
|
||||||
Directory.Delete(v1, true);
|
Directory.Delete(v1, true);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
|
|
|
@ -102,12 +102,11 @@ namespace OpenSim.Framework
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private static readonly string LogHeader = "[REGION INFO]";
|
private static readonly string LogHeader = "[REGION INFO]";
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
public bool commFailTF = false;
|
public bool commFailTF = false;
|
||||||
public ConfigurationMember configMember;
|
public ConfigurationMember configMember;
|
||||||
public string DataStore = String.Empty;
|
public string DataStore = String.Empty;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public string RegionFile = String.Empty;
|
public string RegionFile = String.Empty;
|
||||||
public bool isSandbox = false;
|
public bool isSandbox = false;
|
||||||
public bool Persistent = true;
|
public bool Persistent = true;
|
||||||
|
@ -534,11 +533,7 @@ namespace OpenSim.Framework
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private void SetExtraSetting(string key, string value)
|
|
||||||
=======
|
|
||||||
public void SetExtraSetting(string key, string value)
|
public void SetExtraSetting(string key, string value)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
string keylower = key.ToLower();
|
string keylower = key.ToLower();
|
||||||
m_extraSettings[keylower] = value;
|
m_extraSettings[keylower] = value;
|
||||||
|
@ -834,22 +829,16 @@ namespace OpenSim.Framework
|
||||||
string location = String.Format("{0},{1}", RegionLocX, RegionLocY);
|
string location = String.Format("{0},{1}", RegionLocX, RegionLocY);
|
||||||
config.Set("Location", location);
|
config.Set("Location", location);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (RegionSizeX > 0)
|
|
||||||
=======
|
|
||||||
if (DataStore != String.Empty)
|
if (DataStore != String.Empty)
|
||||||
config.Set("Datastore", DataStore);
|
config.Set("Datastore", DataStore);
|
||||||
|
|
||||||
if (RegionSizeX != Constants.RegionSize || RegionSizeY != Constants.RegionSize)
|
if (RegionSizeX != Constants.RegionSize || RegionSizeY != Constants.RegionSize)
|
||||||
{
|
{
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
config.Set("SizeX", RegionSizeX);
|
config.Set("SizeX", RegionSizeX);
|
||||||
|
|
||||||
if (RegionSizeY > 0)
|
|
||||||
config.Set("SizeY", RegionSizeY);
|
config.Set("SizeY", RegionSizeY);
|
||||||
|
// if (RegionSizeZ > 0)
|
||||||
// if (RegionSizeZ > 0)
|
// config.Set("SizeZ", RegionSizeZ);
|
||||||
// config.Set("SizeZ", RegionSizeZ);
|
}
|
||||||
|
|
||||||
config.Set("InternalAddress", m_internalEndPoint.Address.ToString());
|
config.Set("InternalAddress", m_internalEndPoint.Address.ToString());
|
||||||
config.Set("InternalPort", m_internalEndPoint.Port);
|
config.Set("InternalPort", m_internalEndPoint.Port);
|
||||||
|
@ -920,8 +909,6 @@ namespace OpenSim.Framework
|
||||||
throw new Exception("Invalid file type for region persistence.");
|
throw new Exception("Invalid file type for region persistence.");
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
public void loadConfigurationOptionsFromMe()
|
public void loadConfigurationOptionsFromMe()
|
||||||
{
|
{
|
||||||
configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE,
|
configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE,
|
||||||
|
@ -984,7 +971,7 @@ namespace OpenSim.Framework
|
||||||
"Max prims an object will hold", m_linksetCapacity.ToString(), true);
|
"Max prims an object will hold", m_linksetCapacity.ToString(), true);
|
||||||
|
|
||||||
configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
|
configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
|
||||||
"Max avatars this sim will hold", m_agentCapacity.ToString(), true);
|
"Max avatars this sim will hold",AgentCapacity.ToString(), true);
|
||||||
|
|
||||||
configMember.addConfigurationOption("scope_id", ConfigurationOption.ConfigurationTypes.TYPE_UUID,
|
configMember.addConfigurationOption("scope_id", ConfigurationOption.ConfigurationTypes.TYPE_UUID,
|
||||||
"Scope ID for this region", ScopeID.ToString(), true);
|
"Scope ID for this region", ScopeID.ToString(), true);
|
||||||
|
@ -1131,7 +1118,7 @@ namespace OpenSim.Framework
|
||||||
m_linksetCapacity = (int)configuration_result;
|
m_linksetCapacity = (int)configuration_result;
|
||||||
break;
|
break;
|
||||||
case "agent_capacity":
|
case "agent_capacity":
|
||||||
m_agentCapacity = (int)configuration_result;
|
AgentCapacity = (int)configuration_result;
|
||||||
break;
|
break;
|
||||||
case "scope_id":
|
case "scope_id":
|
||||||
ScopeID = (UUID)configuration_result;
|
ScopeID = (UUID)configuration_result;
|
||||||
|
@ -1147,7 +1134,7 @@ namespace OpenSim.Framework
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public void SaveLastMapUUID(UUID mapUUID)
|
public void SaveLastMapUUID(UUID mapUUID)
|
||||||
{
|
{
|
||||||
lastMapUUID = mapUUID;
|
lastMapUUID = mapUUID;
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace OpenSim.Framework.RegionLoader.Web
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IConfig startupConfig = (IConfig) m_configSource.Configs["Startup"];
|
IConfig startupConfig = (IConfig)m_configSource.Configs["Startup"];
|
||||||
string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim();
|
string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim();
|
||||||
bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false);
|
bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false);
|
||||||
|
|
||||||
|
@ -69,17 +69,17 @@ namespace OpenSim.Framework.RegionLoader.Web
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while(tries > 0)
|
while (tries > 0)
|
||||||
{
|
{
|
||||||
RegionInfo[] regionInfos = new RegionInfo[] {};
|
RegionInfo[] regionInfos = new RegionInfo[] { };
|
||||||
int regionCount = 0;
|
int regionCount = 0;
|
||||||
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
|
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||||
webRequest.Timeout = 30000; //30 Second Timeout
|
webRequest.Timeout = 30000; //30 Second Timeout
|
||||||
m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
|
m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
|
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
|
||||||
m_log.Debug("[WEBLOADER]: Downloading region information...");
|
m_log.Debug("[WEBLOADER]: Downloading region information...");
|
||||||
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
|
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
|
||||||
string xmlSource = String.Empty;
|
string xmlSource = String.Empty;
|
||||||
|
@ -105,7 +105,7 @@ namespace OpenSim.Framework.RegionLoader.Web
|
||||||
{
|
{
|
||||||
m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
|
m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
|
||||||
regionInfos[i] =
|
regionInfos[i] =
|
||||||
new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource);
|
new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i], false, m_configSource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,39 +121,12 @@ namespace OpenSim.Framework.RegionLoader.Web
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " +
|
|
||||||
xmlSource.Length);
|
|
||||||
XmlDocument xmlDoc = new XmlDocument();
|
|
||||||
xmlDoc.LoadXml(xmlSource);
|
|
||||||
if (xmlDoc.FirstChild.Name == "Nini")
|
|
||||||
{
|
|
||||||
regionCount = xmlDoc.FirstChild.ChildNodes.Count;
|
|
||||||
|
|
||||||
if (regionCount > 0)
|
|
||||||
{
|
|
||||||
regionInfos = new RegionInfo[regionCount];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++)
|
|
||||||
{
|
|
||||||
m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
|
|
||||||
regionInfos[i] =
|
|
||||||
new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (WebException ex)
|
|
||||||
{
|
|
||||||
using (HttpWebResponse response = (HttpWebResponse)ex.Response)
|
|
||||||
=======
|
|
||||||
if (regionCount > 0 | allowRegionless)
|
if (regionCount > 0 | allowRegionless)
|
||||||
return regionInfos;
|
return regionInfos;
|
||||||
|
|
||||||
m_log.Debug("[WEBLOADER]: Request yielded no regions.");
|
m_log.Debug("[WEBLOADER]: Request yielded no regions.");
|
||||||
tries--;
|
tries--;
|
||||||
if (tries > 0)
|
if (tries > 0)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_log.Debug("[WEBLOADER]: Retrying");
|
m_log.Debug("[WEBLOADER]: Retrying");
|
||||||
System.Threading.Thread.Sleep(wait);
|
System.Threading.Thread.Sleep(wait);
|
||||||
|
|
|
@ -65,12 +65,9 @@ namespace OpenSim.Framework.Servers
|
||||||
/// This will control a periodic log printout of the current 'show stats' (if they are active) for this
|
/// This will control a periodic log printout of the current 'show stats' (if they are active) for this
|
||||||
/// server.
|
/// server.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
private int m_periodDiagnosticTimerMS = 60 * 60 * 1000;
|
private int m_periodDiagnosticTimerMS = 60 * 60 * 1000;
|
||||||
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
|
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
|
||||||
=======
|
|
||||||
// private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Random uuid for private data
|
/// Random uuid for private data
|
||||||
|
@ -88,11 +85,8 @@ namespace OpenSim.Framework.Servers
|
||||||
// Random uuid for private data
|
// Random uuid for private data
|
||||||
m_osSecret = UUID.Random().ToString();
|
m_osSecret = UUID.Random().ToString();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
|
||||||
=======
|
m_periodicDiagnosticsTimer.Enabled = true;
|
||||||
// m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
|
|
||||||
// m_periodicDiagnosticsTimer.Enabled = true;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1947,14 +1947,10 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_httpListener2.Start(64);
|
m_httpListener2.Start(64);
|
||||||
|
|
||||||
// Long Poll Service Manager with 3 worker threads a 25 second timeout for no events
|
// Long Poll Service Manager with 3 worker threads a 25 second timeout for no events
|
||||||
<<<<<<< HEAD
|
|
||||||
PollServiceRequestManager = new PollServiceRequestManager(this, performPollResponsesAsync, 3, 25000);
|
PollServiceRequestManager = new PollServiceRequestManager(this, performPollResponsesAsync, 3, 25000);
|
||||||
PollServiceRequestManager.Start();
|
PollServiceRequestManager.Start();
|
||||||
|
|
||||||
=======
|
|
||||||
m_PollServiceManager = new PollServiceRequestManager(this, 4, 25000);
|
|
||||||
m_PollServiceManager.Start();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
HTTPDRunning = true;
|
HTTPDRunning = true;
|
||||||
|
|
||||||
//HttpListenerContext context;
|
//HttpListenerContext context;
|
||||||
|
|
|
@ -74,16 +74,11 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
private Thread[] m_workerThreads;
|
private Thread[] m_workerThreads;
|
||||||
private Thread m_retrysThread;
|
private Thread m_retrysThread;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private SmartThreadPool m_threadPool = new SmartThreadPool(20000, 12, 2);
|
|
||||||
|
|
||||||
// private int m_timeout = 1000; // increase timeout 250; now use the event one
|
|
||||||
=======
|
|
||||||
private bool m_running = true;
|
private bool m_running = true;
|
||||||
private int slowCount = 0;
|
private int slowCount = 0;
|
||||||
|
|
||||||
private SmartThreadPool m_threadPool;
|
private SmartThreadPool m_threadPool;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
public PollServiceRequestManager(
|
public PollServiceRequestManager(
|
||||||
BaseHttpServer pSrv, bool performResponsesAsync, uint pWorkerThreadCount, int pTimeout)
|
BaseHttpServer pSrv, bool performResponsesAsync, uint pWorkerThreadCount, int pTimeout)
|
||||||
|
@ -93,7 +88,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_WorkerThreadCount = pWorkerThreadCount;
|
m_WorkerThreadCount = pWorkerThreadCount;
|
||||||
m_workerThreads = new Thread[m_WorkerThreadCount];
|
m_workerThreads = new Thread[m_WorkerThreadCount];
|
||||||
|
|
||||||
<<<<<<< HEAD
|
/*
|
||||||
StatsManager.RegisterStat(
|
StatsManager.RegisterStat(
|
||||||
new Stat(
|
new Stat(
|
||||||
"QueuedPollResponses",
|
"QueuedPollResponses",
|
||||||
|
@ -119,7 +114,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
MeasuresOfInterest.AverageChangeOverTime,
|
MeasuresOfInterest.AverageChangeOverTime,
|
||||||
stat => stat.Value = ResponsesProcessed,
|
stat => stat.Value = ResponsesProcessed,
|
||||||
StatVerbosity.Debug));
|
StatVerbosity.Debug));
|
||||||
=======
|
*/
|
||||||
PollServiceHttpRequestComparer preqCp = new PollServiceHttpRequestComparer();
|
PollServiceHttpRequestComparer preqCp = new PollServiceHttpRequestComparer();
|
||||||
m_bycontext = new Dictionary<PollServiceHttpRequest, Queue<PollServiceHttpRequest>>(preqCp);
|
m_bycontext = new Dictionary<PollServiceHttpRequest, Queue<PollServiceHttpRequest>>(preqCp);
|
||||||
|
|
||||||
|
@ -132,46 +127,16 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
startInfo.ThreadPoolName = "PoolService";
|
startInfo.ThreadPoolName = "PoolService";
|
||||||
|
|
||||||
m_threadPool = new SmartThreadPool(startInfo);
|
m_threadPool = new SmartThreadPool(startInfo);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
IsRunning = true;
|
|
||||||
|
|
||||||
if (PerformResponsesAsync)
|
|
||||||
{
|
|
||||||
//startup worker threads
|
|
||||||
for (uint i = 0; i < m_WorkerThreadCount; i++)
|
|
||||||
{
|
|
||||||
m_workerThreads[i]
|
|
||||||
= WorkManager.StartThread(
|
|
||||||
PoolWorkerJob,
|
|
||||||
string.Format("PollServiceWorkerThread{0}:{1}", i, m_server.Port),
|
|
||||||
ThreadPriority.Normal,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
int.MaxValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
WorkManager.StartThread(
|
|
||||||
this.CheckLongPollThreads,
|
|
||||||
string.Format("LongPollServiceWatcherThread:{0}", m_server.Port),
|
|
||||||
ThreadPriority.Normal,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
1000 * 60 * 10);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
m_threadPool.Start();
|
m_threadPool.Start();
|
||||||
//startup worker threads
|
//startup worker threads
|
||||||
for (uint i = 0; i < m_WorkerThreadCount; i++)
|
for (uint i = 0; i < m_WorkerThreadCount; i++)
|
||||||
{
|
{
|
||||||
m_workerThreads[i]
|
m_workerThreads[i]
|
||||||
= Watchdog.StartThread(
|
= WorkManager.StartThread(
|
||||||
PoolWorkerJob,
|
PoolWorkerJob,
|
||||||
string.Format("PollServiceWorkerThread {0}:{1}", i, m_server.Port),
|
string.Format("PollServiceWorkerThread {0}:{1}", i, m_server.Port),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
|
@ -181,7 +146,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
int.MaxValue);
|
int.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_retrysThread = Watchdog.StartThread(
|
m_retrysThread = WorkManager.StartThread(
|
||||||
this.CheckRetries,
|
this.CheckRetries,
|
||||||
string.Format("PollServiceWatcherThread:{0}", m_server.Port),
|
string.Format("PollServiceWatcherThread:{0}", m_server.Port),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
|
@ -189,7 +154,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
true,
|
true,
|
||||||
null,
|
null,
|
||||||
1000 * 60 * 10);
|
1000 * 60 * 10);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReQueueEvent(PollServiceHttpRequest req)
|
private void ReQueueEvent(PollServiceHttpRequest req)
|
||||||
|
@ -258,36 +223,13 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
private void CheckRetries()
|
private void CheckRetries()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// The only purpose of this thread is to check the EQs for events.
|
|
||||||
// If there are events, that thread will be placed in the "ready-to-serve" queue, m_requests.
|
|
||||||
// If there are no events, that thread will be back to its "waiting" queue, m_longPollRequests.
|
|
||||||
// All other types of tasks (Inventory handlers, http-in, etc) don't have the long-poll nature,
|
|
||||||
// so if they aren't ready to be served by a worker thread (no events), they are placed
|
|
||||||
// directly back in the "ready-to-serve" queue by the worker thread.
|
|
||||||
while (IsRunning)
|
|
||||||
=======
|
|
||||||
while (m_running)
|
while (m_running)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
Thread.Sleep(100); // let the world move .. back to faster rate
|
Thread.Sleep(100); // let the world move .. back to faster rate
|
||||||
Watchdog.UpdateThread();
|
Watchdog.UpdateThread();
|
||||||
lock (m_retryRequests)
|
lock (m_retryRequests)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (m_longPollRequests.Count > 0 && IsRunning)
|
|
||||||
{
|
|
||||||
List<PollServiceHttpRequest> ready = m_longPollRequests.FindAll(req =>
|
|
||||||
(req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id) || // there are events in this EQ
|
|
||||||
(Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) // no events, but timeout
|
|
||||||
);
|
|
||||||
|
|
||||||
ready.ForEach(req =>
|
|
||||||
{
|
|
||||||
m_requests.Enqueue(req);
|
|
||||||
m_longPollRequests.Remove(req);
|
|
||||||
});
|
|
||||||
=======
|
|
||||||
while (m_retryRequests.Count > 0 && m_running)
|
while (m_retryRequests.Count > 0 && m_running)
|
||||||
m_requests.Enqueue(m_retryRequests.Dequeue());
|
m_requests.Enqueue(m_retryRequests.Dequeue());
|
||||||
}
|
}
|
||||||
|
@ -295,7 +237,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
if (slowCount >= 10)
|
if (slowCount >= 10)
|
||||||
{
|
{
|
||||||
slowCount = 0;
|
slowCount = 0;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
lock (m_slowRequests)
|
lock (m_slowRequests)
|
||||||
{
|
{
|
||||||
|
@ -308,12 +249,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
IsRunning = false;
|
|
||||||
// m_timeout = -10000; // cause all to expire
|
|
||||||
=======
|
|
||||||
m_running = false;
|
m_running = false;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Thread.Sleep(1000); // let the world move
|
Thread.Sleep(1000); // let the world move
|
||||||
|
|
||||||
foreach (Thread t in m_workerThreads)
|
foreach (Thread t in m_workerThreads)
|
||||||
|
@ -341,13 +278,9 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
lock (m_slowRequests)
|
lock (m_slowRequests)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (m_longPollRequests.Count > 0 && IsRunning)
|
|
||||||
m_longPollRequests.ForEach(req => m_requests.Enqueue(req));
|
|
||||||
=======
|
|
||||||
while (m_slowRequests.Count > 0)
|
while (m_slowRequests.Count > 0)
|
||||||
m_requests.Enqueue(m_slowRequests.Dequeue());
|
m_requests.Enqueue(m_slowRequests.Dequeue());
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (m_requests.Count() > 0)
|
while (m_requests.Count() > 0)
|
||||||
|
@ -355,13 +288,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
wreq = m_requests.Dequeue(0);
|
wreq = m_requests.Dequeue(0);
|
||||||
<<<<<<< HEAD
|
|
||||||
ResponsesProcessed++;
|
|
||||||
wreq.DoHTTPGruntWork(
|
|
||||||
m_server, wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id));
|
|
||||||
=======
|
|
||||||
wreq.DoHTTPstop(m_server);
|
wreq.DoHTTPstop(m_server);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -375,23 +303,11 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
private void PoolWorkerJob()
|
private void PoolWorkerJob()
|
||||||
{
|
{
|
||||||
while (IsRunning)
|
while (m_running)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
PollServiceHttpRequest req = m_requests.Dequeue(5000);
|
PollServiceHttpRequest req = m_requests.Dequeue(5000);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Watchdog.UpdateThread();
|
Watchdog.UpdateThread();
|
||||||
WaitPerformResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void WaitPerformResponse()
|
|
||||||
{
|
|
||||||
PollServiceHttpRequest req = m_requests.Dequeue(5000);
|
|
||||||
// m_log.DebugFormat("[YYY]: Dequeued {0}", (req == null ? "null" : req.PollServiceArgs.Type.ToString()));
|
|
||||||
|
|
||||||
if (req != null)
|
if (req != null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -400,66 +316,22 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id);
|
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll) // This is the event queue
|
||||||
if (responsedata == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// This is the event queue.
|
|
||||||
// Even if we're not running we can still perform responses by explicit request.
|
|
||||||
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll
|
|
||||||
|| !PerformResponsesAsync)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ResponsesProcessed++;
|
|
||||||
req.DoHTTPGruntWork(m_server, responsedata);
|
req.DoHTTPGruntWork(m_server, responsedata);
|
||||||
|
byContextDequeue(req);
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException e) // Browser aborted before we could read body, server closed the stream
|
catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
|
||||||
{
|
{
|
||||||
// Ignore it, no need to reply
|
// Ignore it, no need to reply
|
||||||
m_log.Error(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_threadPool.QueueWorkItem(x =>
|
m_threadPool.QueueWorkItem(x =>
|
||||||
=======
|
|
||||||
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll) // This is the event queue
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
try
|
|
||||||
{
|
|
||||||
ResponsesProcessed++;
|
|
||||||
req.DoHTTPGruntWork(m_server, responsedata);
|
|
||||||
byContextDequeue(req);
|
|
||||||
}
|
|
||||||
catch (ObjectDisposedException e) // Browser aborted before we could read body, server closed the stream
|
|
||||||
{
|
|
||||||
// Ignore it, no need to reply
|
|
||||||
m_log.Error(e);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.Error(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms)
|
|
||||||
{
|
|
||||||
ResponsesProcessed++;
|
|
||||||
req.DoHTTPGruntWork(
|
|
||||||
m_server, req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ReQueueEvent(req);
|
|
||||||
=======
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
req.DoHTTPGruntWork(m_server, responsedata);
|
req.DoHTTPGruntWork(m_server, responsedata);
|
||||||
|
@ -486,8 +358,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
ReQueueEvent(req);
|
ReQueueEvent(req);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -496,7 +366,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,6 @@ namespace OpenSim.Framework.Servers.Tests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class OSHttpTests : OpenSimTestCase
|
public class OSHttpTests : OpenSimTestCase
|
||||||
<<<<<<< HEAD
|
|
||||||
{
|
|
||||||
=======
|
|
||||||
{
|
{
|
||||||
// we need an IHttpClientContext for our tests
|
// we need an IHttpClientContext for our tests
|
||||||
public class TestHttpClientContext: IHttpClientContext
|
public class TestHttpClientContext: IHttpClientContext
|
||||||
|
@ -365,7 +362,6 @@ namespace OpenSim.Framework.Servers.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public OSHttpRequest req0;
|
public OSHttpRequest req0;
|
||||||
public OSHttpRequest req1;
|
public OSHttpRequest req1;
|
||||||
|
|
||||||
|
|
|
@ -160,11 +160,7 @@ namespace OpenSim.Framework
|
||||||
public virtual ulong HomeRegion
|
public virtual ulong HomeRegion
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
<<<<<<< HEAD
|
|
||||||
{
|
{
|
||||||
=======
|
|
||||||
{
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return Util.RegionWorldLocToHandle(Util.RegionToWorldLoc(m_homeRegionX), Util.RegionToWorldLoc(m_homeRegionY));
|
return Util.RegionWorldLocToHandle(Util.RegionToWorldLoc(m_homeRegionX), Util.RegionToWorldLoc(m_homeRegionY));
|
||||||
// return Utils.UIntsToLong( m_homeRegionX * (uint)Constants.RegionSize, m_homeRegionY * (uint)Constants.RegionSize);
|
// return Utils.UIntsToLong( m_homeRegionX * (uint)Constants.RegionSize, m_homeRegionY * (uint)Constants.RegionSize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,14 @@ namespace OpenSim.Framework
|
||||||
public string Notes;
|
public string Notes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UserPreferences
|
||||||
|
{
|
||||||
|
public UUID UserId;
|
||||||
|
public bool IMViaEmail = false;
|
||||||
|
public bool Visible = false;
|
||||||
|
public string EMail = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
public class UserAccountProperties
|
public class UserAccountProperties
|
||||||
{
|
{
|
||||||
public string EmailAddress = string.Empty;
|
public string EmailAddress = string.Empty;
|
||||||
|
|
|
@ -1688,69 +1688,6 @@ namespace OpenSim.Framework
|
||||||
return displayConnectionString;
|
return displayConnectionString;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T ReadSettingsFromIniFile<T>(IConfig config, T settingsClass)
|
|
||||||
{
|
|
||||||
Type settingsType = settingsClass.GetType();
|
|
||||||
|
|
||||||
FieldInfo[] fieldInfos = settingsType.GetFields();
|
|
||||||
foreach (FieldInfo fieldInfo in fieldInfos)
|
|
||||||
{
|
|
||||||
if (!fieldInfo.IsStatic)
|
|
||||||
{
|
|
||||||
if (fieldInfo.FieldType == typeof(System.String))
|
|
||||||
{
|
|
||||||
fieldInfo.SetValue(settingsClass, config.Get(fieldInfo.Name, (string)fieldInfo.GetValue(settingsClass)));
|
|
||||||
}
|
|
||||||
else if (fieldInfo.FieldType == typeof(System.Boolean))
|
|
||||||
{
|
|
||||||
fieldInfo.SetValue(settingsClass, config.GetBoolean(fieldInfo.Name, (bool)fieldInfo.GetValue(settingsClass)));
|
|
||||||
}
|
|
||||||
else if (fieldInfo.FieldType == typeof(System.Int32))
|
|
||||||
{
|
|
||||||
fieldInfo.SetValue(settingsClass, config.GetInt(fieldInfo.Name, (int)fieldInfo.GetValue(settingsClass)));
|
|
||||||
}
|
|
||||||
else if (fieldInfo.FieldType == typeof(System.Single))
|
|
||||||
{
|
|
||||||
fieldInfo.SetValue(settingsClass, config.GetFloat(fieldInfo.Name, (float)fieldInfo.GetValue(settingsClass)));
|
|
||||||
}
|
|
||||||
else if (fieldInfo.FieldType == typeof(System.UInt32))
|
|
||||||
{
|
|
||||||
fieldInfo.SetValue(settingsClass, Convert.ToUInt32(config.Get(fieldInfo.Name, ((uint)fieldInfo.GetValue(settingsClass)).ToString())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyInfo[] propertyInfos = settingsType.GetProperties();
|
|
||||||
foreach (PropertyInfo propInfo in propertyInfos)
|
|
||||||
{
|
|
||||||
if ((propInfo.CanRead) && (propInfo.CanWrite))
|
|
||||||
{
|
|
||||||
if (propInfo.PropertyType == typeof(System.String))
|
|
||||||
{
|
|
||||||
propInfo.SetValue(settingsClass, config.Get(propInfo.Name, (string)propInfo.GetValue(settingsClass, null)), null);
|
|
||||||
}
|
|
||||||
else if (propInfo.PropertyType == typeof(System.Boolean))
|
|
||||||
{
|
|
||||||
propInfo.SetValue(settingsClass, config.GetBoolean(propInfo.Name, (bool)propInfo.GetValue(settingsClass, null)), null);
|
|
||||||
}
|
|
||||||
else if (propInfo.PropertyType == typeof(System.Int32))
|
|
||||||
{
|
|
||||||
propInfo.SetValue(settingsClass, config.GetInt(propInfo.Name, (int)propInfo.GetValue(settingsClass, null)), null);
|
|
||||||
}
|
|
||||||
else if (propInfo.PropertyType == typeof(System.Single))
|
|
||||||
{
|
|
||||||
propInfo.SetValue(settingsClass, config.GetFloat(propInfo.Name, (float)propInfo.GetValue(settingsClass, null)), null);
|
|
||||||
}
|
|
||||||
if (propInfo.PropertyType == typeof(System.UInt32))
|
|
||||||
{
|
|
||||||
propInfo.SetValue(settingsClass, Convert.ToUInt32(config.Get(propInfo.Name, ((uint)propInfo.GetValue(settingsClass, null)).ToString())), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return settingsClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string Base64ToString(string str)
|
public static string Base64ToString(string str)
|
||||||
{
|
{
|
||||||
Decoder utf8Decode = Encoding.UTF8.GetDecoder();
|
Decoder utf8Decode = Encoding.UTF8.GetDecoder();
|
||||||
|
@ -2156,11 +2093,6 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void FireAndForget(System.Threading.WaitCallback callback)
|
|
||||||
{
|
|
||||||
FireAndForget(callback, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void InitThreadPool(int minThreads, int maxThreads)
|
public static void InitThreadPool(int minThreads, int maxThreads)
|
||||||
{
|
{
|
||||||
if (maxThreads < 2)
|
if (maxThreads < 2)
|
||||||
|
|
|
@ -29,11 +29,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
public class VersionInfo
|
public class VersionInfo
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD:OpenSim/Framework/VersionInfo.cs
|
public const string VersionNumber = "0.8.2.0CM";
|
||||||
public const string VersionNumber = "0.8.2.0";
|
|
||||||
=======
|
|
||||||
private const string VERSION_NUMBER = "0.8.0CM";
|
|
||||||
>>>>>>> avn/ubitvar:OpenSim/Framework/Servers/VersionInfo.cs
|
|
||||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||||
|
|
||||||
public enum Flavour
|
public enum Flavour
|
||||||
|
|
|
@ -205,16 +205,8 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
if (DebugLevel == 5)
|
if (DebugLevel == 5)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (output.Length > MaxRequestDiagLength)
|
if (output.Length > MaxRequestDiagLength)
|
||||||
output = output.Substring(0, MaxRequestDiagLength) + "...";
|
output = output.Substring(0, MaxRequestDiagLength) + "...";
|
||||||
=======
|
|
||||||
int len = output.Length;
|
|
||||||
if(len > 80)
|
|
||||||
len = 80;
|
|
||||||
output = output.Substring(0, len);
|
|
||||||
output = output + "...";
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.DebugFormat("[LOGHTTP]: {0}{1}", context, Util.BinaryToASCII(output));
|
m_log.DebugFormat("[LOGHTTP]: {0}{1}", context, Util.BinaryToASCII(output));
|
||||||
|
@ -295,12 +287,9 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
tickcompressdata = tickJsondata;
|
tickcompressdata = tickJsondata;
|
||||||
compsize = buffer.Length;
|
compsize = buffer.Length;
|
||||||
request.ContentType = "application/json";
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
request.ContentLength = buffer.Length; //Count bytes to send
|
request.ContentLength = buffer.Length; //Count bytes to send
|
||||||
using (Stream requestStream = request.GetRequestStream())
|
using (Stream requestStream = request.GetRequestStream())
|
||||||
requestStream.Write(buffer, 0, buffer.Length); //Send it
|
requestStream.Write(buffer, 0, buffer.Length); //Send it
|
||||||
|
@ -315,7 +304,6 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
using (Stream responseStream = response.GetResponseStream())
|
using (Stream responseStream = response.GetResponseStream())
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
using (StreamReader reader = new StreamReader(responseStream))
|
using (StreamReader reader = new StreamReader(responseStream))
|
||||||
{
|
{
|
||||||
string responseStr = reader.ReadToEnd();
|
string responseStr = reader.ReadToEnd();
|
||||||
|
@ -323,12 +311,6 @@ namespace OpenSim.Framework
|
||||||
WebUtil.LogResponseDetail(reqnum, responseStr);
|
WebUtil.LogResponseDetail(reqnum, responseStr);
|
||||||
return CanonicalizeResults(responseStr);
|
return CanonicalizeResults(responseStr);
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
string responseStr = null;
|
|
||||||
responseStr = responseStream.GetStreamString();
|
|
||||||
//m_log.DebugFormat("[WEB UTIL]: <{0}> response is <{1}>",reqnum,responseStr);
|
|
||||||
return CanonicalizeResults(responseStr);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -352,10 +334,6 @@ namespace OpenSim.Framework
|
||||||
if (tickdiff > LongCallTime)
|
if (tickdiff > LongCallTime)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
<<<<<<< HEAD
|
|
||||||
"[LOGHTTP]: Slow JSON-RPC request {0} {1} to {2} took {3}ms, {4}ms writing, {5}",
|
|
||||||
reqnum, method, url, tickdiff, tickdata,
|
|
||||||
=======
|
|
||||||
"[WEB UTIL]: Slow ServiceOSD request {0} {1} {2} took {3}ms, {4}ms writing({5} at Json; {6} at comp), {7} bytes ({8} uncomp): {9}",
|
"[WEB UTIL]: Slow ServiceOSD request {0} {1} {2} took {3}ms, {4}ms writing({5} at Json; {6} at comp), {7} bytes ({8} uncomp): {9}",
|
||||||
reqnum,
|
reqnum,
|
||||||
method,
|
method,
|
||||||
|
@ -366,7 +344,7 @@ namespace OpenSim.Framework
|
||||||
tickcompressdata,
|
tickcompressdata,
|
||||||
compsize,
|
compsize,
|
||||||
strBuffer != null ? strBuffer.Length : 0,
|
strBuffer != null ? strBuffer.Length : 0,
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
strBuffer != null
|
strBuffer != null
|
||||||
? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
|
? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
|
||||||
: "");
|
: "");
|
||||||
|
@ -823,6 +801,20 @@ namespace OpenSim.Framework
|
||||||
MakeRequest<TRequest, TResponse>(verb, requestUrl, obj, action, maxConnections, null);
|
MakeRequest<TRequest, TResponse>(verb, requestUrl, obj, action, maxConnections, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Perform a synchronous REST request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="verb"></param>
|
||||||
|
/// <param name="requestUrl"></param>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <param name="pTimeout">
|
||||||
|
/// Request timeout in milliseconds. Timeout.Infinite indicates no timeout. If 0 is passed then the default HttpWebRequest timeout is used (100 seconds)
|
||||||
|
/// </param>
|
||||||
|
/// <param name="maxConnections"></param>
|
||||||
|
/// <returns>
|
||||||
|
/// The response. If there was an internal exception or the request timed out,
|
||||||
|
/// then the default(TResponse) is returned.
|
||||||
|
/// </returns>
|
||||||
public static void MakeRequest<TRequest, TResponse>(string verb,
|
public static void MakeRequest<TRequest, TResponse>(string verb,
|
||||||
string requestUrl, TRequest obj, Action<TResponse> action,
|
string requestUrl, TRequest obj, Action<TResponse> action,
|
||||||
int maxConnections, IServiceAuth auth)
|
int maxConnections, IServiceAuth auth)
|
||||||
|
@ -834,7 +826,7 @@ namespace OpenSim.Framework
|
||||||
reqnum, verb, requestUrl);
|
reqnum, verb, requestUrl);
|
||||||
|
|
||||||
int tickstart = Util.EnvironmentTickCount();
|
int tickstart = Util.EnvironmentTickCount();
|
||||||
// int tickdata = 0;
|
int tickdata = 0;
|
||||||
int tickdiff = 0;
|
int tickdiff = 0;
|
||||||
|
|
||||||
Type type = typeof(TRequest);
|
Type type = typeof(TRequest);
|
||||||
|
@ -876,27 +868,19 @@ namespace OpenSim.Framework
|
||||||
request.ContentLength = length;
|
request.ContentLength = length;
|
||||||
byte[] data = buffer.ToArray();
|
byte[] data = buffer.ToArray();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (WebUtil.DebugLevel >= 5)
|
if (WebUtil.DebugLevel >= 5)
|
||||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||||
|
|
||||||
request.BeginGetRequestStream(delegate(IAsyncResult res)
|
request.BeginGetRequestStream(delegate(IAsyncResult res)
|
||||||
=======
|
|
||||||
// capture how much time was spent writing
|
|
||||||
// useless in this async
|
|
||||||
// tickdata = Util.EnvironmentTickCountSubtract(tickstart);
|
|
||||||
request.BeginGetResponse(delegate(IAsyncResult ar)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
using (Stream requestStream = request.EndGetRequestStream(res))
|
using (Stream requestStream = request.EndGetRequestStream(res))
|
||||||
requestStream.Write(data, 0, length);
|
requestStream.Write(data, 0, length);
|
||||||
|
|
||||||
// capture how much time was spent writing
|
// capture how much time was spent writing
|
||||||
tickdata = Util.EnvironmentTickCountSubtract(tickstart);
|
// tickdata = Util.EnvironmentTickCountSubtract(tickstart);
|
||||||
|
|
||||||
request.BeginGetResponse(delegate(IAsyncResult ar)
|
request.BeginGetResponse(delegate(IAsyncResult ar)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
using (WebResponse response = request.EndGetResponse(ar))
|
using (WebResponse response = request.EndGetResponse(ar))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -911,14 +895,6 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
// Let's not close this
|
|
||||||
// yes do close it
|
|
||||||
buffer.Close();
|
|
||||||
respStream.Close();
|
|
||||||
response.Close();
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
action(deserial);
|
action(deserial);
|
||||||
|
|
||||||
|
@ -980,7 +956,6 @@ namespace OpenSim.Framework
|
||||||
"[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}",
|
"[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}",
|
||||||
verb, requestUrl, e.Message, e.StackTrace);
|
verb, requestUrl, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
// m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString());
|
// m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString());
|
||||||
|
|
||||||
|
@ -998,43 +973,18 @@ namespace OpenSim.Framework
|
||||||
}, null);
|
}, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
|
tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
|
||||||
if (tickdiff > WebUtil.LongCallTime)
|
if (tickdiff > WebUtil.LongCallTime)
|
||||||
{
|
{
|
||||||
string originalRequest = null;
|
string originalRequest = null;
|
||||||
|
|
||||||
if (buffer != null)
|
if (buffer != null)
|
||||||
=======
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat(
|
|
||||||
"[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}",
|
|
||||||
verb, requestUrl, e.Message, e.StackTrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
// m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
action(deserial);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
originalRequest = Encoding.UTF8.GetString(buffer.ToArray());
|
originalRequest = Encoding.UTF8.GetString(buffer.ToArray());
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (originalRequest.Length > WebUtil.MaxRequestDiagLength)
|
if (originalRequest.Length > WebUtil.MaxRequestDiagLength)
|
||||||
originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength);
|
originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength);
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
|
|
||||||
if (tickdiff > WebUtil.LongCallTime)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
string originalRequest = null;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[LOGHTTP]: Slow AsynchronousRequestObject request {0} {1} to {2} took {3}ms, {4}ms writing, {5}",
|
"[LOGHTTP]: Slow AsynchronousRequestObject request {0} {1} to {2} took {3}ms, {4}ms writing, {5}",
|
||||||
reqnum, verb, requestUrl, tickdiff, tickdata,
|
reqnum, verb, requestUrl, tickdiff, tickdata,
|
||||||
|
@ -1042,39 +992,15 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
else if (WebUtil.DebugLevel >= 4)
|
else if (WebUtil.DebugLevel >= 4)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} took {1}ms, {2}ms writing",
|
m_log.DebugFormat(
|
||||||
reqnum, tickdiff, tickdata);
|
"[WEB UTIL]: HTTP OUT {0} took {1}ms",
|
||||||
|
reqnum, tickdiff);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (buffer != null)
|
if (buffer != null)
|
||||||
buffer.Dispose();
|
buffer.Dispose();
|
||||||
=======
|
|
||||||
|
|
||||||
m_log.InfoFormat(
|
|
||||||
"[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
|
|
||||||
reqnum,
|
|
||||||
verb,
|
|
||||||
requestUrl,
|
|
||||||
tickdiff,
|
|
||||||
tickdata,
|
|
||||||
originalRequest);
|
|
||||||
*/
|
|
||||||
m_log.InfoFormat(
|
|
||||||
"[ASYNC REQUEST]: Slow WebRequest SETUP <{0}> {1} {2} took {3}ms",
|
|
||||||
reqnum,
|
|
||||||
verb,
|
|
||||||
requestUrl,
|
|
||||||
tickdiff);
|
|
||||||
}
|
|
||||||
else if (WebUtil.DebugLevel >= 4)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[WEB UTIL]: HTTP OUT {0} took {1}ms",
|
|
||||||
reqnum, tickdiff);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1136,11 +1062,8 @@ namespace OpenSim.Framework
|
||||||
request.ContentLength = length;
|
request.ContentLength = length;
|
||||||
byte[] data = buffer.ToArray();
|
byte[] data = buffer.ToArray();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (WebUtil.DebugLevel >= 5)
|
if (WebUtil.DebugLevel >= 5)
|
||||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
Stream requestStream = null;
|
Stream requestStream = null;
|
||||||
try
|
try
|
||||||
|
@ -1188,10 +1111,6 @@ namespace OpenSim.Framework
|
||||||
if (tickdiff > WebUtil.LongCallTime)
|
if (tickdiff > WebUtil.LongCallTime)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
<<<<<<< HEAD
|
|
||||||
"[LOGHTTP]: Slow SynchronousRestForms request {0} {1} to {2} took {3}ms, {4}ms writing, {5}",
|
|
||||||
reqnum, verb, requestUrl, tickdiff, tickdata,
|
|
||||||
=======
|
|
||||||
"[FORMS]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
|
"[FORMS]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
|
||||||
reqnum,
|
reqnum,
|
||||||
verb,
|
verb,
|
||||||
|
@ -1199,7 +1118,6 @@ namespace OpenSim.Framework
|
||||||
tickdiff,
|
tickdiff,
|
||||||
tickset,
|
tickset,
|
||||||
tickdata,
|
tickdata,
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
|
obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
|
||||||
}
|
}
|
||||||
else if (WebUtil.DebugLevel >= 4)
|
else if (WebUtil.DebugLevel >= 4)
|
||||||
|
@ -1336,8 +1254,6 @@ namespace OpenSim.Framework
|
||||||
ht.ServicePoint.ConnectionLimit = maxConnections;
|
ht.ServicePoint.ConnectionLimit = maxConnections;
|
||||||
|
|
||||||
request.Method = verb;
|
request.Method = verb;
|
||||||
if (pTimeout != 0)
|
|
||||||
request.Timeout = pTimeout * 1000;
|
|
||||||
MemoryStream buffer = null;
|
MemoryStream buffer = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -1351,29 +1267,17 @@ namespace OpenSim.Framework
|
||||||
XmlWriterSettings settings = new XmlWriterSettings();
|
XmlWriterSettings settings = new XmlWriterSettings();
|
||||||
settings.Encoding = Encoding.UTF8;
|
settings.Encoding = Encoding.UTF8;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
|
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
|
||||||
{
|
{
|
||||||
XmlSerializer serializer = new XmlSerializer(type);
|
XmlSerializer serializer = new XmlSerializer(type);
|
||||||
serializer.Serialize(writer, obj);
|
serializer.Serialize(writer, obj);
|
||||||
writer.Flush();
|
writer.Flush();
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
|
|
||||||
{
|
|
||||||
XmlSerializer serializer = new XmlSerializer(type);
|
|
||||||
serializer.Serialize(writer, obj);
|
|
||||||
writer.Flush();
|
|
||||||
if (WebUtil.DebugLevel >= 5)
|
|
||||||
WebUtil.LogOutgoingDetail(buffer);
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
int length = (int)buffer.Length;
|
int length = (int)buffer.Length;
|
||||||
request.ContentLength = length;
|
request.ContentLength = length;
|
||||||
byte[] data = buffer.ToArray();
|
byte[] data = buffer.ToArray();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (WebUtil.DebugLevel >= 5)
|
if (WebUtil.DebugLevel >= 5)
|
||||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||||
|
|
||||||
|
@ -1397,9 +1301,6 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
=======
|
|
||||||
Stream requestStream = null;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
|
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
|
||||||
|
@ -1489,7 +1390,6 @@ namespace OpenSim.Framework
|
||||||
return deserial;
|
return deserial;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class XMLResponseHelper
|
public static class XMLResponseHelper
|
||||||
{
|
{
|
||||||
public static TResponse LogAndDeserialize<TRequest, TResponse>(int reqnum, Stream respStream, long contentLength)
|
public static TResponse LogAndDeserialize<TRequest, TResponse>(int reqnum, Stream respStream, long contentLength)
|
||||||
|
|
|
@ -115,13 +115,8 @@ namespace OpenSim
|
||||||
if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod))
|
if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod))
|
||||||
Util.FireAndForgetMethod = asyncCallMethod;
|
Util.FireAndForgetMethod = asyncCallMethod;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15);
|
|
||||||
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 300);
|
|
||||||
=======
|
|
||||||
stpMinThreads = startupConfig.GetInt("MinPoolThreads", 2 );
|
stpMinThreads = startupConfig.GetInt("MinPoolThreads", 2 );
|
||||||
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 25);
|
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 25);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) ");
|
m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,20 +268,12 @@ namespace OpenSim
|
||||||
SavePrimsXml2);
|
SavePrimsXml2);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("Archiving", false, "load oar",
|
m_console.Commands.AddCommand("Archiving", false, "load oar",
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
"load oar [--merge] [--skip-assets]"
|
"load oar [--merge] [--skip-assets]"
|
||||||
+ " [--default-user \"User Name\"]"
|
+ " [--default-user \"User Name\"]"
|
||||||
+ " [--force-terrain] [--force-parcels]"
|
+ " [--force-terrain] [--force-parcels]"
|
||||||
+ " [--no-objects]"
|
+ " [--no-objects]"
|
||||||
+ " [--rotation degrees] [--rotation-center \"<x,y,z>\"]"
|
+ " [--rotation degrees] [--rotation-center \"<x,y,z>\"]"
|
||||||
<<<<<<< HEAD
|
|
||||||
+ " [--displacement \"<x,y,z>\"]"
|
+ " [--displacement \"<x,y,z>\"]"
|
||||||
=======
|
|
||||||
+ " [--displacement \"<x,y,z>\"]"
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
+ " [<OAR path>]",
|
+ " [<OAR path>]",
|
||||||
"Load a region's data from an OAR archive.",
|
"Load a region's data from an OAR archive.",
|
||||||
"--merge will merge the OAR with the existing scene (suppresses terrain and parcel info loading).\n"
|
"--merge will merge the OAR with the existing scene (suppresses terrain and parcel info loading).\n"
|
||||||
|
|
|
@ -276,13 +276,9 @@ namespace OpenSim
|
||||||
|
|
||||||
base.StartupSpecific();
|
base.StartupSpecific();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (EnableInitialPluginLoad)
|
|
||||||
LoadPlugins();
|
|
||||||
|
|
||||||
// We still want to post initalize any plugins even if loading has been disabled since a test may have
|
// We still want to post initalize any plugins even if loading has been disabled since a test may have
|
||||||
// inserted them manually.
|
// inserted them manually.
|
||||||
=======
|
|
||||||
LoadPlugins();
|
LoadPlugins();
|
||||||
|
|
||||||
if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch!
|
if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch!
|
||||||
|
@ -290,7 +286,6 @@ namespace OpenSim
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
foreach (IApplicationPlugin plugin in m_plugins)
|
foreach (IApplicationPlugin plugin in m_plugins)
|
||||||
plugin.PostInitialise();
|
plugin.PostInitialise();
|
||||||
|
|
||||||
|
@ -832,10 +827,6 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
Vector3 regionExtent = new Vector3(regionInfo.RegionSizeX, regionInfo.RegionSizeY, regionInfo.RegionSizeZ);
|
Vector3 regionExtent = new Vector3(regionInfo.RegionSizeX, regionInfo.RegionSizeY, regionInfo.RegionSizeZ);
|
||||||
PhysicsScene physicsScene = GetPhysicsScene(regionInfo.RegionName, regionExtent);
|
PhysicsScene physicsScene = GetPhysicsScene(regionInfo.RegionName, regionExtent);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
SceneCommunicationService sceneGridService = new SceneCommunicationService();
|
SceneCommunicationService sceneGridService = new SceneCommunicationService();
|
||||||
|
|
||||||
return new Scene(
|
return new Scene(
|
||||||
|
|
|
@ -45,7 +45,6 @@ using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Region.Framework.Scenes.Serialization;
|
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Framework.Client;
|
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||||
|
@ -360,8 +359,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public string SeedCapRequest(string request, string path, string param,
|
public string SeedCapRequest(string request, string path, string param,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
// "[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID);
|
"[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID);
|
||||||
|
|
||||||
if (!m_HostCapsObj.WaitForActivation())
|
if (!m_HostCapsObj.WaitForActivation())
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
@ -789,99 +788,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
else if (inventoryType == "object")
|
else if (inventoryType == "object")
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
inType = (sbyte)InventoryType.Object;
|
|
||||||
assType = (sbyte)AssetType.Object;
|
|
||||||
|
|
||||||
List<Vector3> positions = new List<Vector3>();
|
|
||||||
List<Quaternion> rotations = new List<Quaternion>();
|
|
||||||
OSDMap request = (OSDMap)OSDParser.DeserializeLLSDXml(data);
|
|
||||||
OSDArray instance_list = (OSDArray)request["instance_list"];
|
|
||||||
OSDArray mesh_list = (OSDArray)request["mesh_list"];
|
|
||||||
OSDArray texture_list = (OSDArray)request["texture_list"];
|
|
||||||
SceneObjectGroup grp = null;
|
|
||||||
|
|
||||||
InventoryFolderBase textureUploadFolder = null;
|
|
||||||
|
|
||||||
List<InventoryFolderBase> foldersToUpdate = new List<InventoryFolderBase>();
|
|
||||||
List<InventoryItemBase> itemsToUpdate = new List<InventoryItemBase>();
|
|
||||||
IClientInventory clientInv = null;
|
|
||||||
|
|
||||||
if (texture_list.Count > 0)
|
|
||||||
{
|
|
||||||
ScenePresence avatar = null;
|
|
||||||
m_Scene.TryGetScenePresence(m_HostCapsObj.AgentID, out avatar);
|
|
||||||
|
|
||||||
if (avatar != null)
|
|
||||||
{
|
|
||||||
IClientCore core = (IClientCore)avatar.ControllingClient;
|
|
||||||
|
|
||||||
if (core.TryGet<IClientInventory>(out clientInv))
|
|
||||||
{
|
|
||||||
var systemTextureFolder = m_Scene.InventoryService.GetFolderForType(m_HostCapsObj.AgentID, FolderType.Texture);
|
|
||||||
textureUploadFolder = new InventoryFolderBase(UUID.Random(), assetName, m_HostCapsObj.AgentID, (short)FolderType.None, systemTextureFolder.ID, 1);
|
|
||||||
if (m_Scene.InventoryService.AddFolder(textureUploadFolder))
|
|
||||||
{
|
|
||||||
foldersToUpdate.Add(textureUploadFolder);
|
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[BUNCH OF CAPS]: Created new folder '{0}' ({1}) for textures uploaded with mesh object {2}",
|
|
||||||
textureUploadFolder.Name, textureUploadFolder.ID, assetName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
textureUploadFolder = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<UUID> textures = new List<UUID>();
|
|
||||||
for (int i = 0; i < texture_list.Count; i++)
|
|
||||||
{
|
|
||||||
AssetBase textureAsset = new AssetBase(UUID.Random(), assetName, (sbyte)AssetType.Texture, "");
|
|
||||||
textureAsset.Data = texture_list[i].AsBinary();
|
|
||||||
m_assetService.Store(textureAsset);
|
|
||||||
textures.Add(textureAsset.FullID);
|
|
||||||
|
|
||||||
if (textureUploadFolder != null)
|
|
||||||
{
|
|
||||||
InventoryItemBase textureItem = new InventoryItemBase();
|
|
||||||
textureItem.Owner = m_HostCapsObj.AgentID;
|
|
||||||
textureItem.CreatorId = m_HostCapsObj.AgentID.ToString();
|
|
||||||
textureItem.CreatorData = String.Empty;
|
|
||||||
textureItem.ID = UUID.Random();
|
|
||||||
textureItem.AssetID = textureAsset.FullID;
|
|
||||||
textureItem.Description = assetDescription;
|
|
||||||
textureItem.Name = assetName + " - Texture " + (i + 1).ToString();
|
|
||||||
textureItem.AssetType = (int)AssetType.Texture;
|
|
||||||
textureItem.InvType = (int)InventoryType.Texture;
|
|
||||||
textureItem.Folder = textureUploadFolder.ID;
|
|
||||||
textureItem.CurrentPermissions
|
|
||||||
= (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer | PermissionMask.Export);
|
|
||||||
textureItem.BasePermissions = (uint)PermissionMask.All | (uint)PermissionMask.Export;
|
|
||||||
textureItem.EveryOnePermissions = 0;
|
|
||||||
textureItem.NextPermissions = (uint)PermissionMask.All;
|
|
||||||
textureItem.CreationDate = Util.UnixTimeSinceEpoch();
|
|
||||||
m_Scene.InventoryService.AddItem(textureItem);
|
|
||||||
itemsToUpdate.Add(textureItem);
|
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[BUNCH OF CAPS]: Created new inventory item '{0}' ({1}) for texture uploaded with mesh object {2}",
|
|
||||||
textureItem.Name, textureItem.ID, assetName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clientInv != null && (foldersToUpdate.Count > 0 || itemsToUpdate.Count > 0))
|
|
||||||
{
|
|
||||||
clientInv.SendBulkUpdateInventory(foldersToUpdate.ToArray(), itemsToUpdate.ToArray());
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
if (assetType == "mesh") // this code for now is for mesh models uploads only
|
if (assetType == "mesh") // this code for now is for mesh models uploads only
|
||||||
{
|
{
|
||||||
inType = (sbyte)InventoryType.Object;
|
inType = (sbyte)InventoryType.Object;
|
||||||
assType = (sbyte)AssetType.Object;
|
assType = (sbyte)AssetType.Object;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
List<Vector3> positions = new List<Vector3>();
|
List<Vector3> positions = new List<Vector3>();
|
||||||
List<Quaternion> rotations = new List<Quaternion>();
|
List<Quaternion> rotations = new List<Quaternion>();
|
||||||
|
@ -1467,24 +1377,17 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
string message;
|
string message;
|
||||||
copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID, out message);
|
copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID, out message);
|
||||||
if (client != null)
|
if (copyItem != null && client != null)
|
||||||
{
|
|
||||||
if (copyItem != null)
|
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder);
|
m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder);
|
||||||
client.SendBulkUpdateInventory(copyItem);
|
client.SendBulkUpdateInventory(copyItem);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
client.SendAgentAlertMessage(message, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID);
|
m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID);
|
||||||
if (client != null)
|
if (client != null)
|
||||||
client.SendAgentAlertMessage("Failed to retrieve item", false);
|
client.SendAlertMessage("Failed to retrieve item");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -1656,14 +1559,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
string param, IOSHttpRequest httpRequest,
|
string param, IOSHttpRequest httpRequest,
|
||||||
IOSHttpResponse httpResponse)
|
IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
|
// OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
|
||||||
OSDMap accessPrefs = (OSDMap)req["access_prefs"];
|
|
||||||
string desiredMaturity = accessPrefs["max"];
|
|
||||||
|
|
||||||
OSDMap resp = new OSDMap();
|
OSDMap resp = new OSDMap();
|
||||||
OSDMap respAccessPrefs = new OSDMap();
|
|
||||||
respAccessPrefs["max"] = desiredMaturity; // echoing the maturity back means success
|
OSDMap accessPrefs = new OSDMap();
|
||||||
resp["access_prefs"] = respAccessPrefs;
|
accessPrefs["max"] = "A";
|
||||||
|
|
||||||
|
resp["access_prefs"] = accessPrefs;
|
||||||
|
|
||||||
string response = OSDParser.SerializeLLSDXmlString(resp);
|
string response = OSDParser.SerializeLLSDXmlString(resp);
|
||||||
return response;
|
return response;
|
||||||
|
|
|
@ -40,8 +40,8 @@ using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||||
|
|
||||||
[assembly: Addin("LindenCaps", OpenSim.VersionInfo.VersionNumber)]
|
[assembly: Addin("LindenCaps", "0.1")]
|
||||||
[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)]
|
[assembly: AddinDependency("OpenSim", "0.5")]
|
||||||
namespace OpenSim.Region.ClientStack.Linden
|
namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
/// Always returns a valid queue
|
/// Always returns a valid queue
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="agentId"></param>
|
/// <param name="agentId"></param>
|
||||||
|
@ -201,8 +200,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
/// May return a null queue
|
/// May return a null queue
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="agentId"></param>
|
/// <param name="agentId"></param>
|
||||||
|
@ -290,17 +288,11 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public void OnRegisterCaps(UUID agentID, Caps caps)
|
public void OnRegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
// Register an event queue for the client
|
// Register an event queue for the client
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
if (DebugLevel > 0)
|
if (DebugLevel > 0)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}",
|
"[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}",
|
||||||
agentID, caps, m_scene.RegionInfo.RegionName);
|
agentID, caps, m_scene.RegionInfo.RegionName);
|
||||||
=======
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}",
|
|
||||||
agentID, caps, m_scene.RegionInfo.RegionName);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
UUID eventQueueGetUUID;
|
UUID eventQueueGetUUID;
|
||||||
Queue<OSD> queue;
|
Queue<OSD> queue;
|
||||||
|
@ -519,14 +511,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
public virtual void EnableSimulator(ulong handle, IPEndPoint endPoint, UUID avatarID, int regionSizeX, int regionSizeY)
|
public virtual void EnableSimulator(ulong handle, IPEndPoint endPoint, UUID avatarID, int regionSizeX, int regionSizeY)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (DebugLevel > 0)
|
if (DebugLevel > 0)
|
||||||
m_log.DebugFormat("{0} EnableSimulator. handle={1}, endPoint={2}, avatarID={3}",
|
m_log.DebugFormat("{0} EnableSimulator. handle={1}, endPoint={2}, avatarID={3}",
|
||||||
LogHeader, handle, endPoint, avatarID, regionSizeX, regionSizeY);
|
LogHeader, handle, endPoint, avatarID, regionSizeX, regionSizeY);
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0} EnableSimulator. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
|
||||||
LogHeader, handle, avatarID, regionSizeX, regionSizeY);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
OSD item = EventQueueHelper.EnableSimulator(handle, endPoint, regionSizeX, regionSizeY);
|
OSD item = EventQueueHelper.EnableSimulator(handle, endPoint, regionSizeX, regionSizeY);
|
||||||
Enqueue(item, avatarID);
|
Enqueue(item, avatarID);
|
||||||
|
@ -535,15 +522,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public virtual void EstablishAgentCommunication(UUID avatarID, IPEndPoint endPoint, string capsPath,
|
public virtual void EstablishAgentCommunication(UUID avatarID, IPEndPoint endPoint, string capsPath,
|
||||||
ulong regionHandle, int regionSizeX, int regionSizeY)
|
ulong regionHandle, int regionSizeX, int regionSizeY)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (DebugLevel > 0)
|
if (DebugLevel > 0)
|
||||||
m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, endPoint={2}, avatarID={3}",
|
m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, endPoint={2}, avatarID={3}",
|
||||||
LogHeader, regionHandle, endPoint, avatarID, regionSizeX, regionSizeY);
|
LogHeader, regionHandle, endPoint, avatarID, regionSizeX, regionSizeY);
|
||||||
|
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
|
||||||
LogHeader, regionHandle, avatarID, regionSizeX, regionSizeY);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
OSD item = EventQueueHelper.EstablishAgentCommunication(avatarID, endPoint.ToString(), capsPath, regionHandle, regionSizeX, regionSizeY);
|
OSD item = EventQueueHelper.EstablishAgentCommunication(avatarID, endPoint.ToString(), capsPath, regionHandle, regionSizeX, regionSizeY);
|
||||||
Enqueue(item, avatarID);
|
Enqueue(item, avatarID);
|
||||||
}
|
}
|
||||||
|
@ -553,14 +535,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
uint locationID, uint flags, string capsURL,
|
uint locationID, uint flags, string capsURL,
|
||||||
UUID avatarID, int regionSizeX, int regionSizeY)
|
UUID avatarID, int regionSizeX, int regionSizeY)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (DebugLevel > 0)
|
if (DebugLevel > 0)
|
||||||
m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, endPoint={2}, avatarID={3}",
|
m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, endPoint={2}, avatarID={3}",
|
||||||
LogHeader, regionHandle, regionExternalEndPoint, avatarID, regionSizeX, regionSizeY);
|
LogHeader, regionHandle, regionExternalEndPoint, avatarID, regionSizeX, regionSizeY);
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
|
||||||
LogHeader, regionHandle, avatarID, regionSizeX, regionSizeY);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
OSD item = EventQueueHelper.TeleportFinishEvent(regionHandle, simAccess, regionExternalEndPoint,
|
OSD item = EventQueueHelper.TeleportFinishEvent(regionHandle, simAccess, regionExternalEndPoint,
|
||||||
locationID, flags, capsURL, avatarID, regionSizeX, regionSizeY);
|
locationID, flags, capsURL, avatarID, regionSizeX, regionSizeY);
|
||||||
|
@ -571,14 +548,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
IPEndPoint newRegionExternalEndPoint,
|
IPEndPoint newRegionExternalEndPoint,
|
||||||
string capsURL, UUID avatarID, UUID sessionID, int regionSizeX, int regionSizeY)
|
string capsURL, UUID avatarID, UUID sessionID, int regionSizeX, int regionSizeY)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (DebugLevel > 0)
|
if (DebugLevel > 0)
|
||||||
m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
||||||
LogHeader, handle, avatarID, regionSizeX, regionSizeY);
|
LogHeader, handle, avatarID, regionSizeX, regionSizeY);
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
|
||||||
LogHeader, handle, avatarID, regionSizeX, regionSizeY);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
OSD item = EventQueueHelper.CrossRegion(handle, pos, lookAt, newRegionExternalEndPoint,
|
OSD item = EventQueueHelper.CrossRegion(handle, pos, lookAt, newRegionExternalEndPoint,
|
||||||
capsURL, avatarID, sessionID, regionSizeX, regionSizeY);
|
capsURL, avatarID, sessionID, regionSizeX, regionSizeY);
|
||||||
|
|
|
@ -77,13 +77,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
llsdSimInfo.Add("Handle", new OSDBinary(ulongToByteArray(handle)));
|
llsdSimInfo.Add("Handle", new OSDBinary(ulongToByteArray(handle)));
|
||||||
llsdSimInfo.Add("IP", new OSDBinary(endPoint.Address.GetAddressBytes()));
|
llsdSimInfo.Add("IP", new OSDBinary(endPoint.Address.GetAddressBytes()));
|
||||||
llsdSimInfo.Add("Port", new OSDInteger(endPoint.Port));
|
llsdSimInfo.Add("Port", new OSDInteger(endPoint.Port));
|
||||||
<<<<<<< HEAD
|
|
||||||
llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint) regionSizeX));
|
|
||||||
llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint) regionSizeY));
|
|
||||||
=======
|
|
||||||
llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX));
|
llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX));
|
||||||
llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
OSDArray arr = new OSDArray(1);
|
OSDArray arr = new OSDArray(1);
|
||||||
arr.Add(llsdSimInfo);
|
arr.Add(llsdSimInfo);
|
||||||
|
@ -176,12 +171,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
info.Add("SimAccess", OSD.FromInteger(simAccess));
|
info.Add("SimAccess", OSD.FromInteger(simAccess));
|
||||||
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
|
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
|
||||||
info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port));
|
info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port));
|
||||||
<<<<<<< HEAD
|
|
||||||
info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
|
|
||||||
=======
|
|
||||||
// info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
|
// info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
|
||||||
info.Add("TeleportFlags", OSD.FromUInteger(flags));
|
info.Add("TeleportFlags", OSD.FromUInteger(flags));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
info.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX));
|
info.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX));
|
||||||
info.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
info.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
||||||
|
|
||||||
|
|
|
@ -60,11 +60,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private IAssetService m_AssetService;
|
private IAssetService m_AssetService;
|
||||||
private bool m_Enabled = true;
|
private bool m_Enabled = true;
|
||||||
private string m_URL;
|
private string m_URL;
|
||||||
<<<<<<< HEAD
|
|
||||||
private string m_URL2;
|
private string m_URL2;
|
||||||
private string m_RedirectURL = null;
|
private string m_RedirectURL = null;
|
||||||
private string m_RedirectURL2 = null;
|
private string m_RedirectURL2 = null;
|
||||||
=======
|
|
||||||
|
|
||||||
struct aPollRequest
|
struct aPollRequest
|
||||||
{
|
{
|
||||||
|
@ -94,7 +93,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
||||||
|
|
||||||
private Dictionary<UUID, PollServiceMeshEventArgs> m_pollservices = new Dictionary<UUID, PollServiceMeshEventArgs>();
|
private Dictionary<UUID, PollServiceMeshEventArgs> m_pollservices = new Dictionary<UUID, PollServiceMeshEventArgs>();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
#region Region Module interfaceBase Members
|
#region Region Module interfaceBase Members
|
||||||
|
|
||||||
|
@ -129,12 +128,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
if (m_URL2 != string.Empty)
|
if (m_URL2 != string.Empty)
|
||||||
{
|
{
|
||||||
m_Enabled = true;
|
m_Enabled = true;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_RedirectURL2 = config.GetString("GetMesh2RedirectURL");
|
m_RedirectURL2 = config.GetString("GetMesh2RedirectURL");
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene pScene)
|
public void AddRegion(Scene pScene)
|
||||||
|
@ -177,7 +173,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
for (uint i = 0; i < 2; i++)
|
for (uint i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
m_workerThreads[i] = Watchdog.StartThread(DoMeshRequests,
|
m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests,
|
||||||
String.Format("MeshWorkerThread{0}", i),
|
String.Format("MeshWorkerThread{0}", i),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
false,
|
false,
|
||||||
|
@ -336,21 +332,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
public void RegisterCaps(UUID agentID, Caps caps)
|
public void RegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
UUID capID = UUID.Random();
|
|
||||||
bool getMeshRegistered = false;
|
|
||||||
|
|
||||||
if (m_URL == string.Empty)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (m_URL == "localhost")
|
|
||||||
{
|
|
||||||
getMeshRegistered = true;
|
|
||||||
caps.RegisterHandler(
|
|
||||||
"GetMesh",
|
|
||||||
new GetMeshHandler("/CAPS/" + capID + "/", m_AssetService, "GetMesh", agentID.ToString(), m_RedirectURL));
|
|
||||||
=======
|
|
||||||
// UUID capID = UUID.Random();
|
// UUID capID = UUID.Random();
|
||||||
if (m_URL == "localhost")
|
if (m_URL == "localhost")
|
||||||
{
|
{
|
||||||
|
@ -375,34 +356,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
caps.RegisterHandler("GetMesh", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
caps.RegisterHandler("GetMesh", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
||||||
m_pollservices[agentID] = args;
|
m_pollservices[agentID] = args;
|
||||||
m_capsDict[agentID] = capUrl;
|
m_capsDict[agentID] = capUrl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
caps.RegisterHandler("GetMesh", m_URL);
|
caps.RegisterHandler("GetMesh", m_URL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(m_URL2 == string.Empty)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (m_URL2 == "localhost")
|
|
||||||
{
|
|
||||||
if (!getMeshRegistered)
|
|
||||||
{
|
|
||||||
caps.RegisterHandler(
|
|
||||||
"GetMesh2",
|
|
||||||
new GetMeshHandler("/CAPS/" + capID + "/", m_AssetService, "GetMesh2", agentID.ToString(), m_RedirectURL2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
caps.RegisterHandler("GetMesh2", m_URL2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void DeregisterCaps(UUID agentID, Caps caps)
|
private void DeregisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
string capUrl;
|
string capUrl;
|
||||||
|
|
|
@ -82,24 +82,22 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
|
private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
|
||||||
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// TODO: Change this to a config option
|
// TODO: Change this to a config option
|
||||||
private string m_RedirectURL = null;
|
private string m_RedirectURL = null;
|
||||||
=======
|
|
||||||
private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
private string m_URL;
|
private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>();
|
||||||
|
|
||||||
|
|
||||||
#region ISharedRegionModule Members
|
#region ISharedRegionModule Members
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
IConfig config = source.Configs["ClientStack.LindenCaps"];
|
IConfig config = source.Configs["ClientStack.LindenCaps"];
|
||||||
<<<<<<< HEAD
|
|
||||||
if (config == null)
|
if (config == null)
|
||||||
return;
|
return;
|
||||||
|
/*
|
||||||
m_URL = config.GetString("Cap_GetTexture", string.Empty);
|
m_URL = config.GetString("Cap_GetTexture", string.Empty);
|
||||||
// Cap doesn't exist
|
// Cap doesn't exist
|
||||||
if (m_URL != string.Empty)
|
if (m_URL != string.Empty)
|
||||||
|
@ -107,10 +105,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_Enabled = true;
|
m_Enabled = true;
|
||||||
m_RedirectURL = config.GetString("GetTextureRedirectURL");
|
m_RedirectURL = config.GetString("GetTextureRedirectURL");
|
||||||
}
|
}
|
||||||
=======
|
*/
|
||||||
if (config != null)
|
|
||||||
m_Url = config.GetString("Cap_GetTexture", "localhost");
|
m_Url = config.GetString("Cap_GetTexture", "localhost");
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene s)
|
public void AddRegion(Scene s)
|
||||||
|
@ -142,7 +138,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
for (uint i = 0; i < 2; i++)
|
for (uint i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
m_workerThreads[i] = Watchdog.StartThread(DoTextureRequests,
|
m_workerThreads[i] = WorkManager.StartThread(DoTextureRequests,
|
||||||
String.Format("TextureWorkerThread{0}", i),
|
String.Format("TextureWorkerThread{0}", i),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
false,
|
false,
|
||||||
|
@ -237,12 +233,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public PollServiceTextureEventArgs(UUID pId, Scene scene) :
|
public PollServiceTextureEventArgs(UUID pId, Scene scene) :
|
||||||
base(null, "", null, null, null, pId, int.MaxValue)
|
base(null, "", null, null, null, pId, int.MaxValue)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("[GETTEXTURE]: /CAPS/{0} in region {1}", capID, m_scene.RegionInfo.RegionName);
|
|
||||||
caps.RegisterHandler(
|
|
||||||
"GetTexture",
|
|
||||||
new GetTextureHandler("/CAPS/" + capID + "/", m_assetService, "GetTexture", agentID.ToString(), m_RedirectURL));
|
|
||||||
=======
|
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
// x is request id, y is userid
|
// x is request id, y is userid
|
||||||
HasEvents = (x, y) =>
|
HasEvents = (x, y) =>
|
||||||
|
@ -312,7 +302,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
};
|
};
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Process(aPollRequest requestinfo)
|
public void Process(aPollRequest requestinfo)
|
||||||
|
@ -402,11 +391,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>();
|
IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>();
|
||||||
if (handler != null)
|
if (handler != null)
|
||||||
<<<<<<< HEAD
|
|
||||||
handler.RegisterExternalUserCapsHandler(agentID,caps,"GetTexture", m_URL);
|
|
||||||
=======
|
|
||||||
handler.RegisterExternalUserCapsHandler(agentID, caps, "GetTexture", capUrl);
|
handler.RegisterExternalUserCapsHandler(agentID, caps, "GetTexture", capUrl);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
else
|
else
|
||||||
caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
||||||
m_pollservices[agentID] = args;
|
m_pollservices[agentID] = args;
|
||||||
|
@ -422,7 +407,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
PollServiceTextureEventArgs args;
|
PollServiceTextureEventArgs args;
|
||||||
|
|
||||||
MainServer.Instance.RemoveHTTPHandler("", m_URL);
|
MainServer.Instance.RemoveHTTPHandler("", m_Url);
|
||||||
m_capsDict.Remove(agentID);
|
m_capsDict.Remove(agentID);
|
||||||
|
|
||||||
if (m_pollservices.TryGetValue(agentID, out args))
|
if (m_pollservices.TryGetValue(agentID, out args))
|
||||||
|
|
|
@ -157,11 +157,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_features["MeshXferEnabled"] = true;
|
m_features["MeshXferEnabled"] = true;
|
||||||
|
|
||||||
m_features["PhysicsMaterialsEnabled"] = true;
|
m_features["PhysicsMaterialsEnabled"] = true;
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
OSDMap typesMap = new OSDMap();
|
OSDMap typesMap = new OSDMap();
|
||||||
typesMap["convex"] = true;
|
typesMap["convex"] = true;
|
||||||
typesMap["none"] = true;
|
typesMap["none"] = true;
|
||||||
|
@ -169,7 +165,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_features["PhysicsShapeTypes"] = typesMap;
|
m_features["PhysicsShapeTypes"] = typesMap;
|
||||||
|
|
||||||
// Extra information for viewers that want to use it
|
// Extra information for viewers that want to use it
|
||||||
<<<<<<< HEAD
|
|
||||||
// TODO: Take these out of here into their respective modules, like map-server-url
|
// TODO: Take these out of here into their respective modules, like map-server-url
|
||||||
OSDMap extrasMap;
|
OSDMap extrasMap;
|
||||||
if(m_features.ContainsKey("OpenSimExtras"))
|
if(m_features.ContainsKey("OpenSimExtras"))
|
||||||
|
@ -179,15 +174,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
else
|
else
|
||||||
extrasMap = new OSDMap();
|
extrasMap = new OSDMap();
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
OSDMap extrasMap = new OSDMap();
|
|
||||||
|
|
||||||
extrasMap["AvatarSkeleton"] = true;
|
extrasMap["AvatarSkeleton"] = true;
|
||||||
extrasMap["AnimationSet"] = true;
|
extrasMap["AnimationSet"] = true;
|
||||||
|
|
||||||
// TODO: Take these out of here into their respective modules, like map-server-url
|
// TODO: Take these out of here into their respective modules, like map-server-url
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (m_SearchURL != string.Empty)
|
if (m_SearchURL != string.Empty)
|
||||||
extrasMap["search-server-url"] = m_SearchURL;
|
extrasMap["search-server-url"] = m_SearchURL;
|
||||||
if (!string.IsNullOrEmpty(m_DestinationGuideURL))
|
if (!string.IsNullOrEmpty(m_DestinationGuideURL))
|
||||||
|
@ -199,13 +189,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
if (m_GridName != string.Empty)
|
if (m_GridName != string.Empty)
|
||||||
extrasMap["GridName"] = m_GridName;
|
extrasMap["GridName"] = m_GridName;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (extrasMap.Count > 0)
|
if (extrasMap.Count > 0)
|
||||||
m_features["OpenSimExtras"] = extrasMap;
|
m_features["OpenSimExtras"] = extrasMap;
|
||||||
=======
|
|
||||||
m_features["OpenSimExtras"] = extrasMap;
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ using OSDMap = OpenMetaverse.StructuredData.OSDMap;
|
||||||
|
|
||||||
namespace OpenSim.Region.ClientStack.Linden.Caps.Tests
|
namespace OpenSim.Region.ClientStack.Linden.Caps.Tests
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class WebFetchInvDescModuleTests : OpenSimTestCase
|
public class WebFetchInvDescModuleTests : OpenSimTestCase
|
||||||
{
|
{
|
||||||
|
@ -156,4 +157,5 @@ namespace OpenSim.Region.ClientStack.Linden.Caps.Tests
|
||||||
Assert.That((int)folderOsd["descendents"], Is.EqualTo(16));
|
Assert.That((int)folderOsd["descendents"], Is.EqualTo(16));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
|
@ -66,16 +66,19 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private bool m_persistBakedTextures;
|
private bool m_persistBakedTextures;
|
||||||
|
|
||||||
private IBakedTextureModule m_BakedTextureModule;
|
private IBakedTextureModule m_BakedTextureModule;
|
||||||
|
private string m_URL;
|
||||||
private IBakedTextureModule m_BakedTextureModule;
|
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
|
IConfig config = source.Configs["ClientStack.LindenCaps"];
|
||||||
|
if (config == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_URL = config.GetString("Cap_UploadBakedTexture", string.Empty);
|
||||||
|
|
||||||
IConfig appearanceConfig = source.Configs["Appearance"];
|
IConfig appearanceConfig = source.Configs["Appearance"];
|
||||||
if (appearanceConfig != null)
|
if (appearanceConfig != null)
|
||||||
m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures);
|
m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene s)
|
public void AddRegion(Scene s)
|
||||||
|
@ -91,13 +94,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
s.EventManager.OnRemovePresence -= DeRegisterPresence;
|
s.EventManager.OnRemovePresence -= DeRegisterPresence;
|
||||||
m_BakedTextureModule = null;
|
m_BakedTextureModule = null;
|
||||||
m_scene = null;
|
m_scene = null;
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void RegionLoaded(Scene s)
|
public void RegionLoaded(Scene s)
|
||||||
{
|
{
|
||||||
|
@ -109,173 +106,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
private void DeRegisterPresence(UUID agentId)
|
private void DeRegisterPresence(UUID agentId)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ScenePresence presence = null;
|
|
||||||
if (m_scene.TryGetScenePresence(agentId, out presence))
|
|
||||||
{
|
|
||||||
presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterNewPresence(ScenePresence presence)
|
|
||||||
{
|
|
||||||
presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems)
|
|
||||||
{
|
|
||||||
int maxCacheitemsLoop = cacheItems.Length;
|
|
||||||
if (maxCacheitemsLoop > AvatarWearable.MAX_WEARABLES)
|
|
||||||
{
|
|
||||||
maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES;
|
|
||||||
m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}. Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_BakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>();
|
|
||||||
if (cacheItems.Length > 0)
|
|
||||||
{
|
|
||||||
// m_log.Debug("[Cacheitems]: " + cacheItems.Length);
|
|
||||||
// for (int iter = 0; iter < maxCacheitemsLoop; iter++)
|
|
||||||
// {
|
|
||||||
// m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
|
|
||||||
// cacheItems[iter].TextureID);
|
|
||||||
// }
|
|
||||||
|
|
||||||
ScenePresence p = null;
|
|
||||||
if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p))
|
|
||||||
{
|
|
||||||
|
|
||||||
WearableCacheItem[] existingitems = p.Appearance.WearableCacheItems;
|
|
||||||
if (existingitems == null)
|
|
||||||
{
|
|
||||||
if (m_BakedTextureModule != null)
|
|
||||||
{
|
|
||||||
WearableCacheItem[] savedcache = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (p.Appearance.WearableCacheItemsDirty)
|
|
||||||
{
|
|
||||||
savedcache = m_BakedTextureModule.Get(p.UUID);
|
|
||||||
p.Appearance.WearableCacheItems = savedcache;
|
|
||||||
p.Appearance.WearableCacheItemsDirty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* The following Catch types DO NOT WORK with m_BakedTextureModule.Get
|
|
||||||
* it jumps to the General Packet Exception Handler if you don't catch Exception!
|
|
||||||
*
|
|
||||||
catch (System.Net.Sockets.SocketException)
|
|
||||||
{
|
|
||||||
cacheItems = null;
|
|
||||||
}
|
|
||||||
catch (WebException)
|
|
||||||
{
|
|
||||||
cacheItems = null;
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException)
|
|
||||||
{
|
|
||||||
cacheItems = null;
|
|
||||||
} */
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
// The service logs a sufficient error message.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (savedcache != null)
|
|
||||||
existingitems = savedcache;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Existing items null means it's a fully new appearance
|
|
||||||
if (existingitems == null)
|
|
||||||
{
|
|
||||||
|
|
||||||
for (int i = 0; i < maxCacheitemsLoop; i++)
|
|
||||||
{
|
|
||||||
if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex)
|
|
||||||
{
|
|
||||||
Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex];
|
|
||||||
if (face == null)
|
|
||||||
{
|
|
||||||
textureEntry.CreateFace(cacheItems[i].TextureIndex);
|
|
||||||
textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID =
|
|
||||||
AppearanceManager.DEFAULT_AVATAR_TEXTURE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
cacheItems[i].TextureID =face.TextureID;
|
|
||||||
if (m_scene.AssetService != null)
|
|
||||||
cacheItems[i].TextureAsset =
|
|
||||||
m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}. Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
// for each uploaded baked texture
|
|
||||||
for (int i = 0; i < maxCacheitemsLoop; i++)
|
|
||||||
{
|
|
||||||
if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex)
|
|
||||||
{
|
|
||||||
Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex];
|
|
||||||
if (face == null)
|
|
||||||
{
|
|
||||||
textureEntry.CreateFace(cacheItems[i].TextureIndex);
|
|
||||||
textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID =
|
|
||||||
AppearanceManager.DEFAULT_AVATAR_TEXTURE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
cacheItems[i].TextureID =
|
|
||||||
face.TextureID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}. Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < maxCacheitemsLoop; i++)
|
|
||||||
{
|
|
||||||
if (cacheItems[i].TextureAsset == null)
|
|
||||||
{
|
|
||||||
cacheItems[i].TextureAsset =
|
|
||||||
m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
p.Appearance.WearableCacheItems = cacheItems;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (m_BakedTextureModule != null)
|
|
||||||
{
|
|
||||||
m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems);
|
|
||||||
p.Appearance.WearableCacheItemsDirty = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// ScenePresence presence = null;
|
|
||||||
// if (m_scene.TryGetScenePresence(agentId, out presence))
|
|
||||||
{
|
|
||||||
// presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegisterNewPresence(ScenePresence presence)
|
private void RegisterNewPresence(ScenePresence presence)
|
||||||
|
@ -441,25 +271,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
public void RegisterCaps(UUID agentID, Caps caps)
|
public void RegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler(
|
|
||||||
caps, m_scene.AssetService, m_persistBakedTextures);
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
|
|
||||||
caps.RegisterHandler(
|
|
||||||
"UploadBakedTexture",
|
|
||||||
new RestStreamHandler(
|
|
||||||
"POST",
|
|
||||||
"/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath,
|
|
||||||
avatarhandler.UploadBakedTexture,
|
|
||||||
"UploadBakedTexture",
|
|
||||||
agentID.ToString()));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=======
|
|
||||||
//caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture));
|
//caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture));
|
||||||
if (m_URL == "localhost")
|
if (m_URL == "localhost")
|
||||||
{
|
{
|
||||||
|
@ -480,7 +291,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
caps.RegisterHandler("UploadBakedTexture", m_URL);
|
caps.RegisterHandler("UploadBakedTexture", m_URL);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,11 +64,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public List<UUID> folders;
|
public List<UUID> folders;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
=======
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Control whether requests will be processed asynchronously.
|
/// Control whether requests will be processed asynchronously.
|
||||||
|
|
|
@ -723,11 +723,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (!m_packetHandlers.ContainsKey(packetType))
|
if (!m_packetHandlers.ContainsKey(packetType))
|
||||||
{
|
{
|
||||||
m_packetHandlers.Add(
|
m_packetHandlers.Add(
|
||||||
<<<<<<< HEAD
|
|
||||||
packetType, new PacketProcessor() { method = handler, Async = doAsync, InEngine = inEngine });
|
packetType, new PacketProcessor() { method = handler, Async = doAsync, InEngine = inEngine });
|
||||||
=======
|
|
||||||
packetType, new PacketProcessor() { method = handler, Async = doAsync });
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1228,15 +1224,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="map">heightmap</param>
|
/// <param name="map">heightmap</param>
|
||||||
public virtual void SendLayerData(float[] map)
|
public virtual void SendLayerData(float[] map)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData(), "LLClientView.DoSendLayerData");
|
Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData(), "LLClientView.DoSendLayerData");
|
||||||
=======
|
|
||||||
Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData());
|
|
||||||
|
|
||||||
// Send it sync, and async. It's not that much data
|
// Send it sync, and async. It's not that much data
|
||||||
// and it improves user experience just so much!
|
// and it improves user experience just so much!
|
||||||
// DoSendLayerData(map);
|
// DoSendLayerData(map);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1250,18 +1242,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Send LayerData in typerwriter pattern
|
// Send LayerData in typerwriter pattern
|
||||||
<<<<<<< HEAD
|
|
||||||
//for (int y = 0; y < 16; y++)
|
|
||||||
//{
|
|
||||||
// for (int x = 0; x < 16; x++)
|
|
||||||
// {
|
|
||||||
// SendLayerData(x, y, map);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
// Send LayerData in a spiral pattern. Fun!
|
|
||||||
SendLayerTopRight(map, 0, 0, map.SizeX/Constants.TerrainPatchSize-1, map.SizeY/Constants.TerrainPatchSize-1);
|
|
||||||
=======
|
|
||||||
for (int y = 0; y < 16; y++)
|
for (int y = 0; y < 16; y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < 16; x++)
|
for (int x = 0; x < 16; x++)
|
||||||
|
@ -1269,7 +1250,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
SendLayerData(x, y, map);
|
SendLayerData(x, y, map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -1277,74 +1257,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private void SendLayerTopRight(TerrainData map, int x1, int y1, int x2, int y2)
|
|
||||||
=======
|
|
||||||
// Legacy form of invocation that passes around a bare data array.
|
|
||||||
// Just ignore what was passed and use the real terrain info that is part of the scene.
|
|
||||||
// As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI,
|
|
||||||
// there is a special form for specifying multiple terrain patches to send.
|
|
||||||
// The form is to pass 'px' as negative the number of patches to send and to
|
|
||||||
// pass the float array as pairs of patch X and Y coordinates. So, passing 'px'
|
|
||||||
// as -2 and map= [3, 5, 8, 4] would mean to send two terrain heightmap patches
|
|
||||||
// and the patches to send are <3,5> and <8,4>.
|
|
||||||
public void SendLayerData(int px, int py, float[] map)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
|
||||||
if (px >= 0)
|
|
||||||
{
|
|
||||||
SendLayerData(px, py, m_scene.Heightmap.GetTerrainData());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int numPatches = -px;
|
|
||||||
int[] xPatches = new int[numPatches];
|
|
||||||
int[] yPatches = new int[numPatches];
|
|
||||||
for (int pp = 0; pp < numPatches; pp++)
|
|
||||||
{
|
|
||||||
xPatches[pp] = (int)map[pp * 2];
|
|
||||||
yPatches[pp] = (int)map[pp * 2 + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// DebugSendingPatches("SendLayerData", xPatches, yPatches);
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (x2 - x1 > 0 && y2 - y1 > 0)
|
|
||||||
SendLayerBottomLeft(map, x1, y1 + 1, x2 - 1, y2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SendLayerBottomLeft(TerrainData map, int x1, int y1, int x2, int y2)
|
|
||||||
{
|
|
||||||
// Row in reverse
|
|
||||||
for (int i = x2; i >= x1; i--)
|
|
||||||
SendLayerData(i, y2, map);
|
|
||||||
|
|
||||||
// Column in reverse
|
|
||||||
for (int j = y2 - 1; j >= y1; j--)
|
|
||||||
SendLayerData(x1, j, map);
|
|
||||||
|
|
||||||
if (x2 - x1 > 0 && y2 - y1 > 0)
|
|
||||||
SendLayerTopRight(map, x1 + 1, y1, x2, y2 - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sends a set of four patches (x, x+1, ..., x+3) to the client
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="map">heightmap</param>
|
|
||||||
/// <param name="px">X coordinate for patches 0..12</param>
|
|
||||||
/// <param name="py">Y coordinate for patches 0..15</param>
|
|
||||||
// private void SendLayerPacket(float[] map, int y, int x)
|
|
||||||
// {
|
|
||||||
// int[] patches = new int[4];
|
|
||||||
// patches[0] = x + 0 + y * 16;
|
|
||||||
// patches[1] = x + 1 + y * 16;
|
|
||||||
// patches[2] = x + 2 + y * 16;
|
|
||||||
// patches[3] = x + 3 + y * 16;
|
|
||||||
|
|
||||||
// Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches);
|
|
||||||
// OutPacket(layerpack, ThrottleOutPacketType.Land);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Legacy form of invocation that passes around a bare data array.
|
// Legacy form of invocation that passes around a bare data array.
|
||||||
// Just ignore what was passed and use the real terrain info that is part of the scene.
|
// Just ignore what was passed and use the real terrain info that is part of the scene.
|
||||||
// As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI,
|
// As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI,
|
||||||
|
@ -1393,29 +1305,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
=======
|
|
||||||
SendLayerData(xPatches, yPatches, m_scene.Heightmap.GetTerrainData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DebugSendingPatches(string pWho, int[] pX, int[] pY)
|
|
||||||
{
|
|
||||||
if (m_log.IsDebugEnabled)
|
|
||||||
{
|
|
||||||
int numPatches = pX.Length;
|
|
||||||
string Xs = "";
|
|
||||||
string Ys = "";
|
|
||||||
for (int pp = 0; pp < numPatches; pp++)
|
|
||||||
{
|
|
||||||
Xs += String.Format("{0}", (int)pX[pp]) + ",";
|
|
||||||
Ys += String.Format("{0}", (int)pY[pp]) + ",";
|
|
||||||
}
|
|
||||||
m_log.DebugFormat("{0} {1}: numPatches={2}, X={3}, Y={4}", LogHeader, pWho, numPatches, Xs, Ys);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
/// Sends a terrain packet for the point specified.
|
/// Sends a terrain packet for the point specified.
|
||||||
/// This is a legacy call that has refarbed the terrain into a flat map of floats.
|
/// This is a legacy call that has refarbed the terrain into a flat map of floats.
|
||||||
/// We just use the terrain from the region we know about.
|
/// We just use the terrain from the region we know about.
|
||||||
|
@ -1467,40 +1357,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// When a user edits the terrain, so much data is sent, the data queues up fast and presents a
|
|
||||||
// sub optimal editing experience. To alleviate this issue, when the user edits the terrain, we
|
|
||||||
// start skipping the queues until they're done editing the terrain. We also make them
|
|
||||||
// unreliable because it's extremely likely that multiple packets will be sent for a terrain patch
|
|
||||||
// area invalidating previous packets for that area.
|
|
||||||
|
|
||||||
// It's possible for an editing user to flood themselves with edited packets but the majority
|
|
||||||
// of use cases are such that only a tiny percentage of users will be editing the terrain.
|
|
||||||
// Other, non-editing users will see the edits much slower.
|
|
||||||
|
|
||||||
// One last note on this topic, by the time users are going to be editing the terrain, it's
|
|
||||||
// extremely likely that the sim will have rezzed already and therefore this is not likely going
|
|
||||||
// to cause any additional issues with lost packets, objects or terrain patches.
|
|
||||||
|
|
||||||
// m_justEditedTerrain is volatile, so test once and duplicate two affected statements so we
|
|
||||||
// only have one cache miss.
|
|
||||||
private void SendTheLayerPacket(LayerDataPacket layerpack)
|
|
||||||
{
|
|
||||||
if (m_justEditedTerrain)
|
|
||||||
{
|
|
||||||
layerpack.Header.Reliable = false;
|
|
||||||
OutPacket(layerpack, ThrottleOutPacketType.Unknown );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
layerpack.Header.Reliable = true;
|
|
||||||
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
private void SendTheLayerPacket(LayerDataPacket layerpack)
|
private void SendTheLayerPacket(LayerDataPacket layerpack)
|
||||||
{
|
{
|
||||||
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2490,15 +2349,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
if (agentid == AgentId)
|
if (agentid == AgentId)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ActiveGroupId = activegroupid;
|
ActiveGroupId = activegroupid;
|
||||||
ActiveGroupName = groupname;
|
ActiveGroupName = groupname;
|
||||||
ActiveGroupPowers = grouppowers;
|
ActiveGroupPowers = grouppowers;
|
||||||
=======
|
|
||||||
m_activeGroupID = activegroupid;
|
|
||||||
m_activeGroupName = groupname;
|
|
||||||
m_activeGroupPowers = grouppowers;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate);
|
AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate);
|
||||||
|
@ -3888,15 +3741,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
avp.Sender.IsTrial = false;
|
avp.Sender.IsTrial = false;
|
||||||
avp.Sender.ID = agentID;
|
avp.Sender.ID = agentID;
|
||||||
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
|
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
|
||||||
<<<<<<< HEAD
|
|
||||||
avp.AppearanceHover = new AvatarAppearancePacket.AppearanceHoverBlock[0];
|
avp.AppearanceHover = new AvatarAppearancePacket.AppearanceHoverBlock[0];
|
||||||
=======
|
|
||||||
|
|
||||||
// this need be use in future
|
// this need be use in future ?
|
||||||
// avp.AppearanceData[0].AppearanceVersion = 0;
|
// avp.AppearanceData[0].AppearanceVersion = 0;
|
||||||
// avp.AppearanceData[0].CofVersion = 0;
|
// avp.AppearanceData[0].CofVersion = 0;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
||||||
OutPacket(avp, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
OutPacket(avp, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
||||||
}
|
}
|
||||||
|
@ -4014,22 +3864,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
|
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate))
|
if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate))
|
||||||
{
|
{
|
||||||
ImprovedTerseObjectUpdatePacket packet
|
ImprovedTerseObjectUpdatePacket packet
|
||||||
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate);
|
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate);
|
||||||
=======
|
|
||||||
if (entity is SceneObjectPart)
|
|
||||||
{
|
|
||||||
SceneObjectPart e = (SceneObjectPart)entity;
|
|
||||||
SceneObjectGroup g = e.ParentGroup;
|
|
||||||
if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId)
|
|
||||||
return; // Don't send updates for other people's HUDs
|
|
||||||
}
|
|
||||||
|
|
||||||
uint priority = m_prioritizer.GetUpdatePriority(this, entity);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
||||||
packet.RegionData.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f);
|
packet.RegionData.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f);
|
||||||
|
@ -4037,6 +3875,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false);
|
packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false);
|
||||||
OutPacket(packet, ThrottleOutPacketType.Unknown, true);
|
OutPacket(packet, ThrottleOutPacketType.Unknown, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (entity is SceneObjectPart)
|
||||||
|
{
|
||||||
|
SceneObjectPart e = (SceneObjectPart)entity;
|
||||||
|
SceneObjectGroup g = e.ParentGroup;
|
||||||
|
if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId)
|
||||||
|
return; // Don't send updates for other people's HUDs
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//double priority = m_prioritizer.GetUpdatePriority(this, entity);
|
//double priority = m_prioritizer.GetUpdatePriority(this, entity);
|
||||||
|
@ -4385,15 +4232,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
OutPacket(packet, ThrottleOutPacketType.Task, true);
|
OutPacket(packet, ThrottleOutPacketType.Task, true);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[LLCLIENTVIEW]: Sent {0} updates in ProcessEntityUpdates() for {1} {2} in {3}",
|
// "[LLCLIENTVIEW]: Sent {0} updates in ProcessEntityUpdates() for {1} {2} in {3}",
|
||||||
// updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name);
|
// updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name);
|
||||||
//
|
//
|
||||||
#endregion Packet Sending
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReprioritizeUpdates()
|
public void ReprioritizeUpdates()
|
||||||
|
@ -5360,11 +5203,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
ScenePresence presence = (ScenePresence)entity;
|
ScenePresence presence = (ScenePresence)entity;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[LLCLIENTVIEW]: Sending terse update to {0} with pos {1}, vel {2} in {3}",
|
|
||||||
// Name, presence.OffsetPosition, presence.Velocity, m_scene.Name);
|
|
||||||
=======
|
|
||||||
position = presence.OffsetPosition;
|
position = presence.OffsetPosition;
|
||||||
rotation = presence.Rotation;
|
rotation = presence.Rotation;
|
||||||
angularVelocity = presence.AngularVelocity;
|
angularVelocity = presence.AngularVelocity;
|
||||||
|
@ -5373,7 +5211,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
attachPoint = 0;
|
attachPoint = 0;
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name);
|
// "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// attachPoint = presence.State; // Core: commented
|
// attachPoint = presence.State; // Core: commented
|
||||||
collisionPlane = presence.CollisionPlane;
|
collisionPlane = presence.CollisionPlane;
|
||||||
|
@ -5495,24 +5332,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// "[LLCLIENTVIEW]: Sending full update to {0} with pos {1}, vel {2} in {3}", Name, data.OffsetPosition, data.Velocity, m_scene.Name);
|
// "[LLCLIENTVIEW]: Sending full update to {0} with pos {1}, vel {2} in {3}", Name, data.OffsetPosition, data.Velocity, m_scene.Name);
|
||||||
|
|
||||||
byte[] objectData = new byte[76];
|
byte[] objectData = new byte[76];
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
data.CollisionPlane.ToBytes(objectData, 0);
|
|
||||||
data.OffsetPosition.ToBytes(objectData, 16);
|
|
||||||
data.Velocity.ToBytes(objectData, 28);
|
|
||||||
// data.Acceleration.ToBytes(objectData, 40);
|
|
||||||
|
|
||||||
// Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis
|
|
||||||
// it rotates around.
|
|
||||||
// In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted
|
|
||||||
// excessive up and down movements of the camera when looking up and down.
|
|
||||||
// See http://opensimulator.org/mantis/view.php?id=3274
|
|
||||||
// This does not affect head movement, since this is controlled entirely by camera movement rather than
|
|
||||||
// body rotation. We still need to transmit X and Y for sitting avatars but mouselook does not change
|
|
||||||
// the rotation in this case.
|
|
||||||
Quaternion rot = data.Rotation;
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
Vector3 velocity = new Vector3(0, 0, 0);
|
Vector3 velocity = new Vector3(0, 0, 0);
|
||||||
Vector3 acceleration = new Vector3(0, 0, 0);
|
Vector3 acceleration = new Vector3(0, 0, 0);
|
||||||
|
@ -5596,11 +5415,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
//update.JointType = 0;
|
//update.JointType = 0;
|
||||||
update.Material = data.Material;
|
update.Material = data.Material;
|
||||||
update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim
|
update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
/*
|
/*
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (data.ParentGroup.IsAttachment)
|
if (data.ParentGroup.IsAttachment)
|
||||||
{
|
{
|
||||||
update.NameValue
|
update.NameValue
|
||||||
|
@ -5625,7 +5440,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// case for attachments may contain conflicting values that can end up crashing the viewer.
|
// case for attachments may contain conflicting values that can end up crashing the viewer.
|
||||||
update.State = data.ParentGroup.RootPart.Shape.State;
|
update.State = data.ParentGroup.RootPart.Shape.State;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (data.ParentGroup.IsAttachment)
|
if (data.ParentGroup.IsAttachment)
|
||||||
{
|
{
|
||||||
|
@ -9365,11 +9180,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if ((locX >= m_scene.RegionInfo.WorldLocX)
|
if ((locX >= m_scene.RegionInfo.WorldLocX)
|
||||||
&& (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX))
|
&& (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX))
|
||||||
&& (locY >= m_scene.RegionInfo.WorldLocY)
|
&& (locY >= m_scene.RegionInfo.WorldLocY)
|
||||||
<<<<<<< HEAD
|
|
||||||
&& (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)) )
|
|
||||||
=======
|
|
||||||
&& (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)))
|
&& (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
||||||
tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX;
|
tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX;
|
||||||
|
@ -12285,7 +12096,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="packet"></param>
|
/// <param name="packet"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
// TODO: Convert old handler to use new method
|
// TODO: Convert old handler to use new method
|
||||||
/*protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
|
/*
|
||||||
|
protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
|
||||||
{
|
{
|
||||||
AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet;
|
AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet;
|
||||||
AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
|
AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
|
||||||
|
@ -12340,27 +12152,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (cacheItems != null)
|
|
||||||
{
|
|
||||||
// We need to make sure the asset stored in the bake is available on this server also by its assetid before we map it to a Cacheid.
|
|
||||||
// Copy the baked textures to the sim's assets cache (local only).
|
|
||||||
foreach (WearableCacheItem item in cacheItems)
|
|
||||||
{
|
|
||||||
if (cache.GetCached(item.TextureID.ToString()) == null)
|
|
||||||
{
|
|
||||||
item.TextureAsset.Temporary = true;
|
|
||||||
item.TextureAsset.Local = true;
|
|
||||||
cache.Store(item.TextureAsset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the cached textures
|
|
||||||
for (int i = 0; i < maxWearablesLoop; i++)
|
|
||||||
{
|
|
||||||
WearableCacheItem item =
|
|
||||||
WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex, cacheItems);
|
|
||||||
=======
|
|
||||||
CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest;
|
CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest;
|
||||||
if (handlerCachedTextureRequest != null)
|
if (handlerCachedTextureRequest != null)
|
||||||
{
|
{
|
||||||
|
@ -12368,7 +12159,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}*/
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
|
protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
|
||||||
{
|
{
|
||||||
|
@ -12408,21 +12200,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
for (int i = 0; i < maxWearablesLoop; i++)
|
for (int i = 0; i < maxWearablesLoop; i++)
|
||||||
{
|
{
|
||||||
int idx = cachedtex.WearableData[i].TextureIndex;
|
int idx = cachedtex.WearableData[i].TextureIndex;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
||||||
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
||||||
cachedresp.WearableData[i].HostName = new byte[0];
|
cachedresp.WearableData[i].HostName = new byte[0];
|
||||||
<<<<<<< HEAD
|
|
||||||
if (item != null && cachedtex.WearableData[i].ID == item.CacheId)
|
|
||||||
{
|
|
||||||
cachedresp.WearableData[i].TextureID = item.TextureID;
|
|
||||||
=======
|
|
||||||
if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
|
if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
|
||||||
{
|
{
|
||||||
cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
|
cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
|
||||||
cacheHits++;
|
cacheHits++;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -12432,29 +12216,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// Cached textures not available
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
for (int i = 0; i < maxWearablesLoop; i++)
|
for (int i = 0; i < maxWearablesLoop; i++)
|
||||||
{
|
{
|
||||||
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
||||||
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
||||||
cachedresp.WearableData[i].TextureID = UUID.Zero;
|
cachedresp.WearableData[i].TextureID = UUID.Zero;
|
||||||
<<<<<<< HEAD
|
|
||||||
cachedresp.WearableData[i].HostName = new byte[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
//UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
|
|
||||||
cachedresp.WearableData[i].HostName = new byte[0];
|
cachedresp.WearableData[i].HostName = new byte[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.DebugFormat("texture cached: hits {0}", cacheHits);
|
m_log.DebugFormat("texture cached: hits {0}", cacheHits);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
cachedresp.Header.Zerocoded = true;
|
cachedresp.Header.Zerocoded = true;
|
||||||
OutPacket(cachedresp, ThrottleOutPacketType.Task);
|
OutPacket(cachedresp, ThrottleOutPacketType.Task);
|
||||||
|
|
||||||
|
|
|
@ -96,9 +96,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
m_throttleDebugLevel = value;
|
m_throttleDebugLevel = value;
|
||||||
|
/*
|
||||||
m_throttleClient.DebugLevel = m_throttleDebugLevel;
|
m_throttleClient.DebugLevel = m_throttleDebugLevel;
|
||||||
foreach (TokenBucket tb in m_throttleCategories)
|
foreach (TokenBucket tb in m_throttleCategories)
|
||||||
tb.DebugLevel = m_throttleDebugLevel;
|
tb.DebugLevel = m_throttleDebugLevel;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private int m_throttleDebugLevel;
|
private int m_throttleDebugLevel;
|
||||||
|
@ -250,22 +252,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (maxRTO != 0)
|
if (maxRTO != 0)
|
||||||
m_maxRTO = maxRTO;
|
m_maxRTO = maxRTO;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
ProcessUnackedSends = true;
|
|
||||||
|
|
||||||
// Create a token bucket throttle for this client that has the scene token bucket as a parent
|
|
||||||
m_throttleClient
|
|
||||||
= new AdaptiveTokenBucket(
|
|
||||||
string.Format("adaptive throttle for {0} in {1}", AgentID, server.Scene.Name),
|
|
||||||
parentThrottle, 0, rates.Total, rates.MinimumAdaptiveThrottleRate, rates.AdaptiveThrottlesEnabled);
|
|
||||||
|
|
||||||
=======
|
|
||||||
m_burstTime = rates.BrustTime;
|
m_burstTime = rates.BrustTime;
|
||||||
float m_burst = rates.ClientMaxRate * m_burstTime;
|
float m_burst = rates.ClientMaxRate * m_burstTime;
|
||||||
|
|
||||||
// Create a token bucket throttle for this client that has the scene token bucket as a parent
|
// Create a token bucket throttle for this client that has the scene token bucket as a parent
|
||||||
m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.ClientMaxRate, m_burst, rates.AdaptiveThrottlesEnabled);
|
m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.ClientMaxRate, m_burst, rates.AdaptiveThrottlesEnabled);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Create an array of token buckets for this clients different throttle categories
|
// Create an array of token buckets for this clients different throttle categories
|
||||||
m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT];
|
m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT];
|
||||||
|
|
||||||
|
@ -278,19 +270,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
|
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
|
||||||
|
|
||||||
// Initialize the packet outboxes, where packets sit while they are waiting for tokens
|
// Initialize the packet outboxes, where packets sit while they are waiting for tokens
|
||||||
<<<<<<< HEAD
|
|
||||||
m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue<OutgoingPacket>();
|
|
||||||
|
|
||||||
// Initialize the token buckets that control the throttling for each category
|
|
||||||
m_throttleCategories[i]
|
|
||||||
= new TokenBucket(
|
|
||||||
string.Format("{0} throttle for {1} in {2}", type, AgentID, server.Scene.Name),
|
|
||||||
m_throttleClient, rates.GetRate(type), 0);
|
|
||||||
=======
|
|
||||||
m_packetOutboxes[i] = new DoubleLocklessQueue<OutgoingPacket>();
|
m_packetOutboxes[i] = new DoubleLocklessQueue<OutgoingPacket>();
|
||||||
// Initialize the token buckets that control the throttling for each category
|
// Initialize the token buckets that control the throttling for each category
|
||||||
m_throttleCategories[i] = new TokenBucket(m_throttleClient, rates.GetRate(type), m_burst);
|
m_throttleCategories[i] = new TokenBucket(m_throttleClient, rates.GetRate(type), m_burst);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default the retransmission timeout to one second
|
// Default the retransmission timeout to one second
|
||||||
|
@ -337,12 +319,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
|
m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
|
||||||
m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
|
m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
|
||||||
m_info.totalThrottle = (int)m_throttleClient.DripRate;
|
m_info.totalThrottle = (int)m_throttleClient.DripRate;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_info.targetThrottle = (int)m_throttleClient.TargetDripRate;
|
|
||||||
m_info.maxThrottle = (int)m_throttleClient.MaxDripRate;
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
return m_info;
|
return m_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,13 +436,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
int texture = (int)(BitConverter.ToSingle(adjData, pos) * scale); pos += 4;
|
int texture = (int)(BitConverter.ToSingle(adjData, pos) * scale); pos += 4;
|
||||||
int asset = (int)(BitConverter.ToSingle(adjData, pos) * scale);
|
int asset = (int)(BitConverter.ToSingle(adjData, pos) * scale);
|
||||||
|
|
||||||
if (ThrottleDebugLevel > 0)
|
|
||||||
{
|
|
||||||
long total = resend + land + wind + cloud + task + texture + asset;
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}",
|
|
||||||
AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure none of the throttles are set below our packet MTU,
|
// Make sure none of the throttles are set below our packet MTU,
|
||||||
// otherwise a throttle could become permanently clogged
|
// otherwise a throttle could become permanently clogged
|
||||||
|
@ -486,32 +456,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// the task queue (e.g. object updates)
|
// the task queue (e.g. object updates)
|
||||||
task = task + (int)(m_cannibalrate * texture);
|
task = task + (int)(m_cannibalrate * texture);
|
||||||
texture = (int)((1 - m_cannibalrate) * texture);
|
texture = (int)((1 - m_cannibalrate) * texture);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
//int total = resend + land + wind + cloud + task + texture + asset;
|
|
||||||
|
|
||||||
if (ThrottleDebugLevel > 0)
|
|
||||||
{
|
|
||||||
long total = resend + land + wind + cloud + task + texture + asset;
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}",
|
|
||||||
AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
|
|
||||||
int total = resend + land + wind + cloud + task + texture + asset;
|
int total = resend + land + wind + cloud + task + texture + asset;
|
||||||
|
|
||||||
float m_burst = total * m_burstTime;
|
float m_burst = total * m_burstTime;
|
||||||
|
|
||||||
//m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}",
|
if (ThrottleDebugLevel > 0)
|
||||||
// AgentID, resend, land, wind, cloud, task, texture, asset, total);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// Update the token buckets with new throttle values
|
|
||||||
if (m_throttleClient.AdaptiveEnabled)
|
|
||||||
{
|
{
|
||||||
long total = resend + land + wind + cloud + task + texture + asset;
|
m_log.DebugFormat(
|
||||||
m_throttleClient.TargetDripRate = total;
|
"[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}",
|
||||||
|
AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total);
|
||||||
}
|
}
|
||||||
|
|
||||||
TokenBucket bucket;
|
TokenBucket bucket;
|
||||||
|
@ -887,20 +841,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// signature</param>
|
/// signature</param>
|
||||||
public void FireQueueEmpty(object o)
|
public void FireQueueEmpty(object o)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("[LLUDPCLIENT]: FireQueueEmpty for {0} in {1}", AgentID, m_udpServer.Scene.Name);
|
|
||||||
|
|
||||||
// int start = Environment.TickCount & Int32.MaxValue;
|
|
||||||
// const int MIN_CALLBACK_MS = 30;
|
|
||||||
|
|
||||||
// if (m_udpServer.IsRunningOutbound)
|
|
||||||
// {
|
|
||||||
ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o;
|
ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o;
|
||||||
QueueEmpty callback = OnQueueEmpty;
|
QueueEmpty callback = OnQueueEmpty;
|
||||||
=======
|
|
||||||
ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o;
|
|
||||||
QueueEmpty callback = OnQueueEmpty;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (callback != null)
|
if (callback != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -473,17 +473,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
#endregion BinaryStats
|
#endregion BinaryStats
|
||||||
|
|
||||||
<<<<<<< HEAD
|
Throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps * 10e-3f);
|
||||||
// FIXME: Can't add info here because don't know scene yet.
|
|
||||||
// m_throttle
|
|
||||||
// = new TokenBucket(
|
|
||||||
// string.Format("server throttle bucket for {0}", Scene.Name), null, sceneThrottleBps);
|
|
||||||
|
|
||||||
Throttle = new TokenBucket("server throttle bucket", null, 0, sceneThrottleBps);
|
|
||||||
|
|
||||||
=======
|
|
||||||
m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps * 10e-3f);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
ThrottleRates = new ThrottleRates(configSource);
|
ThrottleRates = new ThrottleRates(configSource);
|
||||||
|
|
||||||
Random rnd = new Random(Util.EnvironmentTickCount());
|
Random rnd = new Random(Util.EnvironmentTickCount());
|
||||||
|
@ -784,151 +774,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (UsePools)
|
if (UsePools)
|
||||||
EnablePoolStats();
|
EnablePoolStats();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
LLUDPServerCommands commands = new LLUDPServerCommands(MainConsole.Instance, this);
|
LLUDPServerCommands commands = new LLUDPServerCommands(MainConsole.Instance, this);
|
||||||
commands.Register();
|
commands.Register();
|
||||||
=======
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug", false, "debug lludp packet",
|
|
||||||
"debug lludp packet [--default] <level> [<avatar-first-name> <avatar-last-name>]",
|
|
||||||
"Turn on packet debugging",
|
|
||||||
"If level > 255 then all incoming and outgoing packets are logged.\n"
|
|
||||||
+ "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n"
|
|
||||||
+ "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n"
|
|
||||||
+ "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n"
|
|
||||||
+ "If level <= 50 then outgoing ImprovedTerseObjectUpdate packets are not logged.\n"
|
|
||||||
+ "If level <= 0 then no packets are logged.\n"
|
|
||||||
+ "If --default is specified then the level becomes the default logging level for all subsequent agents.\n"
|
|
||||||
+ "In this case, you cannot also specify an avatar name.\n"
|
|
||||||
+ "If an avatar name is given then only packets from that avatar are logged.",
|
|
||||||
HandlePacketCommand);
|
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug",
|
|
||||||
false,
|
|
||||||
"debug lludp start",
|
|
||||||
"debug lludp start <in|out|all>",
|
|
||||||
"Control LLUDP packet processing.",
|
|
||||||
"No effect if packet processing has already started.\n"
|
|
||||||
+ "in - start inbound processing.\n"
|
|
||||||
+ "out - start outbound processing.\n"
|
|
||||||
+ "all - start in and outbound processing.\n",
|
|
||||||
HandleStartCommand);
|
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug",
|
|
||||||
false,
|
|
||||||
"debug lludp stop",
|
|
||||||
"debug lludp stop <in|out|all>",
|
|
||||||
"Stop LLUDP packet processing.",
|
|
||||||
"No effect if packet processing has already stopped.\n"
|
|
||||||
+ "in - stop inbound processing.\n"
|
|
||||||
+ "out - stop outbound processing.\n"
|
|
||||||
+ "all - stop in and outbound processing.\n",
|
|
||||||
HandleStopCommand);
|
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug",
|
|
||||||
false,
|
|
||||||
"debug lludp pool",
|
|
||||||
"debug lludp pool <on|off>",
|
|
||||||
"Turn object pooling within the lludp component on or off.",
|
|
||||||
HandlePoolCommand);
|
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug",
|
|
||||||
false,
|
|
||||||
"debug lludp status",
|
|
||||||
"debug lludp status",
|
|
||||||
"Return status of LLUDP packet processing.",
|
|
||||||
HandleStatusCommand);
|
|
||||||
/* disabled
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
"Debug",
|
|
||||||
false,
|
|
||||||
"debug lludp toggle agentupdate",
|
|
||||||
"debug lludp toggle agentupdate",
|
|
||||||
"Toggle whether agentupdate packets are processed or simply discarded.",
|
|
||||||
HandleAgentUpdateCommand);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HandlePacketCommand(string module, string[] args)
|
|
||||||
{
|
|
||||||
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
|
||||||
return;
|
|
||||||
|
|
||||||
bool setAsDefaultLevel = false;
|
|
||||||
OptionSet optionSet = new OptionSet().Add("default", o => setAsDefaultLevel = o != null);
|
|
||||||
List<string> filteredArgs = optionSet.Parse(args);
|
|
||||||
|
|
||||||
string name = null;
|
|
||||||
|
|
||||||
if (filteredArgs.Count == 6)
|
|
||||||
{
|
|
||||||
if (!setAsDefaultLevel)
|
|
||||||
{
|
|
||||||
name = string.Format("{0} {1}", filteredArgs[4], filteredArgs[5]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainConsole.Instance.OutputFormat("ERROR: Cannot specify a user name when setting default logging level");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filteredArgs.Count > 3)
|
|
||||||
{
|
|
||||||
int newDebug;
|
|
||||||
if (int.TryParse(filteredArgs[3], out newDebug))
|
|
||||||
{
|
|
||||||
if (setAsDefaultLevel)
|
|
||||||
{
|
|
||||||
DefaultClientPacketDebugLevel = newDebug;
|
|
||||||
MainConsole.Instance.OutputFormat(
|
|
||||||
"Debug packet debug for new clients set to {0} in {1}", DefaultClientPacketDebugLevel, m_scene.Name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_scene.ForEachScenePresence(sp =>
|
|
||||||
{
|
|
||||||
if (name == null || sp.Name == name)
|
|
||||||
{
|
|
||||||
MainConsole.Instance.OutputFormat(
|
|
||||||
"Packet debug for {0} ({1}) set to {2} in {3}",
|
|
||||||
sp.Name, sp.IsChildAgent ? "child" : "root", newDebug, m_scene.Name);
|
|
||||||
|
|
||||||
sp.ControllingClient.DebugPacketLevel = newDebug;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainConsole.Instance.Output("Usage: debug lludp packet [--default] 0..255 [<first-name> <last-name>]");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HandleStartCommand(string module, string[] args)
|
|
||||||
{
|
|
||||||
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (args.Length != 4)
|
|
||||||
{
|
|
||||||
MainConsole.Instance.Output("Usage: debug lludp start <in|out|all>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string subCommand = args[3];
|
|
||||||
|
|
||||||
if (subCommand == "in" || subCommand == "all")
|
|
||||||
StartInbound();
|
|
||||||
|
|
||||||
if (subCommand == "out" || subCommand == "all")
|
|
||||||
StartOutbound();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HandlesRegion(Location x)
|
public bool HandlesRegion(Location x)
|
||||||
|
@ -1126,36 +975,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will
|
// If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will
|
||||||
// continue to display the deleted object until relog. Therefore, we need to always queue a kill object
|
// continue to display the deleted object until relog. Therefore, we need to always queue a kill object
|
||||||
// packet so that it isn't sent before a queued update packet.
|
// packet so that it isn't sent before a queued update packet.
|
||||||
<<<<<<< HEAD
|
|
||||||
bool forceQueue = (type == PacketType.KillObject);
|
|
||||||
|
|
||||||
// if (type == PacketType.ImprovedTerseObjectUpdate)
|
|
||||||
// {
|
|
||||||
// m_log.DebugFormat("Direct send ITOU to {0} in {1}", udpClient.AgentID, Scene.Name);
|
|
||||||
// SendPacketFinal(outgoingPacket);
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, forceQueue))
|
|
||||||
=======
|
|
||||||
bool requestQueue = type == PacketType.KillObject;
|
bool requestQueue = type == PacketType.KillObject;
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority))
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
=======
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
#endregion Queue or Send
|
#endregion Queue or Send
|
||||||
}
|
}
|
||||||
|
@ -1462,7 +1290,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
// If there is already a client for this endpoint, don't process UseCircuitCode
|
// If there is already a client for this endpoint, don't process UseCircuitCode
|
||||||
IClientAPI client = null;
|
IClientAPI client = null;
|
||||||
if (!m_scene.TryGetClient(endPoint, out client) || !(client is LLClientView))
|
if (!Scene.TryGetClient(endPoint, out client) || !(client is LLClientView))
|
||||||
{
|
{
|
||||||
// UseCircuitCode handling
|
// UseCircuitCode handling
|
||||||
if (packet.Type == PacketType.UseCircuitCode)
|
if (packet.Type == PacketType.UseCircuitCode)
|
||||||
|
@ -1473,12 +1301,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (m_pendingCache.Contains(endPoint))
|
if (m_pendingCache.Contains(endPoint))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Util.FireAndForget(HandleUseCircuitCode, array, "LLUDPServer.HandleUseCircuitCode");
|
|
||||||
=======
|
|
||||||
m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60);
|
m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// We need to copy the endpoint so that it doesn't get changed when another thread reuses the
|
// We need to copy the endpoint so that it doesn't get changed when another thread reuses the
|
||||||
// buffer.
|
// buffer.
|
||||||
|
@ -1507,14 +1331,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// Send ack straight away to let the viewer know that we got it.
|
// Send ack straight away to let the viewer know that we got it.
|
||||||
SendAckImmediate(endPoint, packet.Header.Sequence);
|
SendAckImmediate(endPoint, packet.Header.Sequence);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Util.FireAndForget(
|
|
||||||
HandleCompleteMovementIntoRegion, array, "LLUDPServer.HandleCompleteMovementIntoRegion");
|
|
||||||
=======
|
|
||||||
// We need to copy the endpoint so that it doesn't get changed when another thread reuses the
|
// We need to copy the endpoint so that it doesn't get changed when another thread reuses the
|
||||||
// buffer.
|
// buffer.
|
||||||
object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet };
|
object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet };
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
Util.FireAndForget(HandleCompleteMovementIntoRegion, array);
|
Util.FireAndForget(HandleCompleteMovementIntoRegion, array);
|
||||||
|
|
||||||
|
@ -1524,12 +1343,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine which agent this packet came from
|
// Determine which agent this packet came from
|
||||||
<<<<<<< HEAD
|
|
||||||
IClientAPI client;
|
|
||||||
if (!Scene.TryGetClient(endPoint, out client) || !(client is LLClientView))
|
|
||||||
=======
|
|
||||||
if (client == null || !(client is LLClientView))
|
if (client == null || !(client is LLClientView))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
//m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName);
|
//m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
@ -1547,7 +1361,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
if (!udpClient.IsConnected)
|
if (!udpClient.IsConnected)
|
||||||
{
|
{
|
||||||
m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName);
|
m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + Scene.RegionInfo.RegionName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1652,28 +1466,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length);
|
LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length);
|
||||||
#endregion BinaryStats
|
#endregion BinaryStats
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (packet.Type == PacketType.AgentUpdate)
|
|
||||||
{
|
|
||||||
if (DiscardInboundAgentUpdates)
|
|
||||||
return;
|
|
||||||
|
|
||||||
((LLClientView)client).TotalAgentUpdates++;
|
//Ubit AgentUpdate mess removed from here
|
||||||
|
|
||||||
AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet;
|
|
||||||
|
|
||||||
LLClientView llClient = client as LLClientView;
|
|
||||||
if (agentUpdate.AgentData.SessionID != client.SessionId
|
|
||||||
|| agentUpdate.AgentData.AgentID != client.AgentId
|
|
||||||
|| !(llClient == null || llClient.CheckAgentUpdateSignificance(agentUpdate.AgentData)) )
|
|
||||||
{
|
|
||||||
PacketPool.Instance.ReturnPacket(packet);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// AgentUpdate mess removed from here
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
#region Ping Check Handling
|
#region Ping Check Handling
|
||||||
|
|
||||||
|
@ -1853,7 +1648,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AuthenticateResponse sessionInfo;
|
AuthenticateResponse sessionInfo;
|
||||||
if (IsClientAuthorized(uccp, out sessionInfo))
|
if (IsClientAuthorized(uccp, out sessionInfo))
|
||||||
{
|
{
|
||||||
AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
|
AgentCircuitData aCircuit = Scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
|
||||||
|
|
||||||
// Begin the process of adding the client to the simulator
|
// Begin the process of adding the client to the simulator
|
||||||
client
|
client
|
||||||
|
@ -1868,7 +1663,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// an existing child agent, and there is no circuit data
|
// an existing child agent, and there is no circuit data
|
||||||
if (client != null && aCircuit == null)
|
if (client != null && aCircuit == null)
|
||||||
{
|
{
|
||||||
m_scene.CloseAgent(client.AgentId, true);
|
Scene.CloseAgent(client.AgentId, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1908,14 +1703,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// We only want to send initial data to new clients, not ones which are being converted from child to root.
|
// We only want to send initial data to new clients, not ones which are being converted from child to root.
|
||||||
if (client != null)
|
if (client != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
AgentCircuitData aCircuit = Scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
bool tp = (aCircuit.teleportFlags > 0);
|
bool tp = (aCircuit.teleportFlags > 0);
|
||||||
// Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
|
// Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
|
||||||
if (!tp && !client.SceneAgent.SentInitialDataToClient)
|
if (!tp)
|
||||||
client.SceneAgent.SendInitialDataToClient();
|
client.SceneAgent.SendInitialDataToMe();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1923,17 +1714,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// Don't create clients for unauthorized requesters.
|
// Don't create clients for unauthorized requesters.
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[LLUDPSERVER]: Ignoring connection request for {0} to {1} with unknown circuit code {2} from IP {3}",
|
"[LLUDPSERVER]: Ignoring connection request for {0} to {1} with unknown circuit code {2} from IP {3}",
|
||||||
<<<<<<< HEAD
|
|
||||||
uccp.CircuitCode.ID, Scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
uccp.CircuitCode.ID, Scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint);
|
||||||
uccp.CircuitCode.ID, m_scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint);
|
|
||||||
|
|
||||||
lock (m_pendingCache)
|
lock (m_pendingCache)
|
||||||
m_pendingCache.Remove(endPoint);
|
m_pendingCache.Remove(endPoint);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
|
// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
|
||||||
// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
|
// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
|
||||||
|
@ -2127,24 +1914,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
if (!Scene.TryGetClient(agentID, out client))
|
if (!Scene.TryGetClient(agentID, out client))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
|
||||||
=======
|
|
||||||
createNew = true;
|
createNew = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (client.SceneAgent == null)
|
if (client.SceneAgent == null)
|
||||||
{
|
{
|
||||||
m_scene.CloseAgent(agentID, true);
|
Scene.CloseAgent(agentID, true);
|
||||||
createNew = true;
|
createNew = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (createNew)
|
if (createNew)
|
||||||
{
|
{
|
||||||
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, m_throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
client = new LLClientView(Scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode);
|
client = new LLClientView(Scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode);
|
||||||
client.OnLogout += LogoutHandler;
|
client.OnLogout += LogoutHandler;
|
||||||
|
@ -2174,29 +1958,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
ClientLogoutsDueToNoReceives++;
|
ClientLogoutsDueToNoReceives++;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.",
|
|
||||||
client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, Scene.Name);
|
|
||||||
=======
|
|
||||||
if (client.SceneAgent != null)
|
if (client.SceneAgent != null)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.",
|
"[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.",
|
||||||
client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, m_scene.Name);
|
client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, Scene.Name);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (!client.SceneAgent.IsChildAgent)
|
if (!client.SceneAgent.IsChildAgent)
|
||||||
client.Kick("Simulator logged you out due to connection timeout.");
|
client.Kick("Simulator logged you out due to connection timeout.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
if (!Scene.CloseAgent(client.AgentId, true))
|
||||||
Scene.CloseAgent(client.AgentId, true);
|
|
||||||
=======
|
|
||||||
if (!m_scene.CloseAgent(client.AgentId, true))
|
|
||||||
client.Close(true,true);
|
client.Close(true,true);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void IncomingPacketHandler()
|
private void IncomingPacketHandler()
|
||||||
|
@ -2209,7 +1983,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
while (IsRunningInbound)
|
while (IsRunningInbound)
|
||||||
{
|
{
|
||||||
m_scene.ThreadAlive(1);
|
Scene.ThreadAlive(1);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IncomingPacket incomingPacket = null;
|
IncomingPacket incomingPacket = null;
|
||||||
|
@ -2261,7 +2035,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
while (base.IsRunningOutbound)
|
while (base.IsRunningOutbound)
|
||||||
{
|
{
|
||||||
m_scene.ThreadAlive(2);
|
Scene.ThreadAlive(2);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_packetSent = false;
|
m_packetSent = false;
|
||||||
|
@ -2524,15 +2298,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
m_currentIncomingClient = null;
|
m_currentIncomingClient = null;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}",
|
|
||||||
packet.Type, client.Name, Scene.RegionInfo.RegionName);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// }
|
// }
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
|
@ -2540,7 +2305,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}",
|
// "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}",
|
||||||
// packet.Type, client.Name, m_scene.RegionInfo.RegionName);
|
// packet.Type, client.Name, m_scene.RegionInfo.RegionName);
|
||||||
// }
|
// }
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
IncomingPacketsProcessed++;
|
IncomingPacketsProcessed++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,7 +224,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
||||||
cdl.AddRow("Adaptive throttles", m_udpServer.ThrottleRates.AdaptiveThrottlesEnabled);
|
cdl.AddRow("Adaptive throttles", m_udpServer.ThrottleRates.AdaptiveThrottlesEnabled);
|
||||||
|
|
||||||
long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate;
|
long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate;
|
||||||
cdl.AddRow(
|
cdl.AddRow(
|
||||||
"Max scene throttle",
|
"Max scene throttle",
|
||||||
maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset");
|
maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset");
|
||||||
|
@ -505,7 +505,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
m_console.OutputFormat("Debug settings for {0}", m_udpServer.Scene.Name);
|
m_console.OutputFormat("Debug settings for {0}", m_udpServer.Scene.Name);
|
||||||
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
||||||
|
|
||||||
long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate;
|
long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate;
|
||||||
cdl.AddRow(
|
cdl.AddRow(
|
||||||
"max-scene-throttle",
|
"max-scene-throttle",
|
||||||
maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset");
|
maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset");
|
||||||
|
|
|
@ -35,6 +35,7 @@ using OpenSim.Tests.Common;
|
||||||
|
|
||||||
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ThrottleTests : OpenSimTestCase
|
public class ThrottleTests : OpenSimTestCase
|
||||||
{
|
{
|
||||||
|
@ -57,16 +58,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSetRequestDripRate()
|
public void TestSetRequestDripRate()
|
||||||
{
|
{
|
||||||
|
|
||||||
TestHelpers.InMethod();
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
TokenBucket tb = new TokenBucket("tb", null, 5000, 0);
|
TokenBucket tb = new TokenBucket(null, 5000f,10000f);
|
||||||
AssertRates(tb, 5000, 0, 5000, 0);
|
AssertRates(tb, 5000, 0, 5000, 0);
|
||||||
|
|
||||||
tb.RequestedDripRate = 4000;
|
tb.RequestedDripRate = 4000f;
|
||||||
AssertRates(tb, 4000, 0, 4000, 0);
|
AssertRates(tb, 4000, 0, 4000, 0);
|
||||||
|
|
||||||
tb.RequestedDripRate = 6000;
|
tb.RequestedDripRate = 6000;
|
||||||
AssertRates(tb, 6000, 0, 6000, 0);
|
AssertRates(tb, 6000, 0, 6000, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -74,7 +77,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
{
|
{
|
||||||
TestHelpers.InMethod();
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
TokenBucket tb = new TokenBucket("tb", null, 5000, 10000);
|
TokenBucket tb = new TokenBucket(null, 5000,15000);
|
||||||
AssertRates(tb, 5000, 0, 5000, 10000);
|
AssertRates(tb, 5000, 0, 5000, 10000);
|
||||||
|
|
||||||
tb.RequestedDripRate = 4000;
|
tb.RequestedDripRate = 4000;
|
||||||
|
@ -92,9 +95,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
{
|
{
|
||||||
TestHelpers.InMethod();
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
TokenBucket tbParent = new TokenBucket("tbParent", null, 0, 0);
|
TokenBucket tbParent = new TokenBucket("tbParent", null, 0);
|
||||||
TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000, 0);
|
TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000);
|
||||||
TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000, 0);
|
TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000);
|
||||||
|
|
||||||
AssertRates(tbParent, 8000, 8000, 8000, 0);
|
AssertRates(tbParent, 8000, 8000, 8000, 0);
|
||||||
AssertRates(tbChild1, 3000, 0, 3000, 0);
|
AssertRates(tbChild1, 3000, 0, 3000, 0);
|
||||||
|
@ -113,6 +116,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
AssertRates(tbParent, 6000, 8000, 6000, 0);
|
AssertRates(tbParent, 6000, 8000, 6000, 0);
|
||||||
AssertRates(tbChild1, 3000, 0, 6000 / 8 * 3, 0);
|
AssertRates(tbChild1, 3000, 0, 6000 / 8 * 3, 0);
|
||||||
AssertRates(tbChild2, 5000, 0, 6000 / 8 * 5, 0);
|
AssertRates(tbChild2, 5000, 0, 6000 / 8 * 5, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AssertRates(
|
private void AssertRates(
|
||||||
|
@ -424,4 +428,5 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
udpClient.SetThrottles(throttles);
|
udpClient.SetThrottles(throttles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
|
@ -42,24 +42,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public class TokenBucket
|
public class TokenBucket
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
public string Identifier { get; private set; }
|
|
||||||
|
|
||||||
public int DebugLevel { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of ticks (ms) per quantum, drip rate and max burst
|
|
||||||
/// are defined over this interval.
|
|
||||||
/// </summary>
|
|
||||||
protected const Int32 m_ticksPerQuantum = 1000;
|
|
||||||
=======
|
|
||||||
private static Int32 m_counter = 0;
|
private static Int32 m_counter = 0;
|
||||||
|
|
||||||
// private Int32 m_identifier;
|
// private Int32 m_identifier;
|
||||||
|
|
||||||
protected const float m_timeScale = 1e-3f;
|
protected const float m_timeScale = 1e-3f;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is the number of m_minimumDripRate bytes
|
/// This is the number of m_minimumDripRate bytes
|
||||||
|
@ -72,11 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
protected const Int32 m_minimumDripRate = LLUDPServer.MTU;
|
|
||||||
=======
|
|
||||||
protected const float m_minimumDripRate = 1400;
|
protected const float m_minimumDripRate = 1400;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>Time of the last drip, in system ticks</summary>
|
/// <summary>Time of the last drip, in system ticks</summary>
|
||||||
protected Int32 m_lastDrip;
|
protected Int32 m_lastDrip;
|
||||||
|
@ -90,27 +74,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Map of children buckets and their requested maximum burst rate
|
/// Map of children buckets and their requested maximum burst rate
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
protected Dictionary<TokenBucket,Int64> m_children = new Dictionary<TokenBucket,Int64>();
|
|
||||||
=======
|
|
||||||
protected Dictionary<TokenBucket, float> m_children = new Dictionary<TokenBucket, float>();
|
protected Dictionary<TokenBucket, float> m_children = new Dictionary<TokenBucket, float>();
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The parent bucket of this bucket, or null if this bucket has no
|
/// The parent bucket of this bucket, or null if this bucket has no
|
||||||
/// parent. The parent bucket will limit the aggregate bandwidth of all
|
/// parent. The parent bucket will limit the aggregate bandwidth of all
|
||||||
/// of its children buckets
|
/// of its children buckets
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TokenBucket Parent { get; protected set; }
|
protected TokenBucket m_parent;
|
||||||
|
public TokenBucket Parent
|
||||||
|
{
|
||||||
|
get { return m_parent; }
|
||||||
|
set { m_parent = value; }
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is the maximum number
|
/// This is the maximum number
|
||||||
/// of tokens that can accumulate in the bucket at any one time. This
|
/// of tokens that can accumulate in the bucket at any one time. This
|
||||||
/// also sets the total request for leaf nodes
|
/// also sets the total request for leaf nodes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected float m_burst;
|
protected float m_burst;
|
||||||
|
//not in use
|
||||||
|
public float MaxDripRate { get; set; }
|
||||||
|
|
||||||
public float RequestedBurst
|
public float RequestedBurst
|
||||||
{
|
{
|
||||||
get { return m_burst; }
|
get { return m_burst; }
|
||||||
|
@ -143,63 +131,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// Can never be above MaxDripRate.
|
/// Can never be above MaxDripRate.
|
||||||
/// Tokens are added to the bucket at any time
|
/// Tokens are added to the bucket at any time
|
||||||
/// <seealso cref="RemoveTokens"/> is called, at the granularity of
|
/// <seealso cref="RemoveTokens"/> is called, at the granularity of
|
||||||
<<<<<<< HEAD
|
|
||||||
/// the system tick interval (typically around 15-22ms)
|
|
||||||
/// FIXME: It is extremely confusing to be able to set a RequestedDripRate of 0 and then receive a positive
|
|
||||||
/// number on get if TotalDripRequest is set. This also stops us being able to retrieve the fact that
|
|
||||||
/// RequestedDripRate is set to 0. Really, this should always return m_dripRate and then we can get
|
|
||||||
/// (m_dripRate == 0 ? TotalDripRequest : m_dripRate) on some other properties.
|
|
||||||
/// </remarks>
|
|
||||||
public virtual Int64 RequestedDripRate
|
|
||||||
{
|
|
||||||
get { return (m_dripRate == 0 ? TotalDripRequest : m_dripRate); }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value <= 0)
|
|
||||||
m_dripRate = 0;
|
|
||||||
else if (MaxDripRate > 0 && value > MaxDripRate)
|
|
||||||
m_dripRate = MaxDripRate;
|
|
||||||
else
|
|
||||||
m_dripRate = value;
|
|
||||||
|
|
||||||
m_burstRate = (Int64)((double)m_dripRate * m_quantumsPerBurst);
|
|
||||||
|
|
||||||
if (Parent != null)
|
|
||||||
Parent.RegisterRequest(this, m_dripRate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the drip rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>
|
|
||||||
/// DripRate can never be above max drip rate or below min drip rate.
|
|
||||||
/// If we are a child bucket then the drip rate return is modifed by the total load on the capacity of the
|
|
||||||
/// parent bucket.
|
|
||||||
/// </value>
|
|
||||||
public virtual Int64 DripRate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
double rate;
|
|
||||||
|
|
||||||
// FIXME: This doesn't properly work if we have a parent and children and a requested drip rate set
|
|
||||||
// on ourselves which is not equal to the child drip rates.
|
|
||||||
if (Parent == null)
|
|
||||||
{
|
|
||||||
if (TotalDripRequest > 0)
|
|
||||||
rate = Math.Min(RequestedDripRate, TotalDripRequest);
|
|
||||||
else
|
|
||||||
rate = RequestedDripRate;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rate = (double)RequestedDripRate * Parent.DripRateModifier();
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
/// the system tick interval (typically around 15-22ms)</remarks>
|
/// the system tick interval (typically around 15-22ms)</remarks>
|
||||||
protected float m_dripRate;
|
protected float m_dripRate;
|
||||||
|
|
||||||
public virtual float RequestedDripRate
|
public virtual float RequestedDripRate
|
||||||
{
|
{
|
||||||
get { return (m_dripRate == 0 ? m_totalDripRequest : m_dripRate); }
|
get { return (m_dripRate == 0 ? m_totalDripRequest : m_dripRate); }
|
||||||
|
@ -220,28 +154,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
return rate;
|
return rate;
|
||||||
|
|
||||||
rate *= m_parent.DripRateModifier();
|
rate *= m_parent.DripRateModifier();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (rate < m_minimumDripRate)
|
if (rate < m_minimumDripRate)
|
||||||
rate = m_minimumDripRate;
|
rate = m_minimumDripRate;
|
||||||
else if (MaxDripRate > 0 && rate > MaxDripRate)
|
|
||||||
rate = MaxDripRate;
|
|
||||||
|
|
||||||
return (float)rate;
|
return (float)rate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected Int64 m_dripRate;
|
|
||||||
|
|
||||||
// <summary>
|
|
||||||
// The maximum rate for flow control. Drip rate can never be greater than this.
|
|
||||||
// </summary>
|
|
||||||
public Int64 MaxDripRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The current total of the requested maximum burst rates of children buckets.
|
/// The current total of the requested maximum burst rates of children buckets.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
public Int64 TotalDripRequest { get; protected set; }
|
|
||||||
=======
|
|
||||||
protected float m_totalDripRequest;
|
protected float m_totalDripRequest;
|
||||||
public float TotalDripRequest
|
public float TotalDripRequest
|
||||||
{
|
{
|
||||||
|
@ -252,7 +174,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
#endregion Properties
|
#endregion Properties
|
||||||
|
|
||||||
#region Constructor
|
#region Constructor
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default constructor
|
/// Default constructor
|
||||||
|
@ -260,36 +182,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="identifier">Identifier for this token bucket</param>
|
/// <param name="identifier">Identifier for this token bucket</param>
|
||||||
/// <param name="parent">Parent bucket if this is a child bucket, or
|
/// <param name="parent">Parent bucket if this is a child bucket, or
|
||||||
/// null if this is a root bucket</param>
|
/// null if this is a root bucket</param>
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <param name="requestedDripRate">
|
|
||||||
/// Requested rate that the bucket fills, in bytes per
|
|
||||||
/// second. If zero, the bucket always remains full.
|
|
||||||
/// </param>
|
|
||||||
public TokenBucket(string identifier, TokenBucket parent, Int64 requestedDripRate, Int64 maxDripRate)
|
|
||||||
=======
|
|
||||||
/// <param name="maxBurst">Maximum size of the bucket in bytes, or
|
/// <param name="maxBurst">Maximum size of the bucket in bytes, or
|
||||||
/// zero if this bucket has no maximum capacity</param>
|
/// zero if this bucket has no maximum capacity</param>
|
||||||
/// <param name="dripRate">Rate that the bucket fills, in bytes per
|
/// <param name="dripRate">Rate that the bucket fills, in bytes per
|
||||||
/// second. If zero, the bucket always remains full</param>
|
/// second. If zero, the bucket always remains full</param>
|
||||||
public TokenBucket(TokenBucket parent, float dripRate, float MaxBurst)
|
public TokenBucket(TokenBucket parent, float dripRate, float MaxBurst)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
Identifier = identifier;
|
m_counter++;
|
||||||
|
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
<<<<<<< HEAD
|
|
||||||
RequestedDripRate = requestedDripRate;
|
|
||||||
MaxDripRate = maxDripRate;
|
|
||||||
m_lastDrip = Util.EnvironmentTickCount();
|
|
||||||
=======
|
|
||||||
RequestedDripRate = dripRate;
|
RequestedDripRate = dripRate;
|
||||||
RequestedBurst = MaxBurst;
|
RequestedBurst = MaxBurst;
|
||||||
// TotalDripRequest = dripRate; // this will be overwritten when a child node registers
|
// TotalDripRequest = dripRate; // this will be overwritten when a child node registers
|
||||||
// MaxBurst = (Int64)((double)dripRate * m_quantumsPerBurst);
|
// MaxBurst = (Int64)((double)dripRate * m_quantumsPerBurst);
|
||||||
m_lastDrip = Util.EnvironmentTickCount() + 100000;
|
m_lastDrip = Util.EnvironmentTickCount() + 100000;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion Constructor
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Compute a modifier for the MaxBurst rate. This is 1.0, meaning
|
/// Compute a modifier for the MaxBurst rate. This is 1.0, meaning
|
||||||
/// no modification if the requested bandwidth is less than the
|
/// no modification if the requested bandwidth is less than the
|
||||||
|
@ -299,20 +209,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected float DripRateModifier()
|
protected float DripRateModifier()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
Int64 driprate = DripRate;
|
|
||||||
double modifier = driprate >= TotalDripRequest ? 1.0 : (double)driprate / (double)TotalDripRequest;
|
|
||||||
|
|
||||||
// if (DebugLevel > 0)
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[TOKEN BUCKET]: Returning drip modifier {0}/{1} = {2} from {3}",
|
|
||||||
// driprate, TotalDripRequest, modifier, Identifier);
|
|
||||||
|
|
||||||
return modifier;
|
|
||||||
=======
|
|
||||||
float driprate = DripRate;
|
float driprate = DripRate;
|
||||||
return driprate >= TotalDripRequest ? 1.0f : driprate / TotalDripRequest;
|
return driprate >= TotalDripRequest ? 1.0f : driprate / TotalDripRequest;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -335,29 +233,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
m_children[child] = request;
|
m_children[child] = request;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
TotalDripRequest = 0;
|
|
||||||
foreach (KeyValuePair<TokenBucket, Int64> cref in m_children)
|
|
||||||
TotalDripRequest += cref.Value;
|
|
||||||
=======
|
|
||||||
m_totalDripRequest = 0;
|
m_totalDripRequest = 0;
|
||||||
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
||||||
m_totalDripRequest += cref.Value;
|
m_totalDripRequest += cref.Value;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass the new values up to the parent
|
// Pass the new values up to the parent
|
||||||
if (Parent != null)
|
if (m_parent != null)
|
||||||
{
|
m_parent.RegisterRequest(this, Math.Min(RequestedDripRate, TotalDripRequest));
|
||||||
Int64 effectiveDripRate;
|
|
||||||
|
|
||||||
if (RequestedDripRate > 0)
|
|
||||||
effectiveDripRate = Math.Min(RequestedDripRate, TotalDripRequest);
|
|
||||||
else
|
|
||||||
effectiveDripRate = TotalDripRequest;
|
|
||||||
|
|
||||||
Parent.RegisterRequest(this, effectiveDripRate);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -370,15 +253,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
m_children.Remove(child);
|
m_children.Remove(child);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
TotalDripRequest = 0;
|
|
||||||
foreach (KeyValuePair<TokenBucket, Int64> cref in m_children)
|
|
||||||
TotalDripRequest += cref.Value;
|
|
||||||
=======
|
|
||||||
m_totalDripRequest = 0;
|
m_totalDripRequest = 0;
|
||||||
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
||||||
m_totalDripRequest += cref.Value;
|
m_totalDripRequest += cref.Value;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass the new values up to the parent
|
// Pass the new values up to the parent
|
||||||
|
@ -427,7 +304,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// with no drip rate...
|
// with no drip rate...
|
||||||
if (DripRate == 0)
|
if (DripRate == 0)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[TOKENBUCKET] something odd is happening and drip rate is 0 for {0}", Identifier);
|
m_log.WarnFormat("[TOKENBUCKET] something odd is happening and drip rate is 0 for {0}", m_counter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -453,17 +330,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public bool AdaptiveEnabled { get; set; }
|
public bool AdaptiveEnabled { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
/// Target drip rate for this bucket.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>Usually set by the client. If adaptive is enabled then throttles will increase until we reach this.</remarks>
|
|
||||||
public Int64 TargetDripRate
|
|
||||||
{
|
|
||||||
get { return m_targetDripRate; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
m_targetDripRate = Math.Max(value, m_minimumFlow);
|
|
||||||
=======
|
|
||||||
/// The minimum rate for flow control. Minimum drip rate is one
|
/// The minimum rate for flow control. Minimum drip rate is one
|
||||||
/// packet per second.
|
/// packet per second.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -482,10 +348,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
m_maxDripRate = (value == 0 ? m_totalDripRequest : Math.Max(value, m_minimumFlow));
|
m_maxDripRate = (value == 0 ? m_totalDripRequest : Math.Max(value, m_minimumFlow));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected Int64 m_targetDripRate;
|
|
||||||
|
private bool m_enabled = false;
|
||||||
|
|
||||||
// <summary>
|
// <summary>
|
||||||
// Adjust drip rate in response to network conditions.
|
// Adjust drip rate in response to network conditions.
|
||||||
|
@ -493,56 +359,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public virtual float AdjustedDripRate
|
public virtual float AdjustedDripRate
|
||||||
{
|
{
|
||||||
get { return m_dripRate; }
|
get { return m_dripRate; }
|
||||||
<<<<<<< HEAD
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
m_dripRate = OpenSim.Framework.Util.Clamp<Int64>(value, m_minimumFlow, TargetDripRate);
|
m_dripRate = OpenSim.Framework.Util.Clamp<float>(value, m_minimumFlow, MaxDripRate);
|
||||||
m_burstRate = (Int64)((double)m_dripRate * m_quantumsPerBurst);
|
|
||||||
|
|
||||||
if (Parent != null)
|
|
||||||
Parent.RegisterRequest(this, m_dripRate);
|
|
||||||
=======
|
|
||||||
set {
|
|
||||||
m_dripRate = OpenSim.Framework.Util.Clamp<float>(value,m_minimumFlow,MaxDripRate);
|
|
||||||
|
|
||||||
if (m_parent != null)
|
if (m_parent != null)
|
||||||
m_parent.RegisterRequest(this,m_dripRate);
|
m_parent.RegisterRequest(this, m_dripRate);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The minimum rate for adaptive flow control.
|
|
||||||
/// </summary>
|
|
||||||
protected Int64 m_minimumFlow = 32000;
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor for the AdaptiveTokenBucket class
|
|
||||||
/// <param name="identifier">Unique identifier for the client</param>
|
|
||||||
/// <param name="parent">Parent bucket in the hierarchy</param>
|
|
||||||
/// <param name="requestedDripRate"></param>
|
|
||||||
/// <param name="maxDripRate">The ceiling rate for adaptation</param>
|
|
||||||
/// <param name="minDripRate">The floor rate for adaptation</param>
|
|
||||||
/// </summary>
|
|
||||||
public AdaptiveTokenBucket(string identifier, TokenBucket parent, Int64 requestedDripRate, Int64 maxDripRate, Int64 minDripRate, bool enabled)
|
|
||||||
: base(identifier, parent, requestedDripRate, maxDripRate)
|
|
||||||
{
|
|
||||||
AdaptiveEnabled = enabled;
|
|
||||||
|
|
||||||
if (AdaptiveEnabled)
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[TOKENBUCKET]: Adaptive throttle enabled");
|
|
||||||
m_minimumFlow = minDripRate;
|
|
||||||
TargetDripRate = m_minimumFlow;
|
|
||||||
AdjustedDripRate = m_minimumFlow;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// <summary>
|
// <summary>
|
||||||
//
|
//
|
||||||
// </summary>
|
// </summary>
|
||||||
public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate,float maxBurst, bool enabled)
|
public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate, float maxBurst, bool enabled)
|
||||||
: base(parent, maxDripRate,maxBurst)
|
: base(parent, maxDripRate, maxBurst)
|
||||||
{
|
{
|
||||||
m_enabled = enabled;
|
m_enabled = enabled;
|
||||||
|
|
||||||
|
@ -552,50 +383,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AdjustedDripRate = m_maxDripRate * .5f;
|
AdjustedDripRate = m_maxDripRate * .5f;
|
||||||
else
|
else
|
||||||
AdjustedDripRate = m_maxDripRate;
|
AdjustedDripRate = m_maxDripRate;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reliable packets sent to the client for which we never received an ack adjust the drip rate down.
|
/// Reliable packets sent to the client for which we never received an ack adjust the drip rate down.
|
||||||
/// <param name="packets">Number of packets that expired without successful delivery</param>
|
/// <param name="packets">Number of packets that expired without successful delivery</param>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ExpirePackets(Int32 packets)
|
public void ExpirePackets(Int32 count)
|
||||||
{
|
{
|
||||||
if (AdaptiveEnabled)
|
// m_log.WarnFormat("[ADAPTIVEBUCKET] drop {0} by {1} expired packets",AdjustedDripRate,count);
|
||||||
{
|
if (m_enabled)
|
||||||
if (DebugLevel > 0)
|
AdjustedDripRate = (Int64)(AdjustedDripRate / Math.Pow(2, count));
|
||||||
m_log.WarnFormat(
|
|
||||||
"[ADAPTIVEBUCKET] drop {0} by {1} expired packets for {2}",
|
|
||||||
AdjustedDripRate, packets, Identifier);
|
|
||||||
|
|
||||||
// AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,packets));
|
|
||||||
|
|
||||||
// Compute the fallback solely on the rate allocated beyond the minimum, this
|
|
||||||
// should smooth out the fallback to the minimum rate
|
|
||||||
AdjustedDripRate = m_minimumFlow + (Int64) ((AdjustedDripRate - m_minimumFlow) / Math.Pow(2, packets));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
// <summary>
|
||||||
/// Reliable packets acked by the client adjust the drip rate up.
|
//
|
||||||
/// <param name="packets">Number of packets successfully acknowledged</param>
|
// </summary>
|
||||||
/// </summary>
|
public void AcknowledgePackets(Int32 count)
|
||||||
public void AcknowledgePackets(Int32 packets)
|
|
||||||
{
|
{
|
||||||
if (AdaptiveEnabled)
|
if (m_enabled)
|
||||||
AdjustedDripRate = AdjustedDripRate + packets * LLUDPServer.MTU;
|
AdjustedDripRate = AdjustedDripRate + count;
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adjust the minimum flow level for the adaptive throttle, this will drop adjusted
|
|
||||||
/// throttles back to the minimum levels
|
|
||||||
/// <param>minDripRate--the new minimum flow</param>
|
|
||||||
/// </summary>
|
|
||||||
public void ResetMinimumAdaptiveFlow(Int64 minDripRate)
|
|
||||||
{
|
|
||||||
m_minimumFlow = minDripRate;
|
|
||||||
TargetDripRate = m_minimumFlow;
|
|
||||||
AdjustedDripRate = m_minimumFlow;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,11 +141,6 @@ namespace OpenSim.Region.ClientStack
|
||||||
PhysicsPluginManager physicsPluginManager;
|
PhysicsPluginManager physicsPluginManager;
|
||||||
physicsPluginManager = new PhysicsPluginManager();
|
physicsPluginManager = new PhysicsPluginManager();
|
||||||
physicsPluginManager.LoadPluginsFromAssemblies("Physics");
|
physicsPluginManager.LoadPluginsFromAssemblies("Physics");
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return physicsPluginManager.GetPhysicsScene(engine, meshEngine, config, osSceneIdentifier, regionExtent);
|
return physicsPluginManager.GetPhysicsScene(engine, meshEngine, config, osSceneIdentifier, regionExtent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,8 +455,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
|
||||||
m_transactions.RemoveXferUploader(m_transactionID);
|
m_transactions.RemoveXferUploader(m_transactionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
private void ValidateAssets()
|
private void ValidateAssets()
|
||||||
{
|
{
|
||||||
if (m_asset.Type == (sbyte)CustomAssetType.AnimationSet)
|
if (m_asset.Type == (sbyte)CustomAssetType.AnimationSet)
|
||||||
|
@ -599,6 +598,5 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,25 +406,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
|
|
||||||
Dictionary<SceneObjectGroup, string> scriptStates = new Dictionary<SceneObjectGroup, string>();
|
Dictionary<SceneObjectGroup, string> scriptStates = new Dictionary<SceneObjectGroup, string>();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
foreach (SceneObjectGroup so in attachments)
|
|
||||||
{
|
|
||||||
// Scripts MUST be snapshotted before the object is
|
|
||||||
// removed from the scene because doing otherwise will
|
|
||||||
// clobber the run flag
|
|
||||||
// This must be done outside the sp.AttachmentSyncLock so that there is no risk of a deadlock from
|
|
||||||
// scripts performing attachment operations at the same time. Getting object states stops the scripts.
|
|
||||||
scriptStates[so] = PrepareScriptInstanceForSave(so, false);
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[ATTACHMENTS MODULE]: For object {0} for {1} in {2} got saved state {3}",
|
|
||||||
// so.Name, sp.Name, m_scene.Name, scriptStates[so]);
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (sp.AttachmentsSyncLock)
|
|
||||||
=======
|
|
||||||
if (sp.PresenceType != PresenceType.Npc)
|
if (sp.PresenceType != PresenceType.Npc)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
foreach (SceneObjectGroup so in attachments)
|
foreach (SceneObjectGroup so in attachments)
|
||||||
{
|
{
|
||||||
|
@ -477,18 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
if (!Enabled)
|
if (!Enabled)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
group.DetachFromBackup();
|
|
||||||
|
|
||||||
bool success = AttachObjectInternal(sp, group, attachmentPt, silent, addToInventory, false, append);
|
|
||||||
|
|
||||||
if (!success)
|
|
||||||
group.AttachToBackup();
|
|
||||||
|
|
||||||
return success;
|
|
||||||
=======
|
|
||||||
return AttachObjectInternal(sp, group, attachmentPt, silent, useAttachData, addToInventory, false, append);
|
return AttachObjectInternal(sp, group, attachmentPt, silent, useAttachData, addToInventory, false, append);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -229,7 +229,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
private void SendAppearance(ScenePresence sp)
|
private void SendAppearance(ScenePresence sp)
|
||||||
{
|
{
|
||||||
// Send the appearance to everyone in the scene
|
// Send the appearance to everyone in the scene
|
||||||
sp.SendAppearanceToAllOtherClients();
|
sp.SendAppearanceToAllOtherAgents();
|
||||||
|
|
||||||
// Send animations back to the avatar as well
|
// Send animations back to the avatar as well
|
||||||
sp.Animator.SendAnimPack();
|
sp.Animator.SendAnimPack();
|
||||||
|
@ -460,7 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
{
|
{
|
||||||
m_log.Debug("[UpdateBakedCache] uploading to bakedModule cache");
|
m_log.Debug("[UpdateBakedCache] uploading to bakedModule cache");
|
||||||
|
|
||||||
m_BakedTextureModule.Store(sp.UUID);
|
m_BakedTextureModule.Store(sp.UUID, wearableCache);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,12 +529,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}",
|
|
||||||
// face.TextureID, idx, client.Name, client.AgentId);
|
|
||||||
=======
|
|
||||||
*/
|
*/
|
||||||
bool wearableCacheValid = false;
|
bool wearableCacheValid = false;
|
||||||
if (wearableCache == null)
|
if (wearableCache == null)
|
||||||
|
@ -577,15 +571,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
if (wearableCacheValid)
|
if (wearableCacheValid)
|
||||||
m_log.Debug("[ValidateBakedCache] have valid local cache");
|
m_log.Debug("[ValidateBakedCache] have valid local cache");
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
bool checkExternal = false;
|
bool checkExternal = false;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
if (!wearableCacheValid)
|
if (!wearableCacheValid)
|
||||||
{
|
{
|
||||||
// only use external bake module on login condition check
|
// only use external bake module on login condition check
|
||||||
|
@ -658,7 +646,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
sp.Appearance.WearableCacheItems = wearableCache;
|
sp.Appearance.WearableCacheItems = wearableCache;
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
for (byte i = 0; i < visualParams.Length; i++)
|
for (byte i = 0; i < visualParams.Length; i++)
|
||||||
visualParams[i] = i;
|
visualParams[i] = i;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10));
|
Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10));
|
||||||
uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes);
|
uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes);
|
||||||
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
||||||
|
@ -145,12 +144,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, null);
|
afm.SetAppearance(sp, bakedTextureEntry, visualParams, null);
|
||||||
|
|
||||||
Assert.That(rebakeRequestsReceived, Is.EqualTo(0));
|
Assert.That(rebakeRequestsReceived, Is.EqualTo(0));
|
||||||
=======
|
|
||||||
afm.SetAppearance(sp, new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)), visualParams, new WearableCacheItem[0]);
|
|
||||||
|
|
||||||
// TODO: Check baked texture
|
|
||||||
Assert.AreEqual(visualParams, sp.Appearance.VisualParams);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -188,11 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
||||||
eyesFace.TextureID = eyesTextureId;
|
eyesFace.TextureID = eyesTextureId;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, null);
|
|
||||||
=======
|
|
||||||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, new WearableCacheItem[0]);
|
afm.SetAppearance(sp, bakedTextureEntry, visualParams, new WearableCacheItem[0]);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
afm.SaveBakedTextures(userId);
|
afm.SaveBakedTextures(userId);
|
||||||
// Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId);
|
// Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId);
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,14 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Store(UUID agentId)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void UpdateMeshAvatar(UUID agentId)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Store(UUID agentId, WearableCacheItem[] data)
|
public void Store(UUID agentId, WearableCacheItem[] data)
|
||||||
{
|
{
|
||||||
if (m_URL == String.Empty)
|
if (m_URL == String.Empty)
|
||||||
|
|
|
@ -214,13 +214,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
||||||
UUID destination = c.Destination;
|
UUID destination = c.Destination;
|
||||||
Vector3 fromPos = c.Position;
|
Vector3 fromPos = c.Position;
|
||||||
Vector3 regionPos = new Vector3(scene.RegionInfo.WorldLocX, scene.RegionInfo.WorldLocY, 0);
|
Vector3 regionPos = new Vector3(scene.RegionInfo.WorldLocX, scene.RegionInfo.WorldLocY, 0);
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
bool checkParcelHide = false;
|
bool checkParcelHide = false;
|
||||||
UUID sourceParcelID = UUID.Zero;
|
UUID sourceParcelID = UUID.Zero;
|
||||||
Vector3 hidePos = fromPos;
|
Vector3 hidePos = fromPos;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (c.Channel == DEBUG_CHANNEL) c.Type = ChatTypeEnum.DebugChannel;
|
if (c.Channel == DEBUG_CHANNEL) c.Type = ChatTypeEnum.DebugChannel;
|
||||||
|
|
||||||
|
@ -377,27 +374,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
||||||
// m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);
|
// m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);
|
||||||
HashSet<UUID> receiverIDs = new HashSet<UUID>();
|
HashSet<UUID> receiverIDs = new HashSet<UUID>();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
((Scene)c.Scene).ForEachRootClient(
|
|
||||||
delegate(IClientAPI client)
|
|
||||||
{
|
|
||||||
// don't forward SayOwner chat from objects to
|
|
||||||
// non-owner agents
|
|
||||||
if ((c.Type == ChatTypeEnum.Owner) &&
|
|
||||||
(null != c.SenderObject) &&
|
|
||||||
(((SceneObjectPart)c.SenderObject).OwnerID != client.AgentId))
|
|
||||||
return;
|
|
||||||
|
|
||||||
client.SendChatMessage(
|
|
||||||
c.Message, (byte)cType, CenterOfRegion, fromName, fromID, ownerID,
|
|
||||||
(byte)sourceType, (byte)ChatAudibleLevel.Fully);
|
|
||||||
|
|
||||||
receiverIDs.Add(client.AgentId);
|
|
||||||
});
|
|
||||||
|
|
||||||
(c.Scene as Scene).EventManager.TriggerOnChatToClients(
|
|
||||||
fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
|
|
||||||
=======
|
|
||||||
if (c.Scene != null)
|
if (c.Scene != null)
|
||||||
{
|
{
|
||||||
((Scene)c.Scene).ForEachRootClient
|
((Scene)c.Scene).ForEachRootClient
|
||||||
|
@ -419,7 +395,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
||||||
(c.Scene as Scene).EventManager.TriggerOnChatToClients(
|
(c.Scene as Scene).EventManager.TriggerOnChatToClients(
|
||||||
fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
|
fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -183,15 +183,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
=======
|
|
||||||
if (obj == null)
|
|
||||||
return;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0
|
if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0
|
||||||
|| avatar.Scene.RegionInfo.RegionSettings.AllowDamage)
|
|| avatar.Scene.RegionInfo.RegionSettings.AllowDamage)
|
||||||
{
|
{
|
||||||
|
|
|
@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
SendGridInstantMessageViaXMLRPC(im, result);
|
SendGridInstantMessageViaXMLRPC(im, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result)
|
public virtual void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result)
|
||||||
{
|
{
|
||||||
UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage;
|
UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage;
|
||||||
|
|
||||||
|
@ -445,14 +445,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// delegate for sending a grid instant message asynchronously
|
/// delegate for sending a grid instant message asynchronously
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result);
|
|
||||||
=======
|
|
||||||
private delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result);
|
private delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
private class GIM {
|
private class GIM {
|
||||||
public GridInstantMessage im;
|
public GridInstantMessage im;
|
||||||
|
@ -479,31 +476,22 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
d.BeginInvoke(im, result, GridInstantMessageCompleted, d);
|
|
||||||
=======
|
|
||||||
private void GridInstantMessageCompleted(IAsyncResult iar)
|
private void GridInstantMessageCompleted(IAsyncResult iar)
|
||||||
{
|
{
|
||||||
GridInstantMessageDelegate d = (GridInstantMessageDelegate)iar.AsyncState;
|
GridInstantMessageDelegate d = (GridInstantMessageDelegate)iar.AsyncState;
|
||||||
d.EndInvoke(iar);
|
d.EndInvoke(iar);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Internal SendGridInstantMessage over XMLRPC method.
|
/// Internal SendGridInstantMessage over XMLRPC method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <remarks>
|
|
||||||
/// This is called from within a dedicated thread.
|
|
||||||
/// </remarks>
|
|
||||||
private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result)
|
|
||||||
=======
|
|
||||||
/// <param name="prevRegionHandle">
|
/// <param name="prevRegionHandle">
|
||||||
/// Pass in 0 the first time this method is called. It will be called recursively with the last
|
/// Pass in 0 the first time this method is called. It will be called recursively with the last
|
||||||
/// regionhandle tried
|
/// regionhandle tried
|
||||||
/// </param>
|
/// </param>
|
||||||
private void SendGridInstantMessageViaXMLRPCAsyncMain(GridInstantMessage im, MessageResultNotification result)
|
private void SendGridInstantMessageViaXMLRPCAsyncMain(GridInstantMessage im, MessageResultNotification result)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
GIM gim;
|
GIM gim;
|
||||||
do {
|
do {
|
||||||
|
@ -525,88 +513,125 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
}
|
}
|
||||||
} while (gim != null);
|
} while (gim != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result, UUID prevRegionID)
|
private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result, UUID prevRegionID)
|
||||||
{
|
{
|
||||||
|
|
||||||
UUID toAgentID = new UUID(im.toAgentID);
|
UUID toAgentID = new UUID(im.toAgentID);
|
||||||
|
PresenceInfo upd = null;
|
||||||
UUID regionID;
|
UUID regionID;
|
||||||
bool needToLookupAgent;
|
bool lookupAgent = false;
|
||||||
|
|
||||||
lock (m_UserRegionMap)
|
lock (m_UserRegionMap)
|
||||||
needToLookupAgent = !m_UserRegionMap.TryGetValue(toAgentID, out regionID);
|
{
|
||||||
|
if (m_UserRegionMap.ContainsKey(toAgentID))
|
||||||
|
{
|
||||||
|
upd = new PresenceInfo();
|
||||||
|
upd.RegionID = m_UserRegionMap[toAgentID];
|
||||||
|
|
||||||
while (true)
|
// We need to compare the current regionhandle with the previous region handle
|
||||||
|
// or the recursive loop will never end because it will never try to lookup the agent again
|
||||||
|
if (prevRegionID == upd.RegionID)
|
||||||
{
|
{
|
||||||
if (needToLookupAgent)
|
lookupAgent = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
|
lookupAgent = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Are we needing to look-up an agent?
|
||||||
|
if (lookupAgent)
|
||||||
|
{
|
||||||
|
// Non-cached user agent lookup.
|
||||||
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() });
|
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() });
|
||||||
|
if (presences != null && presences.Length > 0)
|
||||||
UUID foundRegionID = UUID.Zero;
|
|
||||||
|
|
||||||
if (presences != null)
|
|
||||||
{
|
{
|
||||||
foreach (PresenceInfo p in presences)
|
foreach (PresenceInfo p in presences)
|
||||||
{
|
{
|
||||||
if (p.RegionID != UUID.Zero)
|
if (p.RegionID != UUID.Zero)
|
||||||
{
|
{
|
||||||
foundRegionID = p.RegionID;
|
upd = p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not found or the found region is the same as the last lookup, then message is undeliverable
|
if (upd != null)
|
||||||
if (foundRegionID == UUID.Zero || foundRegionID == regionID)
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
regionID = foundRegionID;
|
|
||||||
}
|
|
||||||
|
|
||||||
GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, regionID);
|
|
||||||
if (reginfo == null)
|
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", regionID);
|
// check if we've tried this before..
|
||||||
break;
|
// This is one way to end the recursive loop
|
||||||
|
//
|
||||||
|
if (upd.RegionID == prevRegionID)
|
||||||
|
{
|
||||||
|
// m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
|
||||||
|
HandleUndeliverableMessage(im, result);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
|
||||||
|
HandleUndeliverableMessage(im, result);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Try to send the message to the agent via the retrieved region.
|
|
||||||
Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im);
|
|
||||||
msgdata["region_handle"] = 0;
|
|
||||||
bool imresult = doIMSending(reginfo, msgdata);
|
|
||||||
|
|
||||||
// If the message delivery was successful, then cache the entry.
|
|
||||||
if (imresult)
|
|
||||||
=======
|
|
||||||
if (upd != null)
|
if (upd != null)
|
||||||
{
|
{
|
||||||
GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero,
|
GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero,
|
||||||
upd.RegionID);
|
upd.RegionID);
|
||||||
if (reginfo != null)
|
if (reginfo != null)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
|
Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im);
|
||||||
|
// Not actually used anymore, left in for compatibility
|
||||||
|
// Remove at next interface change
|
||||||
|
//
|
||||||
|
msgdata["region_handle"] = 0;
|
||||||
|
bool imresult = doIMSending(reginfo, msgdata);
|
||||||
|
if (imresult)
|
||||||
|
{
|
||||||
|
// IM delivery successful, so store the Agent's location in our local cache.
|
||||||
lock (m_UserRegionMap)
|
lock (m_UserRegionMap)
|
||||||
{
|
{
|
||||||
m_UserRegionMap[toAgentID] = regionID;
|
if (m_UserRegionMap.ContainsKey(toAgentID))
|
||||||
|
{
|
||||||
|
m_UserRegionMap[toAgentID] = upd.RegionID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_UserRegionMap.Add(toAgentID, upd.RegionID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
result(true);
|
result(true);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// try again, but lookup user this time.
|
||||||
|
// Warning, this must call the Async version
|
||||||
|
// of this method or we'll be making thousands of threads
|
||||||
|
// The version within the spawned thread is SendGridInstantMessageViaXMLRPCAsync
|
||||||
|
// The version that spawns the thread is SendGridInstantMessageViaXMLRPC
|
||||||
|
|
||||||
// If we reach this point in the first iteration of the while, then we may have unsuccessfully tried
|
// This is recursive!!!!!
|
||||||
// to use a locally cached region ID. All subsequent attempts need to lookup agent details from
|
SendGridInstantMessageViaXMLRPCAsync(im, result,
|
||||||
// the presence service.
|
upd.RegionID);
|
||||||
needToLookupAgent = true;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// If we reached this point then the message was not deliverable. Remove the bad cache entry and
|
else
|
||||||
// signal the delivery failure.
|
{
|
||||||
lock (m_UserRegionMap)
|
m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", upd.RegionID);
|
||||||
m_UserRegionMap.Remove(toAgentID);
|
|
||||||
|
|
||||||
// m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
|
|
||||||
HandleUndeliverableMessage(im, result);
|
HandleUndeliverableMessage(im, result);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HandleUndeliverableMessage(im, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This actually does the XMLRPC Request
|
/// This actually does the XMLRPC Request
|
||||||
|
@ -709,6 +734,5 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
gim["message_key"] = m_MessageKey;
|
gim["message_key"] = m_MessageKey;
|
||||||
return gim;
|
return gim;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (!m_ForwardOfflineGroupMessages)
|
if (!m_ForwardOfflineGroupMessages)
|
||||||
{
|
{
|
||||||
if (im.dialog == (byte)InstantMessageDialog.GroupNotice ||
|
if (im.dialog == (byte)InstantMessageDialog.GroupNotice ||
|
||||||
|
@ -246,9 +245,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
|
|
||||||
"POST", m_RestURL+"/SaveMessage/", im, 10000);
|
|
||||||
=======
|
|
||||||
Scene scene = FindScene(new UUID(im.fromAgentID));
|
Scene scene = FindScene(new UUID(im.fromAgentID));
|
||||||
if (scene == null)
|
if (scene == null)
|
||||||
scene = m_SceneList[0];
|
scene = m_SceneList[0];
|
||||||
|
@ -256,7 +252,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
||||||
SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>(
|
SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>(
|
||||||
"POST", m_RestURL+"/SaveMessage/?scope=" +
|
"POST", m_RestURL+"/SaveMessage/?scope=" +
|
||||||
scene.RegionInfo.ScopeID.ToString(), im);
|
scene.RegionInfo.ScopeID.ToString(), im);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
|
if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
|
||||||
{
|
{
|
||||||
|
|
|
@ -180,13 +180,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
"[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory",
|
"[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory",
|
||||||
folderID, new UUID(im.toAgentID));
|
folderID, new UUID(im.toAgentID));
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
InventoryFolderBase folderCopy
|
InventoryFolderBase folderCopy
|
||||||
= scene.GiveInventoryFolder(client, receipientID, client.AgentId, folderID, UUID.Zero);
|
= scene.GiveInventoryFolder(client, recipientID, client.AgentId, folderID, UUID.Zero);
|
||||||
=======
|
|
||||||
InventoryFolderBase folderCopy
|
|
||||||
= scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (folderCopy == null)
|
if (folderCopy == null)
|
||||||
{
|
{
|
||||||
|
@ -475,7 +470,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
/// <param name="im"></param>
|
/// <param name="im"></param>
|
||||||
private void OnGridInstantMessage(GridInstantMessage im)
|
private void OnGridInstantMessage(GridInstantMessage im)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// Check if it's a type of message that we should handle
|
// Check if it's a type of message that we should handle
|
||||||
if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered)
|
if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered)
|
||||||
|| (im.dialog == (byte) InstantMessageDialog.TaskInventoryOffered)
|
|| (im.dialog == (byte) InstantMessageDialog.TaskInventoryOffered)
|
||||||
|
@ -488,8 +482,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
"[INVENTORY TRANSFER]: {0} IM type received from grid. From={1} ({2}), To={3}",
|
"[INVENTORY TRANSFER]: {0} IM type received from grid. From={1} ({2}), To={3}",
|
||||||
(InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID);
|
(InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID);
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Check if this is ours to handle
|
// Check if this is ours to handle
|
||||||
//
|
//
|
||||||
Scene scene = FindClientScene(new UUID(im.toAgentID));
|
Scene scene = FindClientScene(new UUID(im.toAgentID));
|
||||||
|
|
|
@ -869,7 +869,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
#endregion Notes
|
#endregion Notes
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
#region User Preferences
|
#region User Preferences
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates the user preferences.
|
/// Updates the user preferences.
|
||||||
|
@ -933,8 +933,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
#endregion User Preferences
|
#endregion User Preferences
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
#region Avatar Properties
|
#region Avatar Properties
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the avatars interests .
|
/// Update the avatars interests .
|
||||||
|
@ -1401,8 +1399,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
#endregion Util
|
#endregion Util
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
#region Web Util
|
#region Web Util
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1580,6 +1576,5 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endregion Web Util
|
#endregion Web Util
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,16 +154,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// Add this agent in this region as a banned person
|
// Add this agent in this region as a banned person
|
||||||
public void Add(ulong pRegionHandle, UUID pAgentID)
|
public void Add(ulong pRegionHandle, UUID pAgentID)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache))
|
|
||||||
{
|
|
||||||
m_idCache = new ExpiringCache<ulong, DateTime>();
|
|
||||||
m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(45));
|
|
||||||
}
|
|
||||||
m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15));
|
|
||||||
=======
|
|
||||||
this.Add(pRegionHandle, pAgentID, 45, 15);
|
this.Add(pRegionHandle, pAgentID, 45, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Add(ulong pRegionHandle, UUID pAgentID, double newTime, double extendTime)
|
public void Add(ulong pRegionHandle, UUID pAgentID, double newTime, double extendTime)
|
||||||
{
|
{
|
||||||
if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache))
|
if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache))
|
||||||
|
@ -172,8 +165,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(newTime));
|
m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(newTime));
|
||||||
}
|
}
|
||||||
m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(extendTime), TimeSpan.FromSeconds(extendTime));
|
m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(extendTime), TimeSpan.FromSeconds(extendTime));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the agent from the region's banned list
|
// Remove the agent from the region's banned list
|
||||||
public void Remove(ulong pRegionHandle, UUID pAgentID)
|
public void Remove(ulong pRegionHandle, UUID pAgentID)
|
||||||
{
|
{
|
||||||
|
@ -183,6 +176,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BannedRegionCache m_bannedRegionCache = new BannedRegionCache();
|
private BannedRegionCache m_bannedRegionCache = new BannedRegionCache();
|
||||||
|
|
||||||
private IEventQueue m_eqModule;
|
private IEventQueue m_eqModule;
|
||||||
|
@ -222,7 +216,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
string transferVersionName = "SIMULATION";
|
string transferVersionName = "SIMULATION";
|
||||||
float maxTransferVersion = 0.3f;
|
float maxTransferVersion = 0.3f;
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
IConfig hypergridConfig = source.Configs["Hypergrid"];
|
IConfig hypergridConfig = source.Configs["Hypergrid"];
|
||||||
if (hypergridConfig != null)
|
if (hypergridConfig != null)
|
||||||
|
@ -235,8 +228,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
if (m_GatekeeperURI != string.Empty && !m_GatekeeperURI.EndsWith("/"))
|
if (m_GatekeeperURI != string.Empty && !m_GatekeeperURI.EndsWith("/"))
|
||||||
m_GatekeeperURI += '/';
|
m_GatekeeperURI += '/';
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
IConfig transferConfig = source.Configs["EntityTransfer"];
|
IConfig transferConfig = source.Configs["EntityTransfer"];
|
||||||
if (transferConfig != null)
|
if (transferConfig != null)
|
||||||
|
@ -515,11 +506,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
// TODO: Check other Scene HeightField
|
// TODO: Check other Scene HeightField
|
||||||
posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y];
|
posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y];
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
posZLimit += localHalfAVHeight + 0.1f;
|
posZLimit += localHalfAVHeight + 0.1f;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if ((position.Z < posZLimit) && !(Single.IsInfinity(posZLimit) || Single.IsNaN(posZLimit)))
|
if ((position.Z < posZLimit) && !(Single.IsInfinity(posZLimit) || Single.IsNaN(posZLimit)))
|
||||||
{
|
{
|
||||||
|
@ -622,15 +610,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
Util.RegionHandleToRegionLoc(regionHandle, out regX, out regY);
|
Util.RegionHandleToRegionLoc(regionHandle, out regX, out regY);
|
||||||
|
|
||||||
MapBlockData block = new MapBlockData();
|
MapBlockData block = new MapBlockData();
|
||||||
<<<<<<< HEAD
|
|
||||||
block.X = (ushort)regX;
|
|
||||||
block.Y = (ushort)regY;
|
|
||||||
block.Access = (byte)SimAccess.Down;
|
|
||||||
=======
|
|
||||||
block.X = (ushort)(regX);
|
block.X = (ushort)(regX);
|
||||||
block.Y = (ushort)(regY);
|
block.Y = (ushort)(regY);
|
||||||
block.Access = (byte)SimAccess.Down; // == not there
|
block.Access = (byte)SimAccess.Down; // == not there
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||||
blocks.Add(block);
|
blocks.Add(block);
|
||||||
|
@ -765,13 +747,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
|
||||||
Util.RegionHandleToRegionLoc(reg.RegionHandle, out newRegionX, out newRegionY);
|
|
||||||
Util.RegionHandleToRegionLoc(sp.Scene.RegionInfo.RegionHandle, out oldRegionX, out oldRegionY);
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
ulong destinationHandle = finalDestination.RegionHandle;
|
ulong destinationHandle = finalDestination.RegionHandle;
|
||||||
|
|
||||||
// Let's do DNS resolution only once in this process, please!
|
// Let's do DNS resolution only once in this process, please!
|
||||||
|
@ -794,11 +769,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
string version;
|
string version;
|
||||||
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
||||||
if (!Scene.SimulationService.QueryAccess(
|
if (!Scene.SimulationService.QueryAccess(
|
||||||
<<<<<<< HEAD
|
|
||||||
finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason))
|
finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason))
|
||||||
=======
|
|
||||||
finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, out version, out reason))
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
sp.ControllingClient.SendTeleportFailed(reason);
|
sp.ControllingClient.SendTeleportFailed(reason);
|
||||||
|
|
||||||
|
@ -860,12 +831,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
agentCircuit.Id0 = currentAgentCircuit.Id0;
|
agentCircuit.Id0 = currentAgentCircuit.Id0;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
|
||||||
float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance,
|
|
||||||
(float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY));
|
|
||||||
if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
|
||||||
=======
|
|
||||||
IClientIPEndpoint ipepClient;
|
IClientIPEndpoint ipepClient;
|
||||||
|
|
||||||
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
||||||
|
@ -880,7 +845,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
||||||
|
|
||||||
if (OutSideViewRange)
|
if (OutSideViewRange)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}",
|
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}",
|
||||||
|
@ -911,11 +875,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
float.TryParse(versionComponents[1], out versionNumber);
|
float.TryParse(versionComponents[1], out versionNumber);
|
||||||
|
|
||||||
if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber)
|
if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber)
|
||||||
<<<<<<< HEAD
|
|
||||||
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason);
|
|
||||||
=======
|
|
||||||
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange , version, out reason);
|
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange , version, out reason);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
else
|
else
|
||||||
TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange, version, out reason);
|
TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange, version, out reason);
|
||||||
}
|
}
|
||||||
|
@ -973,21 +933,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring);
|
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring);
|
||||||
|
|
||||||
// OK, it got this agent. Let's close some child agents
|
// OK, it got this agent. Let's close some child agents
|
||||||
<<<<<<< HEAD
|
|
||||||
sp.CloseChildAgents(newRegionX, newRegionY);
|
|
||||||
|
|
||||||
IClientIPEndpoint ipepClient;
|
|
||||||
string capsPath = String.Empty;
|
|
||||||
float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance,
|
|
||||||
(float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY));
|
|
||||||
if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for incoming agent {3} from {4}",
|
|
||||||
finalDestination.RegionName, newRegionX, newRegionY, sp.Name, Scene.Name);
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
|
|
||||||
if (OutSideViewRange)
|
if (OutSideViewRange)
|
||||||
{
|
{
|
||||||
|
@ -1157,11 +1102,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (NeedsClosing(sp.Scene.DefaultDrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
|
|
||||||
=======
|
|
||||||
if (OutSideViewRange)
|
if (OutSideViewRange)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||||
return;
|
return;
|
||||||
|
@ -1226,35 +1167,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// Past this point we have to attempt clean up if the teleport fails, so update transfer state.
|
// Past this point we have to attempt clean up if the teleport fails, so update transfer state.
|
||||||
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring);
|
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
IClientIPEndpoint ipepClient;
|
|
||||||
string capsPath = String.Empty;
|
|
||||||
float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance,
|
|
||||||
(float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY));
|
|
||||||
if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}",
|
|
||||||
finalDestination.RegionName, newRegionX, newRegionY, sp.Name, Scene.Name);
|
|
||||||
|
|
||||||
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
|
|
||||||
#region IP Translation for NAT
|
|
||||||
// Uses ipepClient above
|
|
||||||
if (sp.ClientView.TryGet(out ipepClient))
|
|
||||||
{
|
|
||||||
endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
agentCircuit.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, reg.RegionHandle);
|
|
||||||
capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// We need to set this here to avoid an unlikely race condition when teleporting to a neighbour simulator,
|
// We need to set this here to avoid an unlikely race condition when teleporting to a neighbour simulator,
|
||||||
// where that neighbour simulator could otherwise request a child agent create on the source which then
|
// where that neighbour simulator could otherwise request a child agent create on the source which then
|
||||||
// closes our existing agent which is still signalled as root.
|
// closes our existing agent which is still signalled as root.
|
||||||
|
@ -1333,11 +1245,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
sp.MakeChildAgent(destinationHandle);
|
sp.MakeChildAgent(destinationHandle);
|
||||||
|
|
||||||
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
||||||
<<<<<<< HEAD
|
|
||||||
if (NeedsClosing(sp.Scene.DefaultDrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
|
|
||||||
=======
|
|
||||||
if (OutSideViewRange)
|
if (OutSideViewRange)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||||
return;
|
return;
|
||||||
|
@ -1465,12 +1373,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// This returns 'true' if the new region already has a child agent for our
|
// This returns 'true' if the new region already has a child agent for our
|
||||||
// incoming agent. The implication is that, if 'false', we have to create the
|
// incoming agent. The implication is that, if 'false', we have to create the
|
||||||
// child and then teleport into the region.
|
// child and then teleport into the region.
|
||||||
<<<<<<< HEAD
|
|
||||||
protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY)
|
|
||||||
=======
|
|
||||||
protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
||||||
int oldsizeX, int oldsizeY, int newsizeX, int newsizeY)
|
int oldsizeX, int oldsizeY, int newsizeX, int newsizeY)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
||||||
{
|
{
|
||||||
|
@ -1487,9 +1391,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
||||||
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
/*
|
/*
|
||||||
protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
||||||
uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg)
|
uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg)
|
||||||
|
@ -1499,7 +1400,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Landmark Teleport
|
#region Landmark Teleport
|
||||||
|
@ -1580,82 +1480,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
#region Agent Crossings
|
#region Agent Crossings
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Given a position relative to the current region (which has previously been tested to
|
|
||||||
// see that it is actually outside the current region), find the new region that the
|
|
||||||
// point is actually in.
|
|
||||||
// Returns the coordinates and information of the new region or 'null' of it doesn't exist.
|
|
||||||
public GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos,
|
|
||||||
out string version, out Vector3 newpos, out string failureReason)
|
|
||||||
=======
|
|
||||||
public bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason)
|
public bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
reason = String.Empty;
|
reason = String.Empty;
|
||||||
version = String.Empty;
|
version = String.Empty;
|
||||||
<<<<<<< HEAD
|
|
||||||
newpos = pos;
|
|
||||||
failureReason = string.Empty;
|
|
||||||
string homeURI = scene.GetAgentHomeURI(agentID);
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[ENTITY TRANSFER MODULE]: Crossing agent {0} at pos {1} in {2}", agent.Name, pos, scene.Name);
|
|
||||||
|
|
||||||
// Compute world location of the object's position
|
|
||||||
double presenceWorldX = (double)scene.RegionInfo.WorldLocX + pos.X;
|
|
||||||
double presenceWorldY = (double)scene.RegionInfo.WorldLocY + pos.Y;
|
|
||||||
|
|
||||||
// Call the grid service to lookup the region containing the new position.
|
|
||||||
GridRegion neighbourRegion = GetRegionContainingWorldLocation(scene.GridService, scene.RegionInfo.ScopeID,
|
|
||||||
presenceWorldX, presenceWorldY,
|
|
||||||
Math.Max(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY));
|
|
||||||
|
|
||||||
if (neighbourRegion != null)
|
|
||||||
{
|
|
||||||
// Compute the entity's position relative to the new region
|
|
||||||
newpos = new Vector3((float)(presenceWorldX - (double)neighbourRegion.RegionLocX),
|
|
||||||
(float)(presenceWorldY - (double)neighbourRegion.RegionLocY),
|
|
||||||
pos.Z);
|
|
||||||
|
|
||||||
if (m_bannedRegionCache.IfBanned(neighbourRegion.RegionHandle, agentID))
|
|
||||||
{
|
|
||||||
failureReason = "Cannot region cross into banned parcel";
|
|
||||||
neighbourRegion = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If not banned, make sure this agent is not in the list.
|
|
||||||
m_bannedRegionCache.Remove(neighbourRegion.RegionHandle, agentID);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check to see if we have access to the target region.
|
|
||||||
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
|
||||||
if (neighbourRegion != null
|
|
||||||
&& !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, scene.GetFormatsOffered(), out version, out failureReason))
|
|
||||||
{
|
|
||||||
// remember banned
|
|
||||||
m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
|
|
||||||
neighbourRegion = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The destination region just doesn't exist
|
|
||||||
failureReason = "Cannot cross into non-existent region";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (neighbourRegion == null)
|
|
||||||
m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}",
|
|
||||||
LogHeader, scene.RegionInfo.RegionName,
|
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
|
||||||
scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY,
|
|
||||||
pos);
|
|
||||||
else
|
|
||||||
m_log.DebugFormat("{0} GetDestination: new region={1} at <{2},{3}> of size <{4},{5}>, newpos=<{6},{7}>",
|
|
||||||
LogHeader, neighbourRegion.RegionName,
|
|
||||||
neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY,
|
|
||||||
newpos.X, newpos.Y);
|
|
||||||
=======
|
|
||||||
|
|
||||||
UUID agentID = agent.UUID;
|
UUID agentID = agent.UUID;
|
||||||
ulong destinyHandle = destiny.RegionHandle;
|
ulong destinyHandle = destiny.RegionHandle;
|
||||||
|
@ -1672,7 +1500,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
|
|
||||||
if (!ascene.SimulationService.QueryAccess(destiny, agentID, homeURI, false, position,
|
if (!ascene.SimulationService.QueryAccess(destiny, agentID, homeURI, false, position,
|
||||||
myversion, out version, out reason))
|
myversion, agent.Scene.GetFormatsOffered(), out version, out reason))
|
||||||
{
|
{
|
||||||
m_bannedRegionCache.Add(destinyHandle, agentID, 30.0, 30.0);
|
m_bannedRegionCache.Add(destinyHandle, agentID, 30.0, 30.0);
|
||||||
return false;
|
return false;
|
||||||
|
@ -1735,7 +1563,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
||||||
string homeURI = scene.GetAgentHomeURI(agentID);
|
string homeURI = scene.GetAgentHomeURI(agentID);
|
||||||
if (neighbourRegion != null
|
if (neighbourRegion != null
|
||||||
&& !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, out version, out failureReason))
|
&& !scene.SimulationService.QueryAccess(
|
||||||
|
neighbourRegion, agentID, homeURI, false, newpos, myversion,
|
||||||
|
new List<UUID>(), out version, out failureReason))
|
||||||
{
|
{
|
||||||
// remember banned
|
// remember banned
|
||||||
m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
|
m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
|
||||||
|
@ -1747,7 +1577,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// The destination region just doesn't exist
|
// The destination region just doesn't exist
|
||||||
failureReason = "Cannot cross into non-existent region";
|
failureReason = "Cannot cross into non-existent region";
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (neighbourRegion == null)
|
if (neighbourRegion == null)
|
||||||
m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}",
|
m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}",
|
||||||
|
@ -1766,8 +1595,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
public bool Cross(ScenePresence agent, bool isFlying)
|
public bool Cross(ScenePresence agent, bool isFlying)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
agent.IsInTransit = true;
|
agent.IsInTransit = true;
|
||||||
CrossAsyncDelegate d = CrossAsync;
|
CrossAsyncDelegate d = CrossAsync;
|
||||||
d.BeginInvoke(agent, isFlying, CrossCompleted, d);
|
d.BeginInvoke(agent, isFlying, CrossCompleted, d);
|
||||||
|
@ -1793,19 +1620,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
uint x;
|
uint x;
|
||||||
uint y;
|
uint y;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Vector3 newpos;
|
Vector3 newpos;
|
||||||
string version;
|
string version;
|
||||||
string failureReason;
|
string failureReason;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, agent.AbsolutePosition,
|
|
||||||
out version, out newpos, out failureReason);
|
|
||||||
if (neighbourRegion == null)
|
|
||||||
{
|
|
||||||
agent.ControllingClient.SendAlertMessage(failureReason);
|
|
||||||
return false;
|
|
||||||
=======
|
|
||||||
Vector3 pos = agent.AbsolutePosition + agent.Velocity;
|
Vector3 pos = agent.AbsolutePosition + agent.Velocity;
|
||||||
|
|
||||||
GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos,
|
GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos,
|
||||||
|
@ -1815,23 +1633,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
if (failureReason != String.Empty)
|
if (failureReason != String.Empty)
|
||||||
agent.ControllingClient.SendAlertMessage(failureReason);
|
agent.ControllingClient.SendAlertMessage(failureReason);
|
||||||
return agent;
|
return agent;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// agent.IsInTransit = true;
|
// agent.IsInTransit = true;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Scene.EventManager.TriggerCrossAgentToNewRegion(agent, isFlying, neighbourRegion);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
=======
|
|
||||||
CrossAgentToNewRegionAsync(agent, newpos, neighbourRegion, isFlying, version);
|
CrossAgentToNewRegionAsync(agent, newpos, neighbourRegion, isFlying, version);
|
||||||
agent.IsInTransit = false;
|
agent.IsInTransit = false;
|
||||||
return agent;
|
return agent;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY,
|
public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY,
|
||||||
Vector3 position,
|
Vector3 position,
|
||||||
Scene initiatingScene);
|
Scene initiatingScene);
|
||||||
|
@ -1958,10 +1768,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
AgentData cAgent = new AgentData();
|
AgentData cAgent = new AgentData();
|
||||||
agent.CopyTo(cAgent);
|
agent.CopyTo(cAgent);
|
||||||
<<<<<<< HEAD
|
|
||||||
cAgent.Position = pos;
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
// agent.Appearance.WearableCacheItems = null;
|
// agent.Appearance.WearableCacheItems = null;
|
||||||
|
|
||||||
|
@ -1969,7 +1775,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
cAgent.ChildrenCapSeeds = agent.KnownRegions;
|
cAgent.ChildrenCapSeeds = agent.KnownRegions;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (isFlying)
|
if (isFlying)
|
||||||
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
|
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
|
||||||
|
|
||||||
|
@ -2048,25 +1853,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
capsPath);
|
capsPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// SUCCESS!
|
|
||||||
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination);
|
|
||||||
|
|
||||||
// Unlike a teleport, here we do not wait for the destination region to confirm the receipt.
|
|
||||||
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp);
|
|
||||||
|
|
||||||
agent.MakeChildAgent();
|
|
||||||
|
|
||||||
// FIXME: Possibly this should occur lower down after other commands to close other agents,
|
|
||||||
// but not sure yet what the side effects would be.
|
|
||||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
|
||||||
|
|
||||||
// now we have a child agent in this region. Request all interesting data about other (root) agents
|
|
||||||
agent.SendOtherAgentsAvatarDataToClient();
|
|
||||||
agent.SendOtherAgentsAppearanceToClient();
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Backwards compatibility. Best effort
|
// Backwards compatibility. Best effort
|
||||||
if (version == "Unknown" || version == string.Empty)
|
if (version == "Unknown" || version == string.Empty)
|
||||||
{
|
{
|
||||||
|
@ -2075,12 +1861,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
|
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Next, let's close the child agent connections that are too far away.
|
|
||||||
uint neighbourx;
|
|
||||||
uint neighboury;
|
|
||||||
Util.RegionHandleToRegionLoc(neighbourRegion.RegionHandle, out neighbourx, out neighboury);
|
|
||||||
=======
|
|
||||||
// SUCCESS!
|
// SUCCESS!
|
||||||
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination);
|
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination);
|
||||||
|
|
||||||
|
@ -2096,7 +1876,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// FIXME: Possibly this should occur lower down after other commands to close other agents,
|
// FIXME: Possibly this should occur lower down after other commands to close other agents,
|
||||||
// but not sure yet what the side effects would be.
|
// but not sure yet what the side effects would be.
|
||||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY);
|
agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY);
|
||||||
|
|
||||||
|
@ -2177,24 +1956,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
seeds.Add(regionhandler, agent.CapsPath);
|
seeds.Add(regionhandler, agent.CapsPath);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath);
|
|
||||||
//foreach (ulong h in agent.ChildrenCapSeeds.Keys)
|
|
||||||
// m_log.DebugFormat("[XXX] --> {0}", h);
|
|
||||||
//m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle);
|
|
||||||
if (agent.ChildrenCapSeeds.ContainsKey(region.RegionHandle))
|
|
||||||
{
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[ENTITY TRANSFER]: Overwriting caps seed {0} with {1} for region {2} (handle {3}) for {4} in {5}",
|
|
||||||
agent.ChildrenCapSeeds[region.RegionHandle], agent.CapsPath,
|
|
||||||
region.RegionName, region.RegionHandle, sp.Name, Scene.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
agent.ChildrenCapSeeds[region.RegionHandle] = agent.CapsPath;
|
|
||||||
=======
|
|
||||||
// agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
// agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
||||||
agent.ChildrenCapSeeds = null;
|
agent.ChildrenCapSeeds = null;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (sp.Scene.CapsModule != null)
|
if (sp.Scene.CapsModule != null)
|
||||||
{
|
{
|
||||||
|
@ -2278,11 +2042,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
if (m_regionInfo != null)
|
if (m_regionInfo != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
neighbours = GetNeighbours(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
|
||||||
=======
|
|
||||||
neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2531,127 +2291,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
#endregion // NotFoundLocationCache class
|
#endregion // NotFoundLocationCache class
|
||||||
private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache();
|
private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Computes the difference between two region bases.
|
|
||||||
// Returns a vector of world coordinates (meters) from base of first region to the second.
|
|
||||||
// The first region is the home region of the passed scene presence.
|
|
||||||
Vector3 CalculateOffset(ScenePresence sp, GridRegion neighbour)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
int rRegionX = (int)sp.Scene.RegionInfo.LegacyRegionLocX;
|
|
||||||
int rRegionY = (int)sp.Scene.RegionInfo.LegacyRegionLocY;
|
|
||||||
int tRegionX = neighbour.RegionLocX / (int)Constants.RegionSize;
|
|
||||||
int tRegionY = neighbour.RegionLocY / (int)Constants.RegionSize;
|
|
||||||
int shiftx = (rRegionX - tRegionX) * (int)Constants.RegionSize;
|
|
||||||
int shifty = (rRegionY - tRegionY) * (int)Constants.RegionSize;
|
|
||||||
return new Vector3(shiftx, shifty, 0f);
|
|
||||||
*/
|
|
||||||
return new Vector3( sp.Scene.RegionInfo.WorldLocX - neighbour.RegionLocX,
|
|
||||||
sp.Scene.RegionInfo.WorldLocY - neighbour.RegionLocY,
|
|
||||||
0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
|
|
||||||
{
|
|
||||||
// Since we don't know how big the regions could be, we have to search a very large area
|
|
||||||
// to find possible regions.
|
|
||||||
return GetRegionContainingWorldLocation(pGridService, pScopeID, px, py, Constants.MaximumRegionSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region NotFoundLocationCache class
|
|
||||||
// A collection of not found locations to make future lookups 'not found' lookups quick.
|
|
||||||
// A simple expiring cache that keeps not found locations for some number of seconds.
|
|
||||||
// A 'not found' location is presumed to be anywhere in the minimum sized region that
|
|
||||||
// contains that point. A conservitive estimate.
|
|
||||||
private class NotFoundLocationCache
|
|
||||||
{
|
|
||||||
private struct NotFoundLocation
|
|
||||||
{
|
|
||||||
public double minX, maxX, minY, maxY;
|
|
||||||
public DateTime expireTime;
|
|
||||||
}
|
|
||||||
private List<NotFoundLocation> m_notFoundLocations = new List<NotFoundLocation>();
|
|
||||||
public NotFoundLocationCache()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
// Add an area to the list of 'not found' places. The area is the snapped region
|
|
||||||
// area around the added point.
|
|
||||||
public void Add(double pX, double pY)
|
|
||||||
{
|
|
||||||
lock (m_notFoundLocations)
|
|
||||||
{
|
|
||||||
if (!LockedContains(pX, pY))
|
|
||||||
{
|
|
||||||
NotFoundLocation nfl = new NotFoundLocation();
|
|
||||||
// A not found location is not found for at least a whole region sized area
|
|
||||||
nfl.minX = pX - (pX % (double)Constants.RegionSize);
|
|
||||||
nfl.minY = pY - (pY % (double)Constants.RegionSize);
|
|
||||||
nfl.maxX = nfl.minX + (double)Constants.RegionSize;
|
|
||||||
nfl.maxY = nfl.minY + (double)Constants.RegionSize;
|
|
||||||
nfl.expireTime = DateTime.Now + TimeSpan.FromSeconds(30);
|
|
||||||
m_notFoundLocations.Add(nfl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Test to see of this point is in any of the 'not found' areas.
|
|
||||||
// Return 'true' if the point is found inside the 'not found' areas.
|
|
||||||
public bool Contains(double pX, double pY)
|
|
||||||
{
|
|
||||||
bool ret = false;
|
|
||||||
lock (m_notFoundLocations)
|
|
||||||
ret = LockedContains(pX, pY);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
private bool LockedContains(double pX, double pY)
|
|
||||||
{
|
|
||||||
bool ret = false;
|
|
||||||
this.DoExpiration();
|
|
||||||
foreach (NotFoundLocation nfl in m_notFoundLocations)
|
|
||||||
{
|
|
||||||
if (pX >= nfl.minX && pX < nfl.maxX && pY >= nfl.minY && pY < nfl.maxY)
|
|
||||||
{
|
|
||||||
ret = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
private void DoExpiration()
|
|
||||||
{
|
|
||||||
List<NotFoundLocation> m_toRemove = null;
|
|
||||||
DateTime now = DateTime.Now;
|
|
||||||
foreach (NotFoundLocation nfl in m_notFoundLocations)
|
|
||||||
{
|
|
||||||
if (nfl.expireTime < now)
|
|
||||||
{
|
|
||||||
if (m_toRemove == null)
|
|
||||||
m_toRemove = new List<NotFoundLocation>();
|
|
||||||
m_toRemove.Add(nfl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m_toRemove != null)
|
|
||||||
{
|
|
||||||
foreach (NotFoundLocation nfl in m_toRemove)
|
|
||||||
m_notFoundLocations.Remove(nfl);
|
|
||||||
m_toRemove.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion // NotFoundLocationCache class
|
|
||||||
private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache();
|
|
||||||
|
|
||||||
// Given a world position (fractional meter coordinate), get the GridRegion info for
|
|
||||||
// the region containing that point.
|
|
||||||
// Someday this should be a method on GridService.
|
|
||||||
// 'pSizeHint' is the size of the source region but since the destination point can be anywhere
|
|
||||||
// the size of the target region is unknown thus the search area might have to be very large.
|
|
||||||
// Return 'null' if no such region exists.
|
|
||||||
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID,
|
|
||||||
double px, double py, uint pSizeHint)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("{0} GetRegionContainingWorldLocation: query, loc=<{1},{2}>", LogHeader, px, py);
|
|
||||||
=======
|
|
||||||
// needed for current OSG or old grid code
|
// needed for current OSG or old grid code
|
||||||
|
|
||||||
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
|
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
|
||||||
|
@ -2671,7 +2310,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
double px, double py, uint pSizeHint)
|
double px, double py, uint pSizeHint)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py);
|
m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
GridRegion ret = null;
|
GridRegion ret = null;
|
||||||
const double fudge = 2.0;
|
const double fudge = 2.0;
|
||||||
|
|
||||||
|
@ -2765,13 +2403,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
IPEndPoint endPoint, bool newAgent)
|
IPEndPoint endPoint, bool newAgent)
|
||||||
{
|
{
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Scene scene = sp.Scene;
|
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})",
|
|
||||||
sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY);
|
|
||||||
=======
|
|
||||||
if (newAgent)
|
if (newAgent)
|
||||||
{
|
{
|
||||||
Scene scene = sp.Scene;
|
Scene scene = sp.Scene;
|
||||||
|
@ -2779,17 +2410,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})",
|
"[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})",
|
||||||
sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY);
|
sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath);
|
string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath);
|
||||||
|
|
||||||
string reason = String.Empty;
|
string reason = String.Empty;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, out reason);
|
||||||
bool regionAccepted = scene.SimulationService.CreateAgent(null, reg, a, (uint)TeleportFlags.Default, out reason);
|
|
||||||
=======
|
|
||||||
bool regionAccepted = scene.SimulationService.CreateAgent(reg, a, (uint)TeleportFlags.Default, out reason);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (regionAccepted)
|
if (regionAccepted)
|
||||||
{
|
{
|
||||||
|
@ -2848,10 +2474,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y);
|
extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
swCorner.X = Scene.RegionInfo.RegionLocX - 1;
|
swCorner.X = Scene.RegionInfo.RegionLocX - 1;
|
||||||
swCorner.Y = Scene.RegionInfo.RegionLocY - 1;
|
swCorner.Y = Scene.RegionInfo.RegionLocY - 1;
|
||||||
neCorner.X = Scene.RegionInfo.RegionLocX + extent.X;
|
neCorner.X = Scene.RegionInfo.RegionLocX + extent.X;
|
||||||
|
@ -2865,11 +2487,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
/// <param name="pRegionLocX"></param>
|
/// <param name="pRegionLocX"></param>
|
||||||
/// <param name="pRegionLocY"></param>
|
/// <param name="pRegionLocY"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
<<<<<<< HEAD
|
|
||||||
protected List<GridRegion> GetNeighbours(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
|
||||||
=======
|
|
||||||
protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
Scene pScene = avatar.Scene;
|
Scene pScene = avatar.Scene;
|
||||||
RegionInfo m_regionInfo = pScene.RegionInfo;
|
RegionInfo m_regionInfo = pScene.RegionInfo;
|
||||||
|
@ -2880,22 +2498,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// view to include everything in the megaregion
|
// view to include everything in the megaregion
|
||||||
if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// The area to check is as big as the current region.
|
|
||||||
// We presume all adjacent regions are the same size as this region.
|
|
||||||
uint dd = Math.Max((uint)avatar.Scene.DefaultDrawDistance,
|
|
||||||
Math.Max(Scene.RegionInfo.RegionSizeX, Scene.RegionInfo.RegionSizeY));
|
|
||||||
|
|
||||||
uint startX = Util.RegionToWorldLoc(pRegionLocX) - dd + Constants.RegionSize/2;
|
|
||||||
uint startY = Util.RegionToWorldLoc(pRegionLocY) - dd + Constants.RegionSize/2;
|
|
||||||
|
|
||||||
uint endX = Util.RegionToWorldLoc(pRegionLocX) + dd + Constants.RegionSize/2;
|
|
||||||
uint endY = Util.RegionToWorldLoc(pRegionLocY) + dd + Constants.RegionSize/2;
|
|
||||||
|
|
||||||
neighbours
|
|
||||||
= avatar.Scene.GridService.GetRegionRange(
|
|
||||||
m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY);
|
|
||||||
=======
|
|
||||||
uint dd = (uint)avatar.DrawDistance;
|
uint dd = (uint)avatar.DrawDistance;
|
||||||
|
|
||||||
// until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors
|
// until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors
|
||||||
|
@ -2919,8 +2521,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
neighbours
|
neighbours
|
||||||
= avatar.Scene.GridService.GetRegionRange(
|
= avatar.Scene.GridService.GetRegionRange(
|
||||||
m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY);
|
m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2934,24 +2534,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
(int)Util.RegionToWorldLoc((uint)swCorner.Y), (int)Util.RegionToWorldLoc((uint)neCorner.Y));
|
(int)Util.RegionToWorldLoc((uint)swCorner.Y), (int)Util.RegionToWorldLoc((uint)neCorner.Y));
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// neighbours.ForEach(
|
|
||||||
// n =>
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[ENTITY TRANSFER MODULE]: Region flags for {0} as seen by {1} are {2}",
|
|
||||||
// n.RegionName, Scene.Name, n.RegionFlags != null ? n.RegionFlags.ToString() : "not present"));
|
|
||||||
|
|
||||||
// The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1).
|
|
||||||
neighbours.RemoveAll(
|
|
||||||
r =>
|
|
||||||
r.RegionID == m_regionInfo.RegionID
|
|
||||||
|| (r.RegionFlags != null && (r.RegionFlags & OpenSim.Framework.RegionFlags.RegionOnline) == 0));
|
|
||||||
|
|
||||||
=======
|
|
||||||
// The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1).
|
// The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1).
|
||||||
neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID );
|
neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID );
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return neighbours;
|
return neighbours;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -3036,23 +2621,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
if (scene == null)
|
if (scene == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (grp.RootPart.DIE_AT_EDGE)
|
|
||||||
{
|
|
||||||
// We remove the object here
|
|
||||||
try
|
|
||||||
{
|
|
||||||
scene.DeleteSceneObject(grp, false);
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
m_log.Warn("[DATABASE]: exception when trying to remove the prim that crossed the border.");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Remember the old group position in case the region lookup fails so position can be restored.
|
// Remember the old group position in case the region lookup fails so position can be restored.
|
||||||
Vector3 oldGroupPosition = grp.RootPart.GroupPosition;
|
Vector3 oldGroupPosition = grp.RootPart.GroupPosition;
|
||||||
|
|
||||||
|
|
|
@ -434,14 +434,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// return base.UpdateAgent(reg, finalDestination, agentData, sp);
|
// return base.UpdateAgent(reg, finalDestination, agentData, sp);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public override void TriggerTeleportHome(UUID id, IClientAPI client)
|
|
||||||
{
|
|
||||||
TeleportHome(id, client);
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public override bool TeleportHome(UUID id, IClientAPI client)
|
public override bool TeleportHome(UUID id, IClientAPI client)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
|
|
|
@ -207,17 +207,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
byte[] data = null;
|
byte[] data = null;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId);
|
|
||||||
m_Scene.AssetService.Store(asset);
|
|
||||||
m_Scene.CreateNewInventoryItem(
|
|
||||||
remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID,
|
|
||||||
name, description, 0, callbackID, asset.FullID, asset.Type, invType, nextOwnerMask, creationDate);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
=======
|
|
||||||
if (invType == (sbyte)InventoryType.Landmark && presence != null)
|
if (invType == (sbyte)InventoryType.Landmark && presence != null)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
string suffix = string.Empty, prefix = string.Empty;
|
string suffix = string.Empty, prefix = string.Empty;
|
||||||
string strdata = GenerateLandmark(presence, out prefix, out suffix);
|
string strdata = GenerateLandmark(presence, out prefix, out suffix);
|
||||||
|
@ -230,7 +220,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
m_Scene.AssetService.Store(asset);
|
m_Scene.AssetService.Store(asset);
|
||||||
m_Scene.CreateNewInventoryItem(
|
m_Scene.CreateNewInventoryItem(
|
||||||
remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID,
|
remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID,
|
||||||
name, description, 0, callbackID, asset, invType, nextOwnerMask, creationDate,transactionID);
|
name, description, 0, callbackID, asset.FullID, asset.Type, invType, nextOwnerMask, creationDate);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -420,26 +410,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
if (objectGroup.RootPart.KeyframeMotion != null)
|
if (objectGroup.RootPart.KeyframeMotion != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
objectGroup.RootPart.KeyframeMotion.Pause();
|
|
||||||
group2Keyframe.Add(objectGroup, objectGroup.RootPart.KeyframeMotion);
|
|
||||||
objectGroup.RootPart.KeyframeMotion = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vector3 inventoryStoredPosition = new Vector3
|
|
||||||
// (((objectGroup.AbsolutePosition.X > (int)Constants.RegionSize)
|
|
||||||
// ? 250
|
|
||||||
// : objectGroup.AbsolutePosition.X)
|
|
||||||
// ,
|
|
||||||
// (objectGroup.AbsolutePosition.Y > (int)Constants.RegionSize)
|
|
||||||
// ? 250
|
|
||||||
// : objectGroup.AbsolutePosition.Y,
|
|
||||||
// objectGroup.AbsolutePosition.Z);
|
|
||||||
//
|
|
||||||
// originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition;
|
|
||||||
//
|
|
||||||
// objectGroup.AbsolutePosition = inventoryStoredPosition;
|
|
||||||
=======
|
|
||||||
objectGroup.RootPart.KeyframeMotion.Suspend();
|
objectGroup.RootPart.KeyframeMotion.Suspend();
|
||||||
}
|
}
|
||||||
objectGroup.RootPart.SetForce(Vector3.Zero);
|
objectGroup.RootPart.SetForce(Vector3.Zero);
|
||||||
|
@ -480,7 +450,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
|
|
||||||
objectGroup.AbsolutePosition = inventoryStoredPosition;
|
objectGroup.AbsolutePosition = inventoryStoredPosition;
|
||||||
objectGroup.RootPart.RotationOffset = inventoryStoredRotation;
|
objectGroup.RootPart.RotationOffset = inventoryStoredRotation;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// Make sure all bits but the ones we want are clear
|
// Make sure all bits but the ones we want are clear
|
||||||
// on take.
|
// on take.
|
||||||
|
@ -626,6 +595,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
IClientAPI remoteClient)
|
IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7;
|
uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7;
|
||||||
|
uint allObjectsNextOwnerPerms = 0x7fffffff;
|
||||||
|
|
||||||
// For the porposes of inventory, an object is modify if the prims
|
// For the porposes of inventory, an object is modify if the prims
|
||||||
// are modify. This allows renaming an object that contains no
|
// are modify. This allows renaming an object that contains no
|
||||||
// mod items.
|
// mod items.
|
||||||
|
|
|
@ -336,8 +336,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -433,7 +431,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
#region IUserManagement
|
#region IUserManagement
|
||||||
|
|
||||||
public UUID GetUserIdByName(string name)
|
public UUID GetUserIdByName(string name)
|
||||||
|
|
|
@ -358,9 +358,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
||||||
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_outboundUrlFilter = new OutboundUrlFilter("Script HTTP request module", config);
|
m_outboundUrlFilter = new OutboundUrlFilter("Script HTTP request module", config);
|
||||||
=======
|
|
||||||
int maxThreads = 15;
|
int maxThreads = 15;
|
||||||
|
|
||||||
IConfig httpConfig = config.Configs["HttpRequestModule"];
|
IConfig httpConfig = config.Configs["HttpRequestModule"];
|
||||||
|
@ -368,7 +367,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads);
|
maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
||||||
|
|
||||||
|
@ -532,16 +530,12 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
Request = (HttpWebRequest)WebRequest.Create(Url);
|
Request = (HttpWebRequest)WebRequest.Create(Url);
|
||||||
Request.AllowAutoRedirect = false;
|
Request.AllowAutoRedirect = false;
|
||||||
=======
|
|
||||||
Request = (HttpWebRequest) WebRequest.Create(Url);
|
|
||||||
|
|
||||||
//This works around some buggy HTTP Servers like Lighttpd
|
//This works around some buggy HTTP Servers like Lighttpd
|
||||||
Request.ServicePoint.Expect100Continue = false;
|
Request.ServicePoint.Expect100Continue = false;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Request.Method = HttpMethod;
|
Request.Method = HttpMethod;
|
||||||
Request.ContentType = HttpMIMEType;
|
Request.ContentType = HttpMIMEType;
|
||||||
|
|
||||||
|
@ -646,7 +640,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
using (Stream responseStream = webRsp.GetResponseStream())
|
using (Stream responseStream = webRsp.GetResponseStream())
|
||||||
{
|
{
|
||||||
ResponseBody = responseStream.GetStreamString();
|
using (StreamReader reader = new StreamReader(responseStream))
|
||||||
|
ResponseBody = reader.ReadToEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -676,7 +671,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
resStream.Close();
|
resStream.Close();
|
||||||
if (response != null)
|
if (response != null)
|
||||||
response.Close();
|
response.Close();
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
// We need to resubmit
|
// We need to resubmit
|
||||||
if (
|
if (
|
||||||
|
@ -724,8 +718,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
_finished = true;
|
_finished = true;
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ResponseBody == null)
|
if (ResponseBody == null)
|
||||||
|
|
|
@ -380,20 +380,6 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
|
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// ignore if a child agent this is restricted to inside one
|
|
||||||
// region
|
|
||||||
if (sp.IsChildAgent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Channel zero only goes to the avatar
|
|
||||||
// non zero channel messages only go to the attachments of the avatar.
|
|
||||||
if (channel != 0)
|
|
||||||
{
|
|
||||||
List<SceneObjectGroup> attachments = sp.GetAttachments();
|
|
||||||
if (attachments.Count == 0)
|
|
||||||
return;
|
|
||||||
=======
|
|
||||||
// Send message to avatar
|
// Send message to avatar
|
||||||
if (channel == 0)
|
if (channel == 0)
|
||||||
{
|
{
|
||||||
|
@ -401,7 +387,6 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, target, false, false);
|
m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, target, false, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
List<SceneObjectGroup> attachments = sp.GetAttachments();
|
List<SceneObjectGroup> attachments = sp.GetAttachments();
|
||||||
|
|
||||||
|
|
|
@ -53,11 +53,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
|
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MapImageServiceModule")]
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MapImageServiceModule")]
|
||||||
<<<<<<< HEAD
|
|
||||||
public class MapImageServiceModule : IMapImageUploadModule, ISharedRegionModule
|
public class MapImageServiceModule : IMapImageUploadModule, ISharedRegionModule
|
||||||
=======
|
|
||||||
public class MapImageServiceModule : ISharedRegionModule, IMapImageUploadModule
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -97,13 +94,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
if (config == null)
|
if (config == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime"));
|
|
||||||
|
|
||||||
// if refresh is less than zero, disable the module
|
|
||||||
=======
|
|
||||||
int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime", "-1"));
|
int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime", "-1"));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (refreshminutes < 0)
|
if (refreshminutes < 0)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MAP IMAGE SERVICE MODULE]: Negative refresh time given in config. Module disabled.");
|
m_log.WarnFormat("[MAP IMAGE SERVICE MODULE]: Negative refresh time given in config. Module disabled.");
|
||||||
|
@ -136,19 +127,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
m_refreshTimer.Interval = m_refreshtime;
|
m_refreshTimer.Interval = m_refreshtime;
|
||||||
m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh);
|
m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}",
|
|
||||||
=======
|
|
||||||
if (m_refreshtime > 0)
|
|
||||||
{
|
|
||||||
m_refreshTimer.Enabled = true;
|
|
||||||
m_refreshTimer.AutoReset = true;
|
|
||||||
m_refreshTimer.Interval = m_refreshtime;
|
|
||||||
m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}",
|
m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}",
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
refreshminutes, service);
|
refreshminutes, service);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -174,10 +154,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
// v2 Map generation on startup is now handled by scene to allow bmp to be shared with
|
// v2 Map generation on startup is now handled by scene to allow bmp to be shared with
|
||||||
// v1 service and not generate map tiles twice as was previous behavior
|
// v1 service and not generate map tiles twice as was previous behavior
|
||||||
//scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); };
|
//scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); };
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
scene.RegisterModuleInterface<IMapImageUploadModule>(this);
|
scene.RegisterModuleInterface<IMapImageUploadModule>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,15 +212,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
// If the region/maptile is legacy sized, just upload the one tile like it has always been done
|
// If the region/maptile is legacy sized, just upload the one tile like it has always been done
|
||||||
if (mapTile.Width == Constants.RegionSize && mapTile.Height == Constants.RegionSize)
|
if (mapTile.Width == Constants.RegionSize && mapTile.Height == Constants.RegionSize)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
ConvertAndUploadMaptile(scene, mapTile,
|
||||||
ConvertAndUploadMaptile(mapTile,
|
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
||||||
scene.RegionInfo.RegionName);
|
scene.RegionInfo.RegionName);
|
||||||
=======
|
|
||||||
ConvertAndUploadMaptile(mapTile, scene,
|
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
|
||||||
scene.RegionInfo.RegionName);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -263,17 +234,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
(int)Constants.RegionSize, (int)Constants.RegionSize);
|
(int)Constants.RegionSize, (int)Constants.RegionSize);
|
||||||
using (Bitmap subMapTile = mapTile.Clone(rect, mapTile.PixelFormat))
|
using (Bitmap subMapTile = mapTile.Clone(rect, mapTile.PixelFormat))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
ConvertAndUploadMaptile(scene, subMapTile,
|
||||||
ConvertAndUploadMaptile(subMapTile,
|
|
||||||
scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize),
|
scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize),
|
||||||
scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize),
|
scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize),
|
||||||
scene.Name);
|
scene.Name);
|
||||||
=======
|
|
||||||
ConvertAndUploadMaptile(subMapTile, scene,
|
|
||||||
scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize),
|
|
||||||
scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize),
|
|
||||||
scene.Name);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,11 +249,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
///</summary>
|
///</summary>
|
||||||
public void UploadMapTile(IScene scene)
|
public void UploadMapTile(IScene scene)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0}: upload maptile for {1}", LogHeader, scene.RegionInfo.RegionName);
|
m_log.DebugFormat("{0}: upload maptile for {1}", LogHeader, scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Create a JPG map tile and upload it to the AddMapTile API
|
// Create a JPG map tile and upload it to the AddMapTile API
|
||||||
IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>();
|
IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>();
|
||||||
if (tileGenerator == null)
|
if (tileGenerator == null)
|
||||||
|
@ -300,23 +261,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
|
|
||||||
using (Bitmap mapTile = tileGenerator.CreateMapTile())
|
using (Bitmap mapTile = tileGenerator.CreateMapTile())
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (mapTile != null)
|
|
||||||
{
|
|
||||||
UploadMapTile(scene, mapTile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("{0} Tile image generation failed", LogHeader);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ConvertAndUploadMaptile(Image tileImage, uint locX, uint locY, string regionName)
|
|
||||||
{
|
|
||||||
byte[] jpgData = Utils.EmptyBytes;
|
|
||||||
|
|
||||||
=======
|
|
||||||
// XXX: The MapImageModule will return a null if the user has chosen not to create map tiles and there
|
// XXX: The MapImageModule will return a null if the user has chosen not to create map tiles and there
|
||||||
// is no static map tile.
|
// is no static map tile.
|
||||||
if (mapTile == null)
|
if (mapTile == null)
|
||||||
|
@ -326,11 +270,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConvertAndUploadMaptile(Image tileImage, IScene scene, uint locX, uint locY, string regionName)
|
private void ConvertAndUploadMaptile(IScene scene, Image tileImage, uint locX, uint locY, string regionName)
|
||||||
{
|
{
|
||||||
byte[] jpgData = Utils.EmptyBytes;
|
byte[] jpgData = Utils.EmptyBytes;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream())
|
||||||
{
|
{
|
||||||
tileImage.Save(stream, ImageFormat.Jpeg);
|
tileImage.Save(stream, ImageFormat.Jpeg);
|
||||||
|
@ -339,11 +282,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
if (jpgData != Utils.EmptyBytes)
|
if (jpgData != Utils.EmptyBytes)
|
||||||
{
|
{
|
||||||
string reason = string.Empty;
|
string reason = string.Empty;
|
||||||
<<<<<<< HEAD
|
|
||||||
if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, out reason))
|
|
||||||
=======
|
|
||||||
if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, scene.RegionInfo.ScopeID, out reason))
|
if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, scene.RegionInfo.ScopeID, out reason))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("{0} Unable to upload tile image for {1} at {2}-{3}: {4}", LogHeader,
|
m_log.DebugFormat("{0} Unable to upload tile image for {1} at {2}-{3}: {4}", LogHeader,
|
||||||
regionName, locX, locY, reason);
|
regionName, locX, locY, reason);
|
||||||
|
@ -351,11 +290,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, regionName);
|
m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, regionName);
|
||||||
=======
|
|
||||||
m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, scene.RegionInfo.RegionName);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -269,11 +269,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, List<UUID> features, out string version, out string reason)
|
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, List<UUID> features, out string version, out string reason)
|
||||||
=======
|
|
||||||
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, out string version, out string reason)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
reason = "Communications failure";
|
reason = "Communications failure";
|
||||||
version = ServiceVersion;
|
version = ServiceVersion;
|
||||||
|
@ -302,29 +299,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason);
|
return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason);
|
||||||
=======
|
|
||||||
|
|
||||||
// not really need on a grid running var regions sims
|
|
||||||
|
|
||||||
uint size = m_scenes[destination.RegionID].RegionInfo.RegionSizeX;
|
|
||||||
|
|
||||||
float theirVersionNumber = 0f;
|
|
||||||
string[] versionComponents = theirversion.Split(new char[] { '/' });
|
|
||||||
if (versionComponents.Length >= 2)
|
|
||||||
float.TryParse(versionComponents[1], out theirVersionNumber);
|
|
||||||
|
|
||||||
// Var regions here, and the requesting simulator is in an older version.
|
|
||||||
// We will forbide this, because it crashes the viewers
|
|
||||||
if (theirVersionNumber < 0.3f && size > 256)
|
|
||||||
{
|
|
||||||
reason = "Destination is a variable-sized region, and source is an old simulator. Consider upgrading.";
|
|
||||||
m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Request to access this variable-sized region from {0} simulator was denied", theirVersionNumber);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return m_scenes[destination.RegionID].QueryAccess(agentID, position, out reason);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess");
|
//m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess");
|
||||||
|
|
|
@ -206,11 +206,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||||
return m_remoteConnector.UpdateAgent(destination, cAgentData);
|
return m_remoteConnector.UpdateAgent(destination, cAgentData);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason)
|
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason)
|
||||||
=======
|
|
||||||
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, out string version, out string reason)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
reason = "Communications failure";
|
reason = "Communications failure";
|
||||||
version = "Unknown";
|
version = "Unknown";
|
||||||
|
@ -219,22 +216,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Try local first
|
// Try local first
|
||||||
<<<<<<< HEAD
|
|
||||||
if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason))
|
if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason))
|
||||||
=======
|
|
||||||
if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason))
|
|
||||||
return true;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// else do the remote thing
|
// else do the remote thing
|
||||||
if (!m_localBackend.IsLocalRegion(destination.RegionID))
|
if (!m_localBackend.IsLocalRegion(destination.RegionID))
|
||||||
<<<<<<< HEAD
|
|
||||||
return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason);
|
return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason);
|
||||||
=======
|
|
||||||
return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason);
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,13 +162,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
private UUID m_defaultUser;
|
private UUID m_defaultUser;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private UUID m_defaultUser;
|
|
||||||
|
|
||||||
public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string,object>options)
|
|
||||||
=======
|
|
||||||
public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string, object> options)
|
public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string, object> options)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_rootScene = scene;
|
m_rootScene = scene;
|
||||||
|
|
||||||
|
@ -177,11 +171,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
m_defaultUser = (UUID)options["default-user"];
|
m_defaultUser = (UUID)options["default-user"];
|
||||||
m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString());
|
m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString());
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
else
|
else
|
||||||
=======
|
|
||||||
else
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
}
|
}
|
||||||
|
@ -200,10 +190,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
|
|
||||||
m_errorMessage = String.Empty;
|
m_errorMessage = String.Empty;
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_merge = options.ContainsKey("merge");
|
m_merge = options.ContainsKey("merge");
|
||||||
m_forceTerrain = options.ContainsKey("force-terrain");
|
m_forceTerrain = options.ContainsKey("force-terrain");
|
||||||
m_forceParcels = options.ContainsKey("force-parcels");
|
m_forceParcels = options.ContainsKey("force-parcels");
|
||||||
|
@ -212,34 +199,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
m_requestId = requestId;
|
m_requestId = requestId;
|
||||||
m_displacement = options.ContainsKey("displacement") ? (Vector3)options["displacement"] : Vector3.Zero;
|
m_displacement = options.ContainsKey("displacement") ? (Vector3)options["displacement"] : Vector3.Zero;
|
||||||
m_rotation = options.ContainsKey("rotation") ? (float)options["rotation"] : 0f;
|
m_rotation = options.ContainsKey("rotation") ? (float)options["rotation"] : 0f;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"]
|
m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"]
|
||||||
: new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f);
|
: new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f);
|
||||||
|
|
||||||
// Zero can never be a valid user or group id
|
|
||||||
m_validUserUuids[UUID.Zero] = false;
|
|
||||||
m_validGroupUuids[UUID.Zero] = false;
|
|
||||||
=======
|
|
||||||
m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"]
|
|
||||||
: new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f);
|
|
||||||
|
|
||||||
m_requestId = requestId;
|
|
||||||
|
|
||||||
// Zero can never be a valid user id (or group)
|
// Zero can never be a valid user id (or group)
|
||||||
m_validUserUuids[UUID.Zero] = false;
|
m_validUserUuids[UUID.Zero] = false;
|
||||||
m_validGroupUuids[UUID.Zero] = false;
|
m_validGroupUuids[UUID.Zero] = false;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>();
|
m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>();
|
||||||
m_assetService = m_rootScene.AssetService;
|
m_assetService = m_rootScene.AssetService;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object>options)
|
|
||||||
=======
|
|
||||||
public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object> options)
|
public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object> options)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
m_rootScene = scene;
|
m_rootScene = scene;
|
||||||
m_loadPath = null;
|
m_loadPath = null;
|
||||||
|
@ -249,11 +220,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
m_requestId = requestId;
|
m_requestId = requestId;
|
||||||
|
|
||||||
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Zero can never be a valid user id
|
// Zero can never be a valid user id
|
||||||
m_validUserUuids[UUID.Zero] = false;
|
m_validUserUuids[UUID.Zero] = false;
|
||||||
|
|
||||||
|
@ -327,24 +294,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
if ((successfulAssetRestores + failedAssetRestores) % 250 == 0)
|
if ((successfulAssetRestores + failedAssetRestores) % 250 == 0)
|
||||||
m_log.Debug("[ARCHIVER]: Loaded " + successfulAssetRestores + " assets and failed to load " + failedAssetRestores + " assets...");
|
m_log.Debug("[ARCHIVER]: Loaded " + successfulAssetRestores + " assets and failed to load " + failedAssetRestores + " assets...");
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH) && (!m_merge || m_forceTerrain))
|
else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH) && (!m_merge || m_forceTerrain))
|
||||||
=======
|
|
||||||
else if ((!m_merge || m_forceTerrain) && filePath.StartsWith(ArchiveConstants.TERRAINS_PATH))
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
LoadTerrain(scene, filePath, data);
|
LoadTerrain(scene, filePath, data);
|
||||||
}
|
}
|
||||||
else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
|
else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
|
||||||
{
|
{
|
||||||
LoadRegionSettings(scene, filePath, data, dearchivedScenes);
|
LoadRegionSettings(scene, filePath, data, dearchivedScenes);
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
}
|
||||||
else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH) && (!m_merge || m_forceParcels))
|
else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH) && (!m_merge || m_forceParcels))
|
||||||
=======
|
|
||||||
}
|
|
||||||
else if ((!m_merge || m_forceParcels) && filePath.StartsWith(ArchiveConstants.LANDDATA_PATH))
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data));
|
sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data));
|
||||||
}
|
}
|
||||||
|
@ -565,10 +523,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
bool isTelehub = (sceneObject.UUID == oldTelehubUUID) && (oldTelehubUUID != UUID.Zero);
|
bool isTelehub = (sceneObject.UUID == oldTelehubUUID) && (oldTelehubUUID != UUID.Zero);
|
||||||
|
|
||||||
// For now, give all incoming scene objects new uuids. This will allow scenes to be cloned
|
// For now, give all incoming scene objects new uuids. This will allow scenes to be cloned
|
||||||
|
@ -585,10 +539,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
|
|
||||||
ModifySceneObject(scene, sceneObject);
|
ModifySceneObject(scene, sceneObject);
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (scene.AddRestoredSceneObject(sceneObject, true, false))
|
if (scene.AddRestoredSceneObject(sceneObject, true, false))
|
||||||
{
|
{
|
||||||
|
@ -649,8 +599,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
// being no copy/no mod for everyone
|
// being no copy/no mod for everyone
|
||||||
lock (part.TaskInventory)
|
lock (part.TaskInventory)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
// And zap any troublesome sit target information
|
// And zap any troublesome sit target information
|
||||||
part.SitTargetOrientation = new Quaternion(0, 0, 0, 1);
|
part.SitTargetOrientation = new Quaternion(0, 0, 0, 1);
|
||||||
part.SitTargetPosition = new Vector3(0, 0, 0);
|
part.SitTargetPosition = new Vector3(0, 0, 0);
|
||||||
|
@ -659,7 +607,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
// Not doing so results in inventory items
|
// Not doing so results in inventory items
|
||||||
// being no copy/no mod for everyone
|
// being no copy/no mod for everyone
|
||||||
part.TaskInventory.LockItemsForRead(true);
|
part.TaskInventory.LockItemsForRead(true);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
TaskInventoryDictionary inv = part.TaskInventory;
|
TaskInventoryDictionary inv = part.TaskInventory;
|
||||||
foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv)
|
foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv)
|
||||||
{
|
{
|
||||||
|
@ -680,18 +628,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
if (!ResolveGroupUuid(kvp.Value.GroupID))
|
if (!ResolveGroupUuid(kvp.Value.GroupID))
|
||||||
kvp.Value.GroupID = UUID.Zero;
|
kvp.Value.GroupID = UUID.Zero;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
part.TaskInventory.LockItemsForRead(false);
|
part.TaskInventory.LockItemsForRead(false);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Load serialized parcels.
|
/// Load serialized parcels.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -712,11 +654,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
parcel.AABBMin += parcelDisp;
|
parcel.AABBMin += parcelDisp;
|
||||||
parcel.AABBMax += parcelDisp;
|
parcel.AABBMax += parcelDisp;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Validate User and Group UUID's
|
// Validate User and Group UUID's
|
||||||
|
|
||||||
if (!ResolveGroupUuid(parcel.GroupID))
|
if (!ResolveGroupUuid(parcel.GroupID))
|
||||||
|
@ -731,26 +669,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner;
|
|
||||||
=======
|
|
||||||
parcel.OwnerID = m_defaultUser;
|
parcel.OwnerID = m_defaultUser;
|
||||||
parcel.GroupID = UUID.Zero;
|
parcel.GroupID = UUID.Zero;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
parcel.IsGroupOwned = false;
|
parcel.IsGroupOwned = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!ResolveUserUuid(scene, parcel.OwnerID))
|
if (!ResolveUserUuid(scene, parcel.OwnerID))
|
||||||
<<<<<<< HEAD
|
|
||||||
parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner;
|
|
||||||
=======
|
|
||||||
parcel.OwnerID = m_defaultUser;
|
parcel.OwnerID = m_defaultUser;
|
||||||
|
|
||||||
if (!ResolveGroupUuid(parcel.GroupID))
|
if (!ResolveGroupUuid(parcel.GroupID))
|
||||||
parcel.GroupID = UUID.Zero;
|
parcel.GroupID = UUID.Zero;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<LandAccessEntry> accessList = new List<LandAccessEntry>();
|
List<LandAccessEntry> accessList = new List<LandAccessEntry>();
|
||||||
|
@ -879,10 +809,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
||||||
|
|
||||||
AssetBase asset = new AssetBase(new UUID(uuid), String.Empty, assetType, UUID.Zero.ToString());
|
AssetBase asset = new AssetBase(new UUID(uuid), String.Empty, assetType, UUID.Zero.ToString());
|
||||||
|
@ -1004,11 +931,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
private bool LoadTerrain(Scene scene, string terrainPath, byte[] data)
|
private bool LoadTerrain(Scene scene, string terrainPath, byte[] data)
|
||||||
{
|
{
|
||||||
ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
|
ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
using (MemoryStream ms = new MemoryStream(data))
|
using (MemoryStream ms = new MemoryStream(data))
|
||||||
{
|
{
|
||||||
if (m_displacement != Vector3.Zero || m_rotation != 0f)
|
if (m_displacement != Vector3.Zero || m_rotation != 0f)
|
||||||
|
|
|
@ -111,19 +111,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
String defaultUser = "";
|
String defaultUser = "";
|
||||||
float rotation = 0f;
|
float rotation = 0f;
|
||||||
Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0);
|
Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
OptionSet options = new OptionSet();
|
|
||||||
options.Add("m|merge", delegate (string v) { mergeOar = (v != null); });
|
|
||||||
options.Add("s|skip-assets", delegate (string v) { skipAssets = (v != null); });
|
|
||||||
options.Add("force-terrain", delegate (string v) { forceTerrain = (v != null); });
|
|
||||||
options.Add("forceterrain", delegate (string v) { forceTerrain = (v != null); }); // downward compatibility
|
|
||||||
options.Add("force-parcels", delegate (string v) { forceParcels = (v != null); });
|
|
||||||
options.Add("forceparcels", delegate (string v) { forceParcels = (v != null); }); // downward compatibility
|
|
||||||
options.Add("no-objects", delegate (string v) { noObjects = (v != null); });
|
|
||||||
options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; });
|
|
||||||
options.Add("displacement=", delegate (string v) {
|
|
||||||
=======
|
|
||||||
|
|
||||||
OptionSet options = new OptionSet();
|
OptionSet options = new OptionSet();
|
||||||
options.Add("m|merge", delegate(string v) { mergeOar = (v != null); });
|
options.Add("m|merge", delegate(string v) { mergeOar = (v != null); });
|
||||||
|
@ -136,7 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; });
|
options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; });
|
||||||
options.Add("displacement=", delegate(string v)
|
options.Add("displacement=", delegate(string v)
|
||||||
{
|
{
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
displacement = v == null ? Vector3.Zero : Vector3.Parse(v);
|
displacement = v == null ? Vector3.Zero : Vector3.Parse(v);
|
||||||
|
@ -163,12 +150,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
// Convert to radians for internals
|
// Convert to radians for internals
|
||||||
rotation = Util.Clamp<float>(rotation, -359f, 359f) / 180f * (float)Math.PI;
|
rotation = Util.Clamp<float>(rotation, -359f, 359f) / 180f * (float)Math.PI;
|
||||||
});
|
});
|
||||||
<<<<<<< HEAD
|
|
||||||
options.Add("rotation-center=", delegate (string v) {
|
|
||||||
=======
|
|
||||||
options.Add("rotation-center=", delegate(string v)
|
options.Add("rotation-center=", delegate(string v)
|
||||||
{
|
{
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
rotationCenter = v == null ? Vector3.Zero : Vector3.Parse(v);
|
rotationCenter = v == null ? Vector3.Zero : Vector3.Parse(v);
|
||||||
|
@ -308,21 +291,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
|
Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
|
||||||
DearchiveRegion(loadPath, Guid.Empty, archiveOptions);
|
DearchiveRegion(loadPath, Guid.Empty, archiveOptions);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string,object> options)
|
|
||||||
{
|
|
||||||
m_log.InfoFormat(
|
|
||||||
"[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string, object> options)
|
public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string, object> options)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
|
"[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
new ArchiveReadRequest(Scene, loadPath, requestId, options).DearchiveRegion();
|
new ArchiveReadRequest(Scene, loadPath, requestId, options).DearchiveRegion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,11 +305,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
|
Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
|
||||||
DearchiveRegion(loadStream, Guid.Empty, archiveOptions);
|
DearchiveRegion(loadStream, Guid.Empty, archiveOptions);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options)
|
public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options)
|
||||||
{
|
{
|
||||||
new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion();
|
new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion();
|
||||||
|
|
|
@ -68,6 +68,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
public event ChangeDelegate OnEstateInfoChange;
|
public event ChangeDelegate OnEstateInfoChange;
|
||||||
public event MessageDelegate OnEstateMessage;
|
public event MessageDelegate OnEstateMessage;
|
||||||
|
|
||||||
|
private int m_delayCount = 0;
|
||||||
|
|
||||||
#region Region Module interface
|
#region Region Module interface
|
||||||
|
|
||||||
public string Name { get { return "EstateManagementModule"; } }
|
public string Name { get { return "EstateManagementModule"; } }
|
||||||
|
@ -146,6 +148,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
flags |= RegionFlags.AllowParcelChanges;
|
flags |= RegionFlags.AllowParcelChanges;
|
||||||
if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
|
if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
|
||||||
flags |= RegionFlags.BlockParcelSearch;
|
flags |= RegionFlags.BlockParcelSearch;
|
||||||
|
if (Scene.RegionInfo.RegionSettings.GodBlockSearch)
|
||||||
|
flags |= (RegionFlags)(1 << 11);
|
||||||
|
if (Scene.RegionInfo.RegionSettings.Casino)
|
||||||
|
flags |= (RegionFlags)(1 << 10);
|
||||||
|
|
||||||
if (Scene.RegionInfo.RegionSettings.FixedSun)
|
if (Scene.RegionInfo.RegionSettings.FixedSun)
|
||||||
flags |= RegionFlags.SunFixed;
|
flags |= RegionFlags.SunFixed;
|
||||||
|
@ -198,6 +204,14 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
change(Scene.RegionInfo.RegionID);
|
change(Scene.RegionInfo.RegionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
ChangeDelegate change = OnRegionInfoChange;
|
||||||
|
|
||||||
|
if (change != null)
|
||||||
|
change(Scene.RegionInfo.RegionID);
|
||||||
|
}
|
||||||
|
|
||||||
public void TriggerRegionInfoChange()
|
public void TriggerRegionInfoChange()
|
||||||
{
|
{
|
||||||
m_regionChangeTimer.Stop();
|
m_regionChangeTimer.Stop();
|
||||||
|
@ -1491,68 +1505,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
sendRegionHandshake(client);
|
sendRegionHandshake(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private uint GetEstateFlags()
|
|
||||||
=======
|
|
||||||
public uint GetRegionFlags()
|
|
||||||
{
|
|
||||||
RegionFlags flags = RegionFlags.None;
|
|
||||||
|
|
||||||
// Fully implemented
|
|
||||||
//
|
|
||||||
if (Scene.RegionInfo.RegionSettings.AllowDamage)
|
|
||||||
flags |= RegionFlags.AllowDamage;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.BlockTerraform)
|
|
||||||
flags |= RegionFlags.BlockTerraform;
|
|
||||||
if (!Scene.RegionInfo.RegionSettings.AllowLandResell)
|
|
||||||
flags |= RegionFlags.BlockLandResell;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.DisableCollisions)
|
|
||||||
flags |= RegionFlags.SkipCollisions;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.DisableScripts)
|
|
||||||
flags |= RegionFlags.SkipScripts;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.DisablePhysics)
|
|
||||||
flags |= RegionFlags.SkipPhysics;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.BlockFly)
|
|
||||||
flags |= RegionFlags.NoFly;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.RestrictPushing)
|
|
||||||
flags |= RegionFlags.RestrictPushObject;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.AllowLandJoinDivide)
|
|
||||||
flags |= RegionFlags.AllowParcelChanges;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
|
|
||||||
flags |= RegionFlags.BlockParcelSearch;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.GodBlockSearch)
|
|
||||||
flags |= (RegionFlags)(1 << 11);
|
|
||||||
if (Scene.RegionInfo.RegionSettings.Casino)
|
|
||||||
flags |= (RegionFlags)(1 << 10);
|
|
||||||
|
|
||||||
if (Scene.RegionInfo.RegionSettings.FixedSun)
|
|
||||||
flags |= RegionFlags.SunFixed;
|
|
||||||
if (Scene.RegionInfo.RegionSettings.Sandbox)
|
|
||||||
flags |= RegionFlags.Sandbox;
|
|
||||||
if (Scene.RegionInfo.EstateSettings.AllowVoice)
|
|
||||||
flags |= RegionFlags.AllowVoice;
|
|
||||||
if (Scene.RegionInfo.EstateSettings.AllowLandmark)
|
|
||||||
flags |= RegionFlags.AllowLandmark;
|
|
||||||
if (Scene.RegionInfo.EstateSettings.AllowSetHome)
|
|
||||||
flags |= RegionFlags.AllowSetHome;
|
|
||||||
if (Scene.RegionInfo.EstateSettings.BlockDwell)
|
|
||||||
flags |= RegionFlags.BlockDwell;
|
|
||||||
if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport)
|
|
||||||
flags |= RegionFlags.ResetHomeOnTeleport;
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: SkipUpdateInterestList
|
|
||||||
|
|
||||||
// Omitted
|
|
||||||
//
|
|
||||||
// Omitted: NullLayer (what is that?)
|
|
||||||
// Omitted: SkipAgentAction (what does it do?)
|
|
||||||
|
|
||||||
return (uint)flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public uint GetEstateFlags()
|
public uint GetEstateFlags()
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
RegionFlags flags = RegionFlags.None;
|
RegionFlags flags = RegionFlags.None;
|
||||||
|
|
||||||
|
|
|
@ -69,11 +69,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Minimum land unit size in region co-ordinates.
|
/// Minimum land unit size in region co-ordinates.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
public const int LandUnit = 4;
|
public const int LandUnit = 4;
|
||||||
=======
|
|
||||||
public const int landUnit = 4;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
private static readonly string remoteParcelRequestPath = "0009/";
|
private static readonly string remoteParcelRequestPath = "0009/";
|
||||||
|
|
||||||
|
@ -106,17 +103,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
// caches ExtendedLandData
|
// caches ExtendedLandData
|
||||||
private Cache parcelInfoCache;
|
private Cache parcelInfoCache;
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions.
|
/// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private Dictionary<UUID, Vector3> forcedPosition = new Dictionary<UUID, Vector3>();
|
private Dictionary<UUID, Vector3> forcedPosition = new Dictionary<UUID, Vector3>();
|
||||||
=======
|
|
||||||
private Dictionary<UUID, Vector3> forcedPosition =
|
|
||||||
new Dictionary<UUID, Vector3>();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// Enables limiting parcel layer info transmission when doing simple updates
|
// Enables limiting parcel layer info transmission when doing simple updates
|
||||||
private bool shouldLimitParcelLayerInfoToViewDistance { get; set; }
|
private bool shouldLimitParcelLayerInfoToViewDistance { get; set; }
|
||||||
|
@ -132,7 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
shouldLimitParcelLayerInfoToViewDistance = true;
|
shouldLimitParcelLayerInfoToViewDistance = true;
|
||||||
parcelLayerViewDistance = 128;
|
parcelLayerViewDistance = 128;
|
||||||
IConfig landManagementConfig = source.Configs["LandManagement"];
|
IConfig landManagementConfig = source.Configs["LandManagement"];
|
||||||
|
@ -140,24 +131,16 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
shouldLimitParcelLayerInfoToViewDistance = landManagementConfig.GetBoolean("LimitParcelLayerUpdateDistance", shouldLimitParcelLayerInfoToViewDistance);
|
shouldLimitParcelLayerInfoToViewDistance = landManagementConfig.GetBoolean("LimitParcelLayerUpdateDistance", shouldLimitParcelLayerInfoToViewDistance);
|
||||||
parcelLayerViewDistance = landManagementConfig.GetInt("ParcelLayerViewDistance", parcelLayerViewDistance);
|
parcelLayerViewDistance = landManagementConfig.GetInt("ParcelLayerViewDistance", parcelLayerViewDistance);
|
||||||
=======
|
DefaultGodParcelGroup = new UUID(landManagementConfig.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString()));
|
||||||
IConfig cnf = source.Configs["LandManagement"];
|
DefaultGodParcelName = landManagementConfig.GetString("DefaultAdministratorParcelName", "Default Parcel");
|
||||||
if (cnf != null)
|
|
||||||
{
|
|
||||||
DefaultGodParcelGroup = new UUID(cnf.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString()));
|
|
||||||
DefaultGodParcelName = cnf.GetString("DefaultAdministratorParcelName", "Default Parcel");
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
public void AddRegion(Scene scene)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit];
|
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit];
|
||||||
=======
|
|
||||||
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / landUnit, m_scene.RegionInfo.RegionSizeY / landUnit];
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
landChannel = new LandChannel(scene, this);
|
landChannel = new LandChannel(scene, this);
|
||||||
|
|
||||||
parcelInfoCache = new Cache();
|
parcelInfoCache = new Cache();
|
||||||
|
@ -299,11 +282,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
m_landList.Clear();
|
m_landList.Clear();
|
||||||
m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1;
|
m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit];
|
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit];
|
||||||
=======
|
|
||||||
m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / landUnit, m_scene.RegionInfo.RegionSizeY / landUnit];
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,16 +293,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// <returns>The parcel created.</returns>
|
/// <returns>The parcel created.</returns>
|
||||||
protected ILandObject CreateDefaultParcel()
|
protected ILandObject CreateDefaultParcel()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName);
|
|
||||||
|
|
||||||
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
|
||||||
=======
|
|
||||||
m_log.DebugFormat("{0} Creating default parcel for region {1}", LogHeader, m_scene.RegionInfo.RegionName);
|
m_log.DebugFormat("{0} Creating default parcel for region {1}", LogHeader, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0,
|
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0,
|
||||||
(int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY));
|
(int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY));
|
||||||
fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
|
@ -456,15 +430,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public void SendLandUpdate(ScenePresence avatar, bool force)
|
public void SendLandUpdate(ScenePresence avatar, bool force)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ILandObject over = GetLandObject((int)Math.Min(((int)m_scene.RegionInfo.RegionSizeX - 1), Math.Max(0, Math.Round(avatar.AbsolutePosition.X))),
|
|
||||||
(int)Math.Min(((int)m_scene.RegionInfo.RegionSizeY - 1), Math.Max(0, Math.Round(avatar.AbsolutePosition.Y))));
|
|
||||||
=======
|
|
||||||
if (avatar.IsChildAgent)
|
if (avatar.IsChildAgent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ILandObject over = GetLandObjectClipedXY(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
ILandObject over = GetLandObjectClipedXY(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (over != null)
|
if (over != null)
|
||||||
{
|
{
|
||||||
|
@ -621,28 +590,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
new_land.LandData.LocalID = newLandLocalID;
|
new_land.LandData.LocalID = newLandLocalID;
|
||||||
|
|
||||||
bool[,] landBitmap = new_land.GetLandBitmap();
|
bool[,] landBitmap = new_land.GetLandBitmap();
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("{0} AddLandObject. new_land.bitmapSize=({1},{2}). newLocalID={3}",
|
|
||||||
// LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), newLandLocalID);
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (landBitmap.GetLength(0) != m_landIDList.GetLength(0) || landBitmap.GetLength(1) != m_landIDList.GetLength(1))
|
if (landBitmap.GetLength(0) != m_landIDList.GetLength(0) || landBitmap.GetLength(1) != m_landIDList.GetLength(1))
|
||||||
{
|
{
|
||||||
// Going to variable sized regions can cause mismatches
|
// Going to variable sized regions can cause mismatches
|
||||||
m_log.ErrorFormat("{0} AddLandObject. Added land bitmap different size than region ID map. bitmapSize=({1},{2}), landIDSize=({3},{4})",
|
m_log.ErrorFormat("{0} AddLandObject. Added land bitmap different size than region ID map. bitmapSize=({1},{2}), landIDSize=({3},{4})",
|
||||||
<<<<<<< HEAD
|
|
||||||
LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1) );
|
|
||||||
=======
|
|
||||||
LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1));
|
LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If other land objects still believe that they occupy any parts of the same space,
|
// If other land objects still believe that they occupy any parts of the same space,
|
||||||
// then do not allow the add to proceed.
|
// then do not allow the add to proceed.
|
||||||
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
||||||
<<<<<<< HEAD
|
|
||||||
{
|
{
|
||||||
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
||||||
{
|
{
|
||||||
|
@ -668,40 +626,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
|
||||||
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
|
||||||
{
|
|
||||||
if (landBitmap[x, y])
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
|
|
||||||
// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
|
|
||||||
|
|
||||||
=======
|
|
||||||
int lastRecordedLandId = m_landIDList[x, y];
|
|
||||||
|
|
||||||
if (lastRecordedLandId > 0)
|
|
||||||
{
|
|
||||||
ILandObject lastRecordedLo = m_landList[lastRecordedLandId];
|
|
||||||
|
|
||||||
if (lastRecordedLo.LandBitmap[x, y])
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat(
|
|
||||||
"{0}: Cannot add parcel \"{1}\", local ID {2} at tile {3},{4} because this is still occupied by parcel \"{5}\", local ID {6} in {7}",
|
|
||||||
LogHeader, new_land.LandData.Name, new_land.LandData.LocalID, x, y,
|
|
||||||
lastRecordedLo.LandData.Name, lastRecordedLo.LandData.LocalID, m_scene.Name);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
||||||
|
@ -712,7 +636,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
|
// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
|
||||||
// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
|
// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_landIDList[x, y] = newLandLocalID;
|
m_landIDList[x, y] = newLandLocalID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -829,33 +752,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// <returns>Land object at the point supplied</returns>
|
/// <returns>Land object at the point supplied</returns>
|
||||||
public ILandObject GetLandObject(float x_float, float y_float)
|
public ILandObject GetLandObject(float x_float, float y_float)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
return GetLandObject((int)x_float, (int)y_float, true /* returnNullIfLandObjectNotFound */);
|
|
||||||
/*
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
|
|
||||||
if (x_float >= m_scene.RegionInfo.RegionSizeX || x_float < 0 || y_float >= m_scene.RegionInfo.RegionSizeX || y_float < 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / (float)landUnit));
|
|
||||||
y = Convert.ToInt32(Math.Floor(Convert.ToDouble(y_float) / (float)landUnit));
|
|
||||||
}
|
|
||||||
catch (OverflowException)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x >= (m_scene.RegionInfo.RegionSizeX / landUnit)
|
|
||||||
|| y >= (m_scene.RegionInfo.RegionSizeY / landUnit)
|
|
||||||
|| x < 0
|
|
||||||
|| y < 0)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
return GetLandObject((int)x_float, (int)y_float, true);
|
return GetLandObject((int)x_float, (int)y_float, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -875,45 +771,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
avy = 0;
|
avy = 0;
|
||||||
else if (avy >= m_scene.RegionInfo.RegionSizeY)
|
else if (avy >= m_scene.RegionInfo.RegionSizeY)
|
||||||
avy = (int)Constants.RegionSize - 1;
|
avy = (int)Constants.RegionSize - 1;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
lock (m_landIDList)
|
lock (m_landIDList)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// Corner case. If an autoreturn happens during sim startup
|
|
||||||
// we will come here with the list uninitialized
|
|
||||||
//
|
|
||||||
// int landId = m_landIDList[x, y];
|
|
||||||
|
|
||||||
// if (landId == 0)
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[LAND MANAGEMENT MODULE]: No land object found at ({0}, {1}) on {2}",
|
|
||||||
// x, y, m_scene.RegionInfo.RegionName);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (m_landList.ContainsKey(m_landIDList[x, y]))
|
return m_landList[m_landIDList[avx / LandUnit, avy / LandUnit]];
|
||||||
return m_landList[m_landIDList[x, y]];
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("{0} GetLandObject exception. x={1}, y={2}, m_landIDList.len=({3},{4})",
|
|
||||||
LogHeader, x, y, m_landIDList.GetLength(0), m_landIDList.GetLength(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
=======
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return m_landList[m_landIDList[avx / landUnit, avy / landUnit]];
|
|
||||||
}
|
}
|
||||||
catch (IndexOutOfRangeException)
|
catch (IndexOutOfRangeException)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public entry.
|
// Public entry.
|
||||||
|
@ -923,38 +792,15 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
return GetLandObject(x, y, false /* returnNullIfLandObjectNotFound */);
|
return GetLandObject(x, y, false /* returnNullIfLandObjectNotFound */);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <summary>
|
|
||||||
/// Given a region position, return the parcel land object for that location
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>
|
|
||||||
/// The land object.
|
|
||||||
/// </returns>
|
|
||||||
/// <param name='x'></param>
|
|
||||||
/// <param name='y'></param>
|
|
||||||
/// <param name='returnNullIfLandObjectNotFound'>
|
|
||||||
/// Return null if the land object requested is not within the region's bounds.
|
|
||||||
/// </param>
|
|
||||||
private ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds)
|
|
||||||
{
|
|
||||||
if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0)
|
|
||||||
=======
|
|
||||||
public ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds)
|
public ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds)
|
||||||
{
|
{
|
||||||
if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0)
|
if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
// These exceptions here will cause a lot of complaints from the users specifically because
|
// These exceptions here will cause a lot of complaints from the users specifically because
|
||||||
// they happen every time at border crossings
|
// they happen every time at border crossings
|
||||||
if (returnNullIfLandObjectOutsideBounds)
|
if (returnNullIfLandObjectOutsideBounds)
|
||||||
return null;
|
return null;
|
||||||
else
|
else
|
||||||
<<<<<<< HEAD
|
|
||||||
throw new Exception(
|
|
||||||
String.Format("{0} GetLandObject for non-existent position. Region={1}, pos=<{2},{3}",
|
|
||||||
LogHeader, m_scene.RegionInfo.RegionName, x, y)
|
|
||||||
);
|
|
||||||
=======
|
|
||||||
throw new Exception("Error: Parcel not found at point " + x + ", " + y);
|
throw new Exception("Error: Parcel not found at point " + x + ", " + y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -968,7 +814,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_landList[m_landIDList[x / 4, y / 4]];
|
return m_landList[m_landIDList[x / 4, y / 4]];
|
||||||
|
@ -987,19 +832,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a 'parcel is here' bitmap for the parcel identified by the passed landID
|
|
||||||
private bool[,] CreateBitmapForID(int landID)
|
|
||||||
{
|
|
||||||
bool[,] ret = new bool[m_landIDList.GetLength(0), m_landIDList.GetLength(1)];
|
|
||||||
|
|
||||||
for (int xx = 0; xx < m_landIDList.GetLength(0); xx++)
|
|
||||||
for (int yy = 0; yy < m_landIDList.GetLength(0); yy++)
|
|
||||||
if (m_landIDList[xx, yy] == landID)
|
|
||||||
ret[xx, yy] = true;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Parcel Modification
|
#region Parcel Modification
|
||||||
|
@ -1169,19 +1001,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
//Now add the new land object
|
//Now add the new land object
|
||||||
ILandObject result = AddLandObject(newLand);
|
ILandObject result = AddLandObject(newLand);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
if (result != null)
|
|
||||||
{
|
|
||||||
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
|
||||||
result.SendLandUpdateToAvatarsOverMe();
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
||||||
result.SendLandUpdateToAvatarsOverMe();
|
result.SendLandUpdateToAvatarsOverMe();
|
||||||
startLandObject.SendLandUpdateToAvatarsOverMe();
|
startLandObject.SendLandUpdateToAvatarsOverMe();
|
||||||
m_scene.ForEachClient(SendParcelOverlay);
|
m_scene.ForEachClient(SendParcelOverlay);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1263,15 +1088,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
#region Parcel Updating
|
#region Parcel Updating
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Send parcel layer info for the whole region
|
|
||||||
public void SendParcelOverlay(IClientAPI remote_client)
|
|
||||||
{
|
|
||||||
SendParcelOverlay(remote_client, 0, 0, (int)Constants.MaximumRegionSize);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send the parcel overlay blocks to the client. We send the overlay packets
|
/// Send the parcel overlay blocks to the client. We send the overlay packets
|
||||||
/// around a location and limited by the 'parcelLayerViewDistance'. This number
|
/// around a location and limited by the 'parcelLayerViewDistance'. This number
|
||||||
|
@ -1285,7 +1101,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// <param name="xPlace">X position in the region to send surrounding parcel layer info</param>
|
/// <param name="xPlace">X position in the region to send surrounding parcel layer info</param>
|
||||||
/// <param name="yPlace">y position in the region to send surrounding parcel layer info</param>
|
/// <param name="yPlace">y position in the region to send surrounding parcel layer info</param>
|
||||||
/// <param name="layerViewDistance">Distance from x,y position to send parcel layer info</param>
|
/// <param name="layerViewDistance">Distance from x,y position to send parcel layer info</param>
|
||||||
private void SendParcelOverlay(IClientAPI remote_client, int xPlace, int yPlace, int layerViewDistance)
|
public void SendParcelOverlay(IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
if (remote_client.SceneAgent.PresenceType == PresenceType.Npc)
|
if (remote_client.SceneAgent.PresenceType == PresenceType.Npc)
|
||||||
return;
|
return;
|
||||||
|
@ -1295,149 +1111,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
byte[] byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
byte[] byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
||||||
int byteArrayCount = 0;
|
int byteArrayCount = 0;
|
||||||
int sequenceID = 0;
|
int sequenceID = 0;
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
int xLow = 0;
|
// Layer data is in LandUnit (4m) chunks
|
||||||
int xHigh = (int)m_scene.RegionInfo.RegionSizeX;
|
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY; y += LandUnit)
|
||||||
int yLow = 0;
|
|
||||||
int yHigh = (int)m_scene.RegionInfo.RegionSizeY;
|
|
||||||
|
|
||||||
if (shouldLimitParcelLayerInfoToViewDistance)
|
|
||||||
{
|
{
|
||||||
// Compute view distance around the given point
|
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX; x += LandUnit)
|
||||||
int txLow = xPlace - layerViewDistance;
|
|
||||||
int txHigh = xPlace + layerViewDistance;
|
|
||||||
// If the distance is outside the region area, move the view distance to ba all in the region
|
|
||||||
if (txLow < xLow)
|
|
||||||
=======
|
|
||||||
|
|
||||||
// Layer data is in landUnit (4m) chunks
|
|
||||||
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY; y += landUnit)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX; x += landUnit)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
|
||||||
txLow = xLow;
|
|
||||||
txHigh = Math.Min(yLow + (layerViewDistance * 2), xHigh);
|
|
||||||
}
|
|
||||||
if (txHigh > xHigh)
|
|
||||||
{
|
|
||||||
txLow = Math.Max(xLow, xHigh - (layerViewDistance * 2));
|
|
||||||
txHigh = xHigh;
|
|
||||||
}
|
|
||||||
xLow = txLow;
|
|
||||||
xHigh = txHigh;
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
int tyLow = yPlace - layerViewDistance;
|
|
||||||
int tyHigh = yPlace + layerViewDistance;
|
|
||||||
if (tyLow < yLow)
|
|
||||||
{
|
|
||||||
tyLow = yLow;
|
|
||||||
tyHigh = Math.Min(yLow + (layerViewDistance * 2), yHigh);
|
|
||||||
}
|
|
||||||
if (tyHigh > yHigh)
|
|
||||||
{
|
|
||||||
tyLow = Math.Max(yLow, yHigh - (layerViewDistance * 2));
|
|
||||||
tyHigh = yHigh;
|
|
||||||
}
|
|
||||||
yLow = tyLow;
|
|
||||||
yHigh = tyHigh;
|
|
||||||
}
|
|
||||||
// m_log.DebugFormat("{0} SendParcelOverlay: place=<{1},{2}>, vDist={3}, xLH=<{4},{5}, yLH=<{6},{7}>",
|
|
||||||
// LogHeader, xPlace, yPlace, layerViewDistance, xLow, xHigh, yLow, yHigh);
|
|
||||||
=======
|
|
||||||
ILandObject currentParcelBlock = GetLandObject(x, y);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// Layer data is in landUnit (4m) chunks
|
|
||||||
for (int y = yLow; y < yHigh / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++)
|
|
||||||
{
|
|
||||||
for (int x = xLow; x < xHigh / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++)
|
|
||||||
{
|
|
||||||
byteArray[byteArrayCount] = BuildLayerByte(GetLandObject(x * LandUnit, y * LandUnit), x, y, remote_client);
|
|
||||||
byteArrayCount++;
|
|
||||||
if (byteArrayCount >= LAND_BLOCKS_PER_PACKET)
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("{0} SendParcelOverlay, sending packet, bytes={1}", LogHeader, byteArray.Length);
|
|
||||||
remote_client.SendLandParcelOverlay(byteArray, sequenceID);
|
|
||||||
byteArrayCount = 0;
|
|
||||||
sequenceID++;
|
|
||||||
byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (byteArrayCount != 0)
|
|
||||||
{
|
|
||||||
remote_client.SendLandParcelOverlay(byteArray, sequenceID);
|
|
||||||
// m_log.DebugFormat("{0} SendParcelOverlay, complete sending packet, bytes={1}", LogHeader, byteArray.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte BuildLayerByte(ILandObject currentParcelBlock, int x, int y, IClientAPI remote_client)
|
|
||||||
{
|
{
|
||||||
byte tempByte = 0; //This represents the byte for the current 4x4
|
byte tempByte = 0; //This represents the byte for the current 4x4
|
||||||
|
|
||||||
|
ILandObject currentParcelBlock = GetLandObject(x, y);
|
||||||
|
|
||||||
if (currentParcelBlock != null)
|
if (currentParcelBlock != null)
|
||||||
{
|
{
|
||||||
if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId)
|
|
||||||
{
|
|
||||||
//Owner Flag
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER);
|
|
||||||
}
|
|
||||||
else if (currentParcelBlock.LandData.SalePrice > 0 &&
|
|
||||||
(currentParcelBlock.LandData.AuthBuyerID == UUID.Zero ||
|
|
||||||
currentParcelBlock.LandData.AuthBuyerID == remote_client.AgentId))
|
|
||||||
{
|
|
||||||
//Sale Flag
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE);
|
|
||||||
}
|
|
||||||
else if (currentParcelBlock.LandData.OwnerID == UUID.Zero)
|
|
||||||
{
|
|
||||||
//Public Flag
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//Other Flag
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_OTHER);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Now for border control
|
|
||||||
|
|
||||||
ILandObject westParcel = null;
|
|
||||||
ILandObject southParcel = null;
|
|
||||||
if (x > 0)
|
|
||||||
{
|
|
||||||
westParcel = GetLandObject((x - 1) * LandUnit, y * LandUnit);
|
|
||||||
}
|
|
||||||
if (y > 0)
|
|
||||||
{
|
|
||||||
southParcel = GetLandObject(x * LandUnit, (y - 1) * LandUnit);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x == 0)
|
|
||||||
{
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_WEST);
|
|
||||||
}
|
|
||||||
else if (westParcel != null && westParcel != currentParcelBlock)
|
|
||||||
{
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_WEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (y == 0)
|
|
||||||
{
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_SOUTH);
|
|
||||||
}
|
|
||||||
else if (southParcel != null && southParcel != currentParcelBlock)
|
|
||||||
{
|
|
||||||
tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_SOUTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
// types
|
// types
|
||||||
if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId)
|
if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId)
|
||||||
{
|
{
|
||||||
|
@ -1525,10 +1210,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
if (byteArrayCount > 0)
|
if (byteArrayCount > 0)
|
||||||
{
|
{
|
||||||
remote_client.SendLandParcelOverlay(byteArray, sequenceID);
|
remote_client.SendLandParcelOverlay(byteArray, sequenceID);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return tempByte;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClientOnParcelPropertiesRequest(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,
|
||||||
|
@ -1569,10 +1251,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client);
|
temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Also send the layer data around the point of interest
|
|
||||||
SendParcelOverlay(remote_client, (start_x + end_x) / 2, (start_y + end_y) / 2, parcelLayerViewDistance);
|
|
||||||
=======
|
|
||||||
// SendParcelOverlay(remote_client);
|
// SendParcelOverlay(remote_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1612,7 +1290,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
avatar.currentParcelUUID = parcelID; // force parcel flags review
|
avatar.currentParcelUUID = parcelID; // force parcel flags review
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClientOnParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client)
|
public void ClientOnParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client)
|
||||||
|
@ -1821,35 +1498,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
for (int i = 0; i < data.Count; i++)
|
for (int i = 0; i < data.Count; i++)
|
||||||
IncomingLandObjectFromStorage(data[i]);
|
IncomingLandObjectFromStorage(data[i]);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
// Layer data is in LandUnit (4m) chunks
|
||||||
// Prevent race conditions from any auto-creation of new parcels for varregions whilst we are still loading
|
|
||||||
// the existing parcels.
|
|
||||||
lock (m_landList)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < data.Count; i++)
|
|
||||||
IncomingLandObjectFromStorage(data[i]);
|
|
||||||
|
|
||||||
// Layer data is in landUnit (4m) chunks
|
|
||||||
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++)
|
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++)
|
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++)
|
||||||
=======
|
|
||||||
// Layer data is in landUnit (4m) chunks
|
|
||||||
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / landUnit); y++)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / landUnit); x++)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (m_landIDList[x, y] == 0)
|
if (m_landIDList[x, y] == 0)
|
||||||
{
|
{
|
||||||
if (m_landList.Count == 1)
|
if (m_landList.Count == 1)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
<<<<<<< HEAD
|
|
||||||
"[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}",
|
"[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}",
|
||||||
=======
|
|
||||||
"[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}",
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
LogHeader, x, y, m_scene.Name);
|
LogHeader, x, y, m_scene.Name);
|
||||||
|
|
||||||
int onlyParcelID = 0;
|
int onlyParcelID = 0;
|
||||||
|
@ -1872,19 +1531,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else if (m_landList.Count > 1)
|
else if (m_landList.Count > 1)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
<<<<<<< HEAD
|
|
||||||
"{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}",
|
"{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}",
|
||||||
LogHeader, x, y, m_scene.Name);
|
LogHeader, x, y, m_scene.Name);
|
||||||
|
|
||||||
// There are several other parcels so we must create a new one for the unassigned space
|
// There are several other parcels so we must create a new one for the unassigned space
|
||||||
ILandObject newLand = new LandObject(UUID.Zero, false, m_scene);
|
ILandObject newLand = new LandObject(UUID.Zero, false, m_scene);
|
||||||
=======
|
|
||||||
"{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}",
|
|
||||||
LogHeader, x, y, m_scene.Name);
|
|
||||||
|
|
||||||
// There are several other parcels so we must create a new one for the unassigned space
|
|
||||||
ILandObject newLand = new LandObject(UUID.Zero, false, m_scene);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Claim all the unclaimed "0" ids
|
// Claim all the unclaimed "0" ids
|
||||||
newLand.SetLandBitmap(CreateBitmapForID(0));
|
newLand.SetLandBitmap(CreateBitmapForID(0));
|
||||||
newLand.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
newLand.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
|
@ -1895,11 +1546,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
// We should never reach this point as the separate code path when no land data exists should have fired instead.
|
// We should never reach this point as the separate code path when no land data exists should have fired instead.
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
<<<<<<< HEAD
|
|
||||||
"{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present",
|
"{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present",
|
||||||
=======
|
|
||||||
"{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present",
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
LogHeader, m_scene.Name);
|
LogHeader, m_scene.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1910,13 +1557,9 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
private void IncomingLandObjectFromStorage(LandData data)
|
private void IncomingLandObjectFromStorage(LandData data)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ILandObject new_land = new LandObject(data, m_scene);
|
|
||||||
=======
|
|
||||||
|
|
||||||
ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene);
|
ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene);
|
||||||
new_land.LandData = data.Copy();
|
new_land.LandData = data.Copy();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
new_land.SetLandBitmapFromByteArray();
|
new_land.SetLandBitmapFromByteArray();
|
||||||
AddLandObject(new_land);
|
AddLandObject(new_land);
|
||||||
// new_land.SendLandUpdateToAvatarsOverMe();
|
// new_land.SendLandUpdateToAvatarsOverMe();
|
||||||
|
@ -2568,17 +2211,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
private void AppendParcelsSummaryReport(StringBuilder report)
|
private void AppendParcelsSummaryReport(StringBuilder report)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
report.AppendFormat("Land information for {0}\n", m_scene.Name);
|
|
||||||
|
|
||||||
ConsoleDisplayTable cdt = new ConsoleDisplayTable();
|
|
||||||
cdt.AddColumn("Parcel Name", ConsoleDisplayUtil.ParcelNameSize);
|
|
||||||
cdt.AddColumn("ID", 3);
|
|
||||||
cdt.AddColumn("Area", 6);
|
|
||||||
cdt.AddColumn("Starts", ConsoleDisplayUtil.VectorSize);
|
|
||||||
cdt.AddColumn("Ends", ConsoleDisplayUtil.VectorSize);
|
|
||||||
cdt.AddColumn("Owner", ConsoleDisplayUtil.UserNameSize);
|
|
||||||
=======
|
|
||||||
report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName);
|
report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName);
|
||||||
report.AppendFormat(
|
report.AppendFormat(
|
||||||
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
||||||
|
@ -2588,27 +2220,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
"AABBMin",
|
"AABBMin",
|
||||||
"AABBMax",
|
"AABBMax",
|
||||||
"Owner");
|
"Owner");
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
lock (m_landList)
|
lock (m_landList)
|
||||||
{
|
{
|
||||||
foreach (ILandObject lo in m_landList.Values)
|
foreach (ILandObject lo in m_landList.Values)
|
||||||
{
|
{
|
||||||
LandData ld = lo.LandData;
|
LandData ld = lo.LandData;
|
||||||
<<<<<<< HEAD
|
|
||||||
string ownerName;
|
|
||||||
if (ld.IsGroupOwned)
|
|
||||||
{
|
|
||||||
GroupRecord rec = m_groupManager.GetGroupRecord(ld.GroupID);
|
|
||||||
ownerName = (rec != null) ? rec.GroupName : "Unknown Group";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ownerName = m_userManager.GetUserName(ld.OwnerID);
|
|
||||||
}
|
|
||||||
cdt.AddRow(
|
|
||||||
ld.Name, ld.LocalID, ld.Area, lo.StartPoint, lo.EndPoint, ownerName);
|
|
||||||
=======
|
|
||||||
|
|
||||||
report.AppendFormat(
|
report.AppendFormat(
|
||||||
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
||||||
|
@ -2636,11 +2253,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition);
|
ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
report.Append(cdt.ToString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AppendParcelReport(StringBuilder report, ILandObject lo)
|
private void AppendParcelReport(StringBuilder report, ILandObject lo)
|
||||||
|
|
|
@ -46,20 +46,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private static readonly string LogHeader = "[LAND OBJECT]";
|
private static readonly string LogHeader = "[LAND OBJECT]";
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
private readonly int landUnit = 4;
|
|
||||||
|
|
||||||
private int m_lastSeqId = 0;
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
private readonly int landUnit = 4;
|
private readonly int landUnit = 4;
|
||||||
|
|
||||||
private int m_lastSeqId = 0;
|
private int m_lastSeqId = 0;
|
||||||
private int m_expiryCounter = 0;
|
private int m_expiryCounter = 0;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||||
protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>();
|
protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>();
|
||||||
|
@ -67,16 +59,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
protected ExpiringCache<UUID, bool> m_groupMemberCache = new ExpiringCache<UUID, bool>();
|
protected ExpiringCache<UUID, bool> m_groupMemberCache = new ExpiringCache<UUID, bool>();
|
||||||
protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds
|
protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public bool[,] LandBitmap { get; set; }
|
|
||||||
=======
|
|
||||||
private bool[,] m_landBitmap;
|
private bool[,] m_landBitmap;
|
||||||
public bool[,] LandBitmap
|
public bool[,] LandBitmap
|
||||||
{
|
{
|
||||||
get { return m_landBitmap; }
|
get { return m_landBitmap; }
|
||||||
set { m_landBitmap = value; }
|
set { m_landBitmap = value; }
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -87,9 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
return free;
|
return free;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public LandData LandData { get; set; }
|
|
||||||
=======
|
|
||||||
protected LandData m_landData;
|
protected LandData m_landData;
|
||||||
public LandData LandData
|
public LandData LandData
|
||||||
{
|
{
|
||||||
|
@ -97,7 +82,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
set { m_landData = value; }
|
set { m_landData = value; }
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
public IPrimCounts PrimCounts { get; set; }
|
public IPrimCounts PrimCounts { get; set; }
|
||||||
|
|
||||||
|
@ -225,12 +209,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Normal Calculations
|
// Normal Calculations
|
||||||
<<<<<<< HEAD
|
|
||||||
int parcelMax = (int)(((float)LandData.Area / (m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY))
|
|
||||||
* (float)m_scene.RegionInfo.ObjectCapacity
|
|
||||||
* (float)m_scene.RegionInfo.RegionSettings.ObjectBonus);
|
|
||||||
// TODO: The calculation of ObjectBonus should be refactored. It does still not work in the same manner as SL!
|
|
||||||
=======
|
|
||||||
int parcelMax = (int)( (long)LandData.Area
|
int parcelMax = (int)( (long)LandData.Area
|
||||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||||
* (long)m_scene.RegionInfo.RegionSettings.ObjectBonus
|
* (long)m_scene.RegionInfo.RegionSettings.ObjectBonus
|
||||||
|
@ -252,7 +230,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
int parcelMax = (int)((long)LandData.Area
|
int parcelMax = (int)((long)LandData.Area
|
||||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||||
/ 65536L);
|
/ 65536L);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return parcelMax;
|
return parcelMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -266,15 +243,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Normal Calculations
|
//Normal Calculations
|
||||||
<<<<<<< HEAD
|
|
||||||
int simMax = (int)(((float)LandData.SimwideArea / (m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY))
|
|
||||||
* (float)m_scene.RegionInfo.ObjectCapacity);
|
|
||||||
=======
|
|
||||||
int simMax = (int)( (long)LandData.SimwideArea
|
int simMax = (int)( (long)LandData.SimwideArea
|
||||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||||
/ (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) );
|
/ (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) );
|
||||||
// m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}", LandData.SimwideArea, m_scene.RegionInfo.ObjectCapacity, simMax);
|
// m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}", LandData.SimwideArea, m_scene.RegionInfo.ObjectCapacity, simMax);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return simMax;
|
return simMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -439,12 +411,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
uint preserve = LandData.Flags & ~allowedDelta;
|
uint preserve = LandData.Flags & ~allowedDelta;
|
||||||
newData.Flags = preserve | (args.ParcelFlags & allowedDelta);
|
newData.Flags = preserve | (args.ParcelFlags & allowedDelta);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
|
||||||
SendLandUpdateToAvatarsOverMe(snap_selection);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
|
|
||||||
uint curdelta = LandData.Flags ^ newData.Flags;
|
uint curdelta = LandData.Flags ^ newData.Flags;
|
||||||
curdelta &= (uint)(ParcelFlags.SoundLocal);
|
curdelta &= (uint)(ParcelFlags.SoundLocal);
|
||||||
|
@ -456,7 +422,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area)
|
public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area)
|
||||||
|
@ -806,17 +771,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void UpdateAABBAndAreaValues()
|
private void UpdateAABBAndAreaValues()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
int min_x = 10000;
|
|
||||||
int min_y = 10000;
|
|
||||||
int max_x = 0;
|
|
||||||
int max_y = 0;
|
|
||||||
=======
|
|
||||||
int min_x = Int32.MaxValue;
|
int min_x = Int32.MaxValue;
|
||||||
int min_y = Int32.MaxValue;
|
int min_y = Int32.MaxValue;
|
||||||
int max_x = Int32.MinValue;
|
int max_x = Int32.MinValue;
|
||||||
int max_y = Int32.MinValue;
|
int max_y = Int32.MinValue;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
int tempArea = 0;
|
int tempArea = 0;
|
||||||
int x, y;
|
int x, y;
|
||||||
for (x = 0; x < LandBitmap.GetLength(0); x++)
|
for (x = 0; x < LandBitmap.GetLength(0); x++)
|
||||||
|
@ -825,12 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
if (LandBitmap[x, y] == true)
|
if (LandBitmap[x, y] == true)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (min_x > x) min_x = x;
|
|
||||||
if (min_y > y) min_y = y;
|
|
||||||
if (max_x < x) max_x = x;
|
|
||||||
if (max_y < y) max_y = y;
|
|
||||||
=======
|
|
||||||
if (min_x > x)
|
if (min_x > x)
|
||||||
min_x = x;
|
min_x = x;
|
||||||
if (min_y > y)
|
if (min_y > y)
|
||||||
|
@ -839,7 +792,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
max_x = x;
|
max_x = x;
|
||||||
if (max_y < y)
|
if (max_y < y)
|
||||||
max_y = y;
|
max_y = y;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
tempArea += landUnit * landUnit; //16sqm peice of land
|
tempArea += landUnit * landUnit; //16sqm peice of land
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -847,27 +799,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
int tx = min_x * landUnit;
|
int tx = min_x * landUnit;
|
||||||
if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1))
|
if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1))
|
||||||
tx = ((int)m_scene.RegionInfo.RegionSizeX - 1);
|
tx = ((int)m_scene.RegionInfo.RegionSizeX - 1);
|
||||||
<<<<<<< HEAD
|
|
||||||
int ty = min_y * landUnit;
|
|
||||||
if (ty > ((int)m_scene.RegionInfo.RegionSizeY - 1))
|
|
||||||
ty = ((int)m_scene.RegionInfo.RegionSizeY - 1);
|
|
||||||
|
|
||||||
LandData.AABBMin =
|
|
||||||
new Vector3(
|
|
||||||
(float)(min_x * landUnit), (float)(min_y * landUnit), m_scene != null ? (float)m_scene.Heightmap[tx, ty] : 0);
|
|
||||||
|
|
||||||
tx = max_x * landUnit;
|
|
||||||
if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1))
|
|
||||||
tx = ((int)m_scene.RegionInfo.RegionSizeX - 1);
|
|
||||||
ty = max_y * landUnit;
|
|
||||||
if (ty > ((int)m_scene.RegionInfo.RegionSizeY - 1))
|
|
||||||
ty = ((int)m_scene.RegionInfo.RegionSizeY - 1);
|
|
||||||
|
|
||||||
LandData.AABBMax
|
|
||||||
= new Vector3(
|
|
||||||
(float)(max_x * landUnit), (float)(max_y * landUnit), m_scene != null ? (float)m_scene.Heightmap[tx, ty] : 0);
|
|
||||||
=======
|
|
||||||
|
|
||||||
int htx;
|
int htx;
|
||||||
if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
|
if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
|
||||||
htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
|
htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
|
||||||
|
@ -904,7 +835,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
LandData.AABBMax
|
LandData.AABBMax
|
||||||
= new Vector3(
|
= new Vector3(
|
||||||
(float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
|
(float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
LandData.Area = tempArea;
|
LandData.Area = tempArea;
|
||||||
}
|
}
|
||||||
|
@ -920,10 +850,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
public void SetLandBitmap(bool[,] bitmap)
|
public void SetLandBitmap(bool[,] bitmap)
|
||||||
{
|
{
|
||||||
LandBitmap = bitmap;
|
LandBitmap = bitmap;
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("{0} SetLandBitmap. BitmapSize=<{1},{2}>", LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
ForceUpdateLandInfo();
|
ForceUpdateLandInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1024,16 +950,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
private byte[] ConvertLandBitmapToBytes()
|
private byte[] ConvertLandBitmapToBytes()
|
||||||
{
|
{
|
||||||
byte[] tempConvertArr = new byte[LandBitmap.GetLength(0) * LandBitmap.GetLength(1) / 8];
|
byte[] tempConvertArr = new byte[LandBitmap.GetLength(0) * LandBitmap.GetLength(1) / 8];
|
||||||
<<<<<<< HEAD
|
|
||||||
byte tempByte = 0;
|
|
||||||
int byteNum = 0;
|
|
||||||
int i = 0;
|
|
||||||
=======
|
|
||||||
int tempByte = 0;
|
int tempByte = 0;
|
||||||
int i, byteNum = 0;
|
int i, byteNum = 0;
|
||||||
int mask = 1;
|
int mask = 1;
|
||||||
i = 0;
|
i = 0;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
for (int y = 0; y < LandBitmap.GetLength(1); y++)
|
for (int y = 0; y < LandBitmap.GetLength(1); y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < LandBitmap.GetLength(0); x++)
|
for (int x = 0; x < LandBitmap.GetLength(0); x++)
|
||||||
|
@ -1070,7 +991,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
// LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
|
// LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
|
||||||
=======
|
=======
|
||||||
*/
|
*/
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return tempConvertArr;
|
return tempConvertArr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
|
|
||||||
terrainRenderer.Initialise(m_scene, m_config);
|
terrainRenderer.Initialise(m_scene, m_config);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height,
|
mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height,
|
||||||
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
|
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
|
||||||
//long t = System.Environment.TickCount;
|
//long t = System.Environment.TickCount;
|
||||||
|
@ -113,17 +112,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
//}
|
//}
|
||||||
//t = System.Environment.TickCount - t;
|
//t = System.Environment.TickCount - t;
|
||||||
//m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t);
|
//m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t);
|
||||||
=======
|
|
||||||
mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height,
|
|
||||||
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
|
|
||||||
//long t = System.Environment.TickCount;
|
|
||||||
//for (int i = 0; i < 10; ++i) {
|
|
||||||
terrainRenderer.TerrainToBitmap(mapbmp);
|
|
||||||
//}
|
|
||||||
//t = System.Environment.TickCount - t;
|
|
||||||
//m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (drawPrimVolume)
|
if (drawPrimVolume)
|
||||||
{
|
{
|
||||||
DrawObjectVolume(m_scene, mapbmp);
|
DrawObjectVolume(m_scene, mapbmp);
|
||||||
|
|
|
@ -270,14 +270,8 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
|
|
||||||
// the heigthfield might have some jumps in values. Rendered land is smooth, though,
|
// the heigthfield might have some jumps in values. Rendered land is smooth, though,
|
||||||
// as a slope is rendered at that place. So average 4 neighbour values to emulate that.
|
// as a slope is rendered at that place. So average 4 neighbour values to emulate that.
|
||||||
<<<<<<< HEAD
|
|
||||||
private float getHeight(ITerrainChannel hm, int x, int y) {
|
private float getHeight(ITerrainChannel hm, int x, int y) {
|
||||||
if (x < (hm.Width - 1) && y < (hm.Height - 1))
|
if (x < (hm.Width - 1) && y < (hm.Height - 1))
|
||||||
=======
|
|
||||||
private float getHeight(ITerrainChannel hm, int x, int y)
|
|
||||||
{
|
|
||||||
if (x < ((int)Constants.RegionSize - 1) && y < ((int)Constants.RegionSize - 1))
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
return (float)(hm[x, y] * .444 + (hm[x + 1, y] + hm[x, y + 1]) * .222 + hm[x + 1, y +1] * .112);
|
return (float)(hm[x, y] * .444 + (hm[x + 1, y] + hm[x, y + 1]) * .222 + hm[x + 1, y +1] * .112);
|
||||||
else
|
else
|
||||||
return (float)hm[x, y];
|
return (float)hm[x, y];
|
||||||
|
@ -291,14 +285,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
|
|
||||||
ITerrainChannel hm = m_scene.Heightmap;
|
ITerrainChannel hm = m_scene.Heightmap;
|
||||||
|
|
||||||
if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>",
|
|
||||||
LogHeader, mapbmp.Width, mapbmp.Height, hm.Width, hm.Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
ITerrainChannel hm = m_scene.Heightmap;
|
|
||||||
|
|
||||||
if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height)
|
if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>",
|
m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>",
|
||||||
|
|
|
@ -46,10 +46,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FloodBrushes
|
||||||
if (fillArea[x, y])
|
if (fillArea[x, y])
|
||||||
{
|
{
|
||||||
double noise = TerrainUtil.PerlinNoise2D((double) x / map.Width, (double) y / map.Height, 8, 1.0);
|
double noise = TerrainUtil.PerlinNoise2D((double) x / map.Width, (double) y / map.Height, 8, 1.0);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
map[x, y] += noise * strength;
|
map[x, y] += noise * strength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,15 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
#pragma warning disable 414
|
|
||||||
private static readonly string LogHeader = "[TERRAIN MODULE]";
|
|
||||||
#pragma warning restore 414
|
|
||||||
|
|
||||||
private readonly Commander m_commander = new Commander("terrain");
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
#pragma warning disable 414
|
#pragma warning disable 414
|
||||||
private static readonly string LogHeader = "[TERRAIN MODULE]";
|
private static readonly string LogHeader = "[TERRAIN MODULE]";
|
||||||
|
@ -95,16 +86,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private readonly Dictionary<string, ITerrainLoader> m_loaders = new Dictionary<string, ITerrainLoader>();
|
private readonly Dictionary<string, ITerrainLoader> m_loaders = new Dictionary<string, ITerrainLoader>();
|
||||||
private readonly Dictionary<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects =
|
private readonly Dictionary<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects =
|
||||||
new Dictionary<StandardTerrainEffects, ITerrainPaintableEffect>();
|
new Dictionary<StandardTerrainEffects, ITerrainPaintableEffect>();
|
||||||
<<<<<<< HEAD
|
|
||||||
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
|
||||||
private Dictionary<string, ITerrainModifier> m_modifyOperations =
|
|
||||||
new Dictionary<string, ITerrainModifier>();
|
|
||||||
private ITerrainChannel m_channel;
|
|
||||||
private ITerrainChannel m_revert;
|
|
||||||
private Scene m_scene;
|
|
||||||
private volatile bool m_tainted;
|
|
||||||
private readonly Stack<LandUndoState> m_undo = new Stack<LandUndoState>(5);
|
|
||||||
=======
|
|
||||||
|
|
||||||
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
||||||
private ITerrainChannel m_channel;
|
private ITerrainChannel m_channel;
|
||||||
|
@ -112,7 +93,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private volatile bool m_tainted;
|
private volatile bool m_tainted;
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
private String m_InitialTerrain = "pinhead-island";
|
private String m_InitialTerrain = "pinhead-island";
|
||||||
|
|
||||||
// If true, send terrain patch updates to clients based on their view distance
|
// If true, send terrain patch updates to clients based on their view distance
|
||||||
|
@ -126,19 +106,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private bool[,] updated; // for each patch, whether it needs to be sent to this client
|
private bool[,] updated; // for each patch, whether it needs to be sent to this client
|
||||||
private int updateCount; // number of patches that need to be sent
|
private int updateCount; // number of patches that need to be sent
|
||||||
public ScenePresence Presence; // a reference to the client to send to
|
public ScenePresence Presence; // a reference to the client to send to
|
||||||
<<<<<<< HEAD
|
|
||||||
public TerrainData Terrain; // reference to the underlying terrain
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public PatchUpdates(TerrainData terrData, ScenePresence pPresence)
|
public PatchUpdates(TerrainData terrData, ScenePresence pPresence)
|
||||||
{
|
{
|
||||||
updated = new bool[terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize];
|
updated = new bool[terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize];
|
||||||
updateCount = 0;
|
updateCount = 0;
|
||||||
Presence = pPresence;
|
Presence = pPresence;
|
||||||
<<<<<<< HEAD
|
|
||||||
Terrain = terrData;
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// Initially, send all patches to the client
|
// Initially, send all patches to the client
|
||||||
SetAll(true);
|
SetAll(true);
|
||||||
}
|
}
|
||||||
|
@ -147,26 +120,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
return (updateCount > 0);
|
return (updateCount > 0);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public void SetByXY(int x, int y, bool state)
|
public void SetByXY(int x, int y, bool state)
|
||||||
{
|
{
|
||||||
this.SetByPatch(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, state);
|
this.SetByPatch(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, state);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public bool GetByPatch(int patchX, int patchY)
|
public bool GetByPatch(int patchX, int patchY)
|
||||||
{
|
{
|
||||||
return updated[patchX, patchY];
|
return updated[patchX, patchY];
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public void SetByPatch(int patchX, int patchY, bool state)
|
public void SetByPatch(int patchX, int patchY, bool state)
|
||||||
{
|
{
|
||||||
bool prevState = updated[patchX, patchY];
|
bool prevState = updated[patchX, patchY];
|
||||||
|
@ -176,24 +140,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
updateCount--;
|
updateCount--;
|
||||||
updated[patchX, patchY] = state;
|
updated[patchX, patchY] = state;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
public void SetAll(bool state)
|
|
||||||
{
|
|
||||||
updateCount = 0;
|
|
||||||
for(int xx = 0; xx < updated.GetLength(0); xx++)
|
|
||||||
for(int yy = 0; yy < updated.GetLength(1); yy++)
|
|
||||||
=======
|
|
||||||
public void SetAll(bool state)
|
public void SetAll(bool state)
|
||||||
{
|
{
|
||||||
updateCount = 0;
|
updateCount = 0;
|
||||||
for (int xx = 0; xx < updated.GetLength(0); xx++)
|
for (int xx = 0; xx < updated.GetLength(0); xx++)
|
||||||
for (int yy = 0; yy < updated.GetLength(1); yy++)
|
for (int yy = 0; yy < updated.GetLength(1); yy++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
updated[xx, yy] = state;
|
updated[xx, yy] = state;
|
||||||
if (state)
|
if (state)
|
||||||
updateCount = updated.GetLength(0) * updated.GetLength(1);
|
updateCount = updated.GetLength(0) * updated.GetLength(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logically OR's the terrain data's patch taint map into this client's update map.
|
// Logically OR's the terrain data's patch taint map into this client's update map.
|
||||||
public void SetAll(TerrainData terrData)
|
public void SetAll(TerrainData terrData)
|
||||||
{
|
{
|
||||||
|
@ -206,15 +163,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize)
|
terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
for(int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize)
|
|
||||||
{
|
|
||||||
for(int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize)
|
|
||||||
=======
|
|
||||||
for (int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize)
|
for (int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize)
|
||||||
{
|
{
|
||||||
for (int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize)
|
for (int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
// Only set tainted. The patch bit may be set if the patch was to be sent later.
|
// Only set tainted. The patch bit may be set if the patch was to be sent later.
|
||||||
if (terrData.IsTaintedAt(xx, yy, false))
|
if (terrData.IsTaintedAt(xx, yy, false))
|
||||||
|
@ -275,20 +227,13 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
(int)m_scene.RegionInfo.RegionSizeY,
|
(int)m_scene.RegionInfo.RegionSizeY,
|
||||||
(int)m_scene.RegionInfo.RegionSizeZ);
|
(int)m_scene.RegionInfo.RegionSizeZ);
|
||||||
m_scene.Heightmap = m_channel;
|
m_scene.Heightmap = m_channel;
|
||||||
<<<<<<< HEAD
|
|
||||||
UpdateRevertMap();
|
|
||||||
=======
|
|
||||||
UpdateBakedMap();
|
UpdateBakedMap();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_channel = m_scene.Heightmap;
|
m_channel = m_scene.Heightmap;
|
||||||
<<<<<<< HEAD
|
|
||||||
UpdateRevertMap();
|
|
||||||
=======
|
|
||||||
UpdateBakedMap();
|
UpdateBakedMap();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_scene.RegisterModuleInterface<ITerrainModule>(this);
|
m_scene.RegisterModuleInterface<ITerrainModule>(this);
|
||||||
|
@ -296,11 +241,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed;
|
m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed;
|
||||||
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
||||||
m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick;
|
m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick;
|
||||||
<<<<<<< HEAD
|
|
||||||
m_scene.EventManager.OnFrame += EventManager_OnFrame;
|
|
||||||
=======
|
|
||||||
m_scene.EventManager.OnTerrainCheckUpdates += EventManager_TerrainCheckUpdates;
|
m_scene.EventManager.OnTerrainCheckUpdates += EventManager_TerrainCheckUpdates;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InstallDefaultEffects();
|
InstallDefaultEffects();
|
||||||
|
@ -339,11 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
// remove the commands
|
// remove the commands
|
||||||
m_scene.UnregisterModuleCommander(m_commander.Name);
|
m_scene.UnregisterModuleCommander(m_commander.Name);
|
||||||
// remove the event-handlers
|
// remove the event-handlers
|
||||||
<<<<<<< HEAD
|
|
||||||
m_scene.EventManager.OnFrame -= EventManager_OnFrame;
|
|
||||||
=======
|
|
||||||
m_scene.EventManager.OnTerrainCheckUpdates -= EventManager_TerrainCheckUpdates;
|
m_scene.EventManager.OnTerrainCheckUpdates -= EventManager_TerrainCheckUpdates;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_scene.EventManager.OnTerrainTick -= EventManager_OnTerrainTick;
|
m_scene.EventManager.OnTerrainTick -= EventManager_OnTerrainTick;
|
||||||
m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole;
|
m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole;
|
||||||
m_scene.EventManager.OnClientClosed -= EventManager_OnClientClosed;
|
m_scene.EventManager.OnClientClosed -= EventManager_OnClientClosed;
|
||||||
|
@ -490,11 +428,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
ITerrainChannel channel = loader.Value.LoadStream(stream);
|
ITerrainChannel channel = loader.Value.LoadStream(stream);
|
||||||
m_channel.Merge(channel, displacement, radianRotation, rotationDisplacement);
|
m_channel.Merge(channel, displacement, radianRotation, rotationDisplacement);
|
||||||
<<<<<<< HEAD
|
|
||||||
UpdateRevertMap();
|
|
||||||
=======
|
|
||||||
UpdateBakedMap();
|
UpdateBakedMap();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
catch(NotImplementedException)
|
catch(NotImplementedException)
|
||||||
{
|
{
|
||||||
|
@ -574,27 +508,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
// Someone diddled terrain outside the normal code paths. Set the taintedness for all clients.
|
// Someone diddled terrain outside the normal code paths. Set the taintedness for all clients.
|
||||||
// ITerrainModule.TaintTerrain()
|
// ITerrainModule.TaintTerrain()
|
||||||
<<<<<<< HEAD
|
|
||||||
public void TaintTerrain()
|
|
||||||
{
|
|
||||||
lock(m_perClientPatchUpdates)
|
|
||||||
{
|
|
||||||
// Set the flags for all clients so the tainted patches will be sent out
|
|
||||||
foreach(PatchUpdates pups in m_perClientPatchUpdates.Values)
|
|
||||||
=======
|
|
||||||
public void TaintTerrain ()
|
public void TaintTerrain ()
|
||||||
{
|
{
|
||||||
lock (m_perClientPatchUpdates)
|
lock (m_perClientPatchUpdates)
|
||||||
{
|
{
|
||||||
// Set the flags for all clients so the tainted patches will be sent out
|
// Set the flags for all clients so the tainted patches will be sent out
|
||||||
foreach (PatchUpdates pups in m_perClientPatchUpdates.Values)
|
foreach (PatchUpdates pups in m_perClientPatchUpdates.Values)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
pups.SetAll(m_scene.Heightmap.GetTerrainData());
|
pups.SetAll(m_scene.Heightmap.GetTerrainData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ITerrainModule.PushTerrain()
|
// ITerrainModule.PushTerrain()
|
||||||
|
@ -615,38 +538,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
pups.SetAll(true);
|
pups.SetAll(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ITerrainModule.PushTerrain()
|
|
||||||
public void PushTerrain(IClientAPI pClient)
|
|
||||||
{
|
|
||||||
// If view distance based, set the modified patch bits and the frame event will send the updates
|
|
||||||
if (m_sendTerrainUpdatesByViewDistance)
|
|
||||||
{
|
|
||||||
ScenePresence presence = m_scene.GetScenePresence(pClient.AgentId);
|
|
||||||
if (presence != null)
|
|
||||||
{
|
|
||||||
lock(m_perClientPatchUpdates)
|
|
||||||
{
|
|
||||||
PatchUpdates pups;
|
|
||||||
if (!m_perClientPatchUpdates.TryGetValue(pClient.AgentId, out pups))
|
|
||||||
{
|
|
||||||
// There is a ScenePresence without a send patch map. Create one.
|
|
||||||
pups = new PatchUpdates(m_scene.Heightmap.GetTerrainData(), presence);
|
|
||||||
m_perClientPatchUpdates.Add(presence.UUID, pups);
|
|
||||||
}
|
|
||||||
// By setting all to modified, the next update tick will send the patches
|
|
||||||
pups.SetAll(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The traditional way is to call into the protocol stack to send them all.
|
|
||||||
pClient.SendLayerData(new float[10]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#region Plugin Loading Methods
|
#region Plugin Loading Methods
|
||||||
|
|
||||||
private void LoadPlugins()
|
private void LoadPlugins()
|
||||||
|
@ -750,6 +643,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
||||||
|
|
||||||
// Terrain Modifier operations
|
// Terrain Modifier operations
|
||||||
|
/*
|
||||||
m_modifyOperations["min"] = new MinModifier(this);
|
m_modifyOperations["min"] = new MinModifier(this);
|
||||||
m_modifyOperations["max"] = new MaxModifier(this);
|
m_modifyOperations["max"] = new MaxModifier(this);
|
||||||
m_modifyOperations["raise"] = new RaiseModifier(this);
|
m_modifyOperations["raise"] = new RaiseModifier(this);
|
||||||
|
@ -757,7 +651,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
m_modifyOperations["fill"] = new FillModifier(this);
|
m_modifyOperations["fill"] = new FillModifier(this);
|
||||||
m_modifyOperations["smooth"] = new SmoothModifier(this);
|
m_modifyOperations["smooth"] = new SmoothModifier(this);
|
||||||
m_modifyOperations["noise"] = new NoiseModifier(this);
|
m_modifyOperations["noise"] = new NoiseModifier(this);
|
||||||
|
*/
|
||||||
// Filesystem load/save loaders
|
// Filesystem load/save loaders
|
||||||
m_loaders[".r32"] = new RAW32();
|
m_loaders[".r32"] = new RAW32();
|
||||||
m_loaders[".f32"] = m_loaders[".r32"];
|
m_loaders[".f32"] = m_loaders[".r32"];
|
||||||
|
@ -778,24 +672,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateBakedMap()
|
public void UpdateBakedMap()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
/*
|
|
||||||
int x;
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
|
||||||
{
|
|
||||||
int y;
|
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
|
||||||
{
|
|
||||||
m_revert[x, y] = m_channel[x, y];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
m_revert = m_channel.MakeCopy();
|
|
||||||
=======
|
|
||||||
m_baked = m_channel.MakeCopy();
|
m_baked = m_channel.MakeCopy();
|
||||||
m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked);
|
m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked);
|
||||||
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -822,13 +701,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY,
|
ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY,
|
||||||
fileWidth, fileHeight,
|
fileWidth, fileHeight,
|
||||||
<<<<<<< HEAD
|
|
||||||
(int)m_scene.RegionInfo.RegionSizeX,
|
|
||||||
(int)m_scene.RegionInfo.RegionSizeY);
|
|
||||||
=======
|
|
||||||
(int) m_scene.RegionInfo.RegionSizeX,
|
(int) m_scene.RegionInfo.RegionSizeX,
|
||||||
(int) m_scene.RegionInfo.RegionSizeY);
|
(int) m_scene.RegionInfo.RegionSizeY);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_scene.Heightmap = channel;
|
m_scene.Heightmap = channel;
|
||||||
m_channel = channel;
|
m_channel = channel;
|
||||||
UpdateBakedMap();
|
UpdateBakedMap();
|
||||||
|
@ -894,27 +768,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
/// Called before processing of every simulation frame.
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
/// This is used to check to see of any of the terrain is tainted and, if so, schedule
|
/// This is used to check to see of any of the terrain is tainted and, if so, schedule
|
||||||
/// updates for all the presences.
|
/// updates for all the presences.
|
||||||
/// This also checks to see if there are updates that need to be sent for each presence.
|
/// This also checks to see if there are updates that need to be sent for each presence.
|
||||||
/// This is where the logic is to send terrain updates to clients.
|
/// This is where the logic is to send terrain updates to clients.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
private void EventManager_OnFrame()
|
|
||||||
{
|
|
||||||
TerrainData terrData = m_channel.GetTerrainData();
|
|
||||||
|
|
||||||
bool shouldTaint = false;
|
|
||||||
for(int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize)
|
|
||||||
{
|
|
||||||
for(int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
|
||||||
{
|
|
||||||
if (terrData.IsTaintedAt(x, y))
|
|
||||||
=======
|
|
||||||
private void EventManager_TerrainCheckUpdates()
|
private void EventManager_TerrainCheckUpdates()
|
||||||
{
|
{
|
||||||
// this needs fixing
|
// this needs fixing
|
||||||
|
@ -926,7 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
||||||
{
|
{
|
||||||
if (terrData.IsTaintedAt(x, y,true))
|
if (terrData.IsTaintedAt(x, y,true))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
// Found a patch that was modified. Push this flag into the clients.
|
// Found a patch that was modified. Push this flag into the clients.
|
||||||
SendToClients(terrData, x, y);
|
SendToClients(terrData, x, y);
|
||||||
|
@ -944,10 +801,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
m_scene.EventManager.TriggerTerrainTainted();
|
m_scene.EventManager.TriggerTerrainTainted();
|
||||||
m_tainted = true;
|
m_tainted = true;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1016,14 +869,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
presence.ControllingClient.OnLandUndo -= client_OnLandUndo;
|
presence.ControllingClient.OnLandUndo -= client_OnLandUndo;
|
||||||
presence.ControllingClient.OnUnackedTerrain -= client_OnUnackedTerrain;
|
presence.ControllingClient.OnUnackedTerrain -= client_OnUnackedTerrain;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
lock(m_perClientPatchUpdates)
|
|
||||||
m_perClientPatchUpdates.Remove(client);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
lock (m_perClientPatchUpdates)
|
lock (m_perClientPatchUpdates)
|
||||||
m_perClientPatchUpdates.Remove(client);
|
m_perClientPatchUpdates.Remove(client);
|
||||||
}
|
}
|
||||||
|
@ -1038,21 +883,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
TerrainData terrData = m_channel.GetTerrainData();
|
TerrainData terrData = m_channel.GetTerrainData();
|
||||||
|
|
||||||
bool wasLimited = false;
|
bool wasLimited = false;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize)
|
|
||||||
{
|
|
||||||
for(int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
|
||||||
{
|
|
||||||
if (terrData.IsTaintedAt(x, y, false /* clearOnTest */))
|
|
||||||
{
|
|
||||||
=======
|
|
||||||
for (int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize)
|
for (int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
||||||
{
|
{
|
||||||
if (terrData.IsTaintedAt(x, y, false /* clearOnTest */))
|
if (terrData.IsTaintedAt(x, y, false /* clearOnTest */))
|
||||||
{
|
{
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// If we should respect the estate settings then
|
// If we should respect the estate settings then
|
||||||
// fixup and height deltas that don't respect them.
|
// fixup and height deltas that don't respect them.
|
||||||
// Note that LimitChannelChanges() modifies the TerrainChannel with the limited height values.
|
// Note that LimitChannelChanges() modifies the TerrainChannel with the limited height values.
|
||||||
|
@ -1075,22 +911,13 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
float maxDelta = (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit;
|
float maxDelta = (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit;
|
||||||
|
|
||||||
// loop through the height map for this patch and compare it against
|
// loop through the height map for this patch and compare it against
|
||||||
<<<<<<< HEAD
|
|
||||||
// the revert map
|
|
||||||
for(int x = xStart; x < xStart + Constants.TerrainPatchSize; x++)
|
|
||||||
=======
|
|
||||||
// the baked map
|
// the baked map
|
||||||
for (int x = xStart; x < xStart + Constants.TerrainPatchSize; x++)
|
for (int x = xStart; x < xStart + Constants.TerrainPatchSize; x++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
for(int y = yStart; y < yStart + Constants.TerrainPatchSize; y++)
|
for(int y = yStart; y < yStart + Constants.TerrainPatchSize; y++)
|
||||||
{
|
{
|
||||||
float requestedHeight = terrData[x, y];
|
float requestedHeight = terrData[x, y];
|
||||||
<<<<<<< HEAD
|
|
||||||
float bakedHeight = (float)m_revert[x, y];
|
|
||||||
=======
|
|
||||||
float bakedHeight = (float)m_baked[x, y];
|
float bakedHeight = (float)m_baked[x, y];
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
float requestedDelta = requestedHeight - bakedHeight;
|
float requestedDelta = requestedHeight - bakedHeight;
|
||||||
|
|
||||||
if (requestedDelta > maxDelta)
|
if (requestedDelta > maxDelta)
|
||||||
|
@ -1111,19 +938,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
private void client_OnLandUndo(IClientAPI client)
|
private void client_OnLandUndo(IClientAPI client)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
lock(m_undo)
|
|
||||||
{
|
|
||||||
if (m_undo.Count > 0)
|
|
||||||
{
|
|
||||||
LandUndoState goback = m_undo.Pop();
|
|
||||||
if (goback != null)
|
|
||||||
goback.PlaybackState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1133,175 +947,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
/// <param name="x">The patch corner to send</param>
|
/// <param name="x">The patch corner to send</param>
|
||||||
/// <param name="y">The patch corner to send</param>
|
/// <param name="y">The patch corner to send</param>
|
||||||
private void SendToClients(TerrainData terrData, int x, int y)
|
private void SendToClients(TerrainData terrData, int x, int y)
|
||||||
<<<<<<< HEAD
|
|
||||||
{
|
|
||||||
if (m_sendTerrainUpdatesByViewDistance)
|
|
||||||
{
|
|
||||||
// Add that this patch needs to be sent to the accounting for each client.
|
|
||||||
lock(m_perClientPatchUpdates)
|
|
||||||
{
|
|
||||||
m_scene.ForEachScenePresence(presence =>
|
|
||||||
{
|
|
||||||
PatchUpdates thisClientUpdates;
|
|
||||||
if (!m_perClientPatchUpdates.TryGetValue(presence.UUID, out thisClientUpdates))
|
|
||||||
{
|
|
||||||
// There is a ScenePresence without a send patch map. Create one.
|
|
||||||
thisClientUpdates = new PatchUpdates(terrData, presence);
|
|
||||||
m_perClientPatchUpdates.Add(presence.UUID, thisClientUpdates);
|
|
||||||
}
|
|
||||||
thisClientUpdates.SetByXY(x, y, true);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Legacy update sending where the update is sent out as soon as noticed
|
|
||||||
// We know the actual terrain data that is passed is ignored so this passes a dummy heightmap.
|
|
||||||
//float[] heightMap = terrData.GetFloatsSerialized();
|
|
||||||
float[] heightMap = new float[10];
|
|
||||||
m_scene.ForEachClient(
|
|
||||||
delegate(IClientAPI controller)
|
|
||||||
{
|
|
||||||
controller.SendLayerData(x / Constants.TerrainPatchSize,
|
|
||||||
y / Constants.TerrainPatchSize,
|
|
||||||
heightMap);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PatchesToSend : IComparable<PatchesToSend>
|
|
||||||
{
|
|
||||||
public int PatchX;
|
|
||||||
public int PatchY;
|
|
||||||
public float Dist;
|
|
||||||
|
|
||||||
public PatchesToSend(int pX, int pY, float pDist)
|
|
||||||
{
|
|
||||||
PatchX = pX;
|
|
||||||
PatchY = pY;
|
|
||||||
Dist = pDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int CompareTo(PatchesToSend other)
|
|
||||||
{
|
|
||||||
return Dist.CompareTo(other.Dist);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Called each frame time to see if there are any patches to send to any of the
|
|
||||||
// ScenePresences.
|
|
||||||
// We know this is only called if we are doing view distance patch sending so some
|
|
||||||
// tests are not made.
|
|
||||||
// Loop through all the per-client info and send any patches necessary.
|
|
||||||
private void CheckSendingPatchesToClients()
|
|
||||||
{
|
|
||||||
lock(m_perClientPatchUpdates)
|
|
||||||
{
|
|
||||||
foreach(PatchUpdates pups in m_perClientPatchUpdates.Values)
|
|
||||||
{
|
|
||||||
if (pups.HasUpdates())
|
|
||||||
{
|
|
||||||
// There is something that could be sent to this client.
|
|
||||||
List<PatchesToSend> toSend = GetModifiedPatchesInViewDistance(pups);
|
|
||||||
if (toSend.Count > 0)
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("{0} CheckSendingPatchesToClient: sending {1} patches to {2} in region {3}",
|
|
||||||
// LogHeader, toSend.Count, pups.Presence.Name, m_scene.RegionInfo.RegionName);
|
|
||||||
// Sort the patches to send by the distance from the presence
|
|
||||||
toSend.Sort();
|
|
||||||
/* old way that sent individual patches
|
|
||||||
foreach (PatchesToSend pts in toSend)
|
|
||||||
{
|
|
||||||
pups.Presence.ControllingClient.SendLayerData(pts.PatchX, pts.PatchY, null);
|
|
||||||
// presence.ControllingClient.SendLayerData(xs.ToArray(), ys.ToArray(), null, TerrainPatch.LayerType.Land);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// new way that sends all patches to the protocol so they can be sent in one block
|
|
||||||
int[] xPieces = new int[toSend.Count];
|
|
||||||
int[] yPieces = new int[toSend.Count];
|
|
||||||
float[] patchPieces = new float[toSend.Count * 2];
|
|
||||||
int pieceIndex = 0;
|
|
||||||
foreach(PatchesToSend pts in toSend)
|
|
||||||
{
|
|
||||||
patchPieces[pieceIndex++] = pts.PatchX;
|
|
||||||
patchPieces[pieceIndex++] = pts.PatchY;
|
|
||||||
}
|
|
||||||
pups.Presence.ControllingClient.SendLayerData(-toSend.Count, 0, patchPieces);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute a list of modified patches that are within our view distance.
|
|
||||||
private List<PatchesToSend> GetModifiedPatchesInViewDistance(PatchUpdates pups)
|
|
||||||
{
|
|
||||||
List<PatchesToSend> ret = new List<PatchesToSend>();
|
|
||||||
|
|
||||||
ScenePresence presence = pups.Presence;
|
|
||||||
if (presence == null)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
Vector3 presencePos = presence.AbsolutePosition;
|
|
||||||
|
|
||||||
// Before this distance check, the whole region just showed up. Adding the distance
|
|
||||||
// check causes different things to happen for the current and adjacent regions.
|
|
||||||
// So, to keep legacy views, if the region is legacy sized, don't do distance check.
|
|
||||||
bool isLegacySizedRegion = pups.Terrain.SizeX == Constants.RegionSize && pups.Terrain.SizeY == Constants.RegionSize;
|
|
||||||
bool shouldCheckViewDistance = m_sendTerrainUpdatesByViewDistance && !isLegacySizedRegion;
|
|
||||||
|
|
||||||
int startX = 0;
|
|
||||||
int endX = (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize;
|
|
||||||
int startY = 0;
|
|
||||||
int endY = (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize;
|
|
||||||
|
|
||||||
// The following only reduces the size of area scanned for updates. Only significant for very large varregions.
|
|
||||||
if (shouldCheckViewDistance)
|
|
||||||
{
|
|
||||||
// Compute the area of patches within our draw distance
|
|
||||||
startX = (((int)(presencePos.X - presence.DrawDistance)) / Constants.TerrainPatchSize) - 2;
|
|
||||||
startX = Math.Max(startX, 0);
|
|
||||||
startX = Math.Min(startX, (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize);
|
|
||||||
startY = (((int)(presencePos.Y - presence.DrawDistance)) / Constants.TerrainPatchSize) - 2;
|
|
||||||
startY = Math.Max(startY, 0);
|
|
||||||
startY = Math.Min(startY, (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize);
|
|
||||||
endX = (((int)(presencePos.X + presence.DrawDistance)) / Constants.TerrainPatchSize) + 2;
|
|
||||||
endX = Math.Max(endX, 0);
|
|
||||||
endX = Math.Min(endX, (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize);
|
|
||||||
endY = (((int)(presencePos.Y + presence.DrawDistance)) / Constants.TerrainPatchSize) + 2;
|
|
||||||
endY = Math.Max(endY, 0);
|
|
||||||
endY = Math.Min(endY, (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
// m_log.DebugFormat("{0} GetModifiedPatchesInViewDistance. rName={1}, ddist={2}, apos={3}, cpos={4}, isChild={5}, start=<{6},{7}>, end=<{8},{9}>",
|
|
||||||
// LogHeader, m_scene.RegionInfo.RegionName,
|
|
||||||
// presence.DrawDistance, presencePos, presence.CameraPosition,
|
|
||||||
// isLegacySizeChildRegion,
|
|
||||||
// startX, startY, endX, endY);
|
|
||||||
for(int x = startX; x < endX; x++)
|
|
||||||
{
|
|
||||||
for(int y = startY; y < endY; y++)
|
|
||||||
{
|
|
||||||
//Need to make sure we don't send the same ones over and over
|
|
||||||
Vector3 patchPos = new Vector3(x * Constants.TerrainPatchSize, y * Constants.TerrainPatchSize, presencePos.Z);
|
|
||||||
if (pups.GetByPatch(x, y))
|
|
||||||
{
|
|
||||||
//Check which has less distance, camera or avatar position, both have to be done.
|
|
||||||
//Its not a radius, its a diameter and we add 50 so that it doesn't look like it cuts off
|
|
||||||
if (!shouldCheckViewDistance
|
|
||||||
|| Util.DistanceLessThan(presencePos, patchPos, presence.DrawDistance + 50)
|
|
||||||
|| Util.DistanceLessThan(presence.CameraPosition, patchPos, presence.DrawDistance + 50))
|
|
||||||
{
|
|
||||||
//They can see it, send it to them
|
|
||||||
pups.SetByPatch(x, y, false);
|
|
||||||
float dist = Vector3.DistanceSquared(presencePos, patchPos);
|
|
||||||
ret.Add(new PatchesToSend(x, y, dist));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
{
|
{
|
||||||
// Add that this patch needs to be sent to the accounting for each client.
|
// Add that this patch needs to be sent to the accounting for each client.
|
||||||
lock (m_perClientPatchUpdates)
|
lock (m_perClientPatchUpdates)
|
||||||
|
@ -1475,7 +1120,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1499,24 +1143,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
int zx = (int)(west + 0.5);
|
int zx = (int)(west + 0.5);
|
||||||
int zy = (int)(north + 0.5);
|
int zy = (int)(north + 0.5);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
int dx;
|
|
||||||
for(dx=-n; dx<=n; dx++)
|
|
||||||
{
|
|
||||||
int dy;
|
|
||||||
for(dy=-n; dy<=n; dy++)
|
|
||||||
{
|
|
||||||
int x = zx + dx;
|
|
||||||
int y = zy + dy;
|
|
||||||
if (x >= 0 && y >= 0 && x < m_channel.Width && y < m_channel.Height)
|
|
||||||
{
|
|
||||||
if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0)))
|
|
||||||
{
|
|
||||||
allowMask[x, y] = true;
|
|
||||||
allowed = true;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
|
|
||||||
int startX = zx - n;
|
int startX = zx - n;
|
||||||
if (startX < 0)
|
if (startX < 0)
|
||||||
startX = 0;
|
startX = 0;
|
||||||
|
@ -1542,25 +1168,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
allowMask[x, y] = true;
|
allowMask[x, y] = true;
|
||||||
allowed = true;
|
allowed = true;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (allowed)
|
if (allowed)
|
||||||
{
|
{
|
||||||
StoreUndoState();
|
StoreUndoState();
|
||||||
<<<<<<< HEAD
|
|
||||||
m_painteffects[(StandardTerrainEffects)action].PaintEffect(
|
|
||||||
m_channel, allowMask, west, south, height, size, seconds);
|
|
||||||
|
|
||||||
//revert changes outside estate limits
|
|
||||||
=======
|
|
||||||
m_painteffects[(StandardTerrainEffects) action].PaintEffect(
|
m_painteffects[(StandardTerrainEffects) action].PaintEffect(
|
||||||
m_channel, allowMask, west, south, height, size, seconds,
|
m_channel, allowMask, west, south, height, size, seconds,
|
||||||
startX, endX, startY, endY);
|
startX, endX, startY, endY);
|
||||||
|
|
||||||
//block changes outside estate limits
|
//block changes outside estate limits
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (!god)
|
if (!god)
|
||||||
EnforceEstateLimits();
|
EnforceEstateLimits();
|
||||||
}
|
}
|
||||||
|
@ -1577,15 +1195,37 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
bool[,] fillArea = new bool[m_channel.Width, m_channel.Height];
|
bool[,] fillArea = new bool[m_channel.Width, m_channel.Height];
|
||||||
fillArea.Initialize();
|
fillArea.Initialize();
|
||||||
|
|
||||||
int x;
|
int startX = (int)west;
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
int startY = (int)south;
|
||||||
|
int endX = (int)east;
|
||||||
|
int endY = (int)north;
|
||||||
|
|
||||||
|
if (startX < 0)
|
||||||
|
startX = 0;
|
||||||
|
else if (startX >= m_channel.Width)
|
||||||
|
startX = m_channel.Width - 1;
|
||||||
|
|
||||||
|
if (endX < 0)
|
||||||
|
endX = 0;
|
||||||
|
else if (endX >= m_channel.Width)
|
||||||
|
endX = m_channel.Width - 1;
|
||||||
|
|
||||||
|
if (startY < 0)
|
||||||
|
startY = 0;
|
||||||
|
else if (startY >= m_channel.Height)
|
||||||
|
startY = m_channel.Height - 1;
|
||||||
|
|
||||||
|
if (endY < 0)
|
||||||
|
endY = 0;
|
||||||
|
else if (endY >= m_channel.Height)
|
||||||
|
endY = m_channel.Height - 1;
|
||||||
|
|
||||||
|
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
for (x = startX; x <= endX; x++)
|
||||||
{
|
{
|
||||||
int y;
|
for (y = startY; y <= endY; y++)
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
{
|
|
||||||
if (x < east && x > west)
|
|
||||||
{
|
|
||||||
if (y < north && y > south)
|
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0)))
|
if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0)))
|
||||||
{
|
{
|
||||||
|
@ -1594,21 +1234,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allowed)
|
if (allowed)
|
||||||
{
|
{
|
||||||
StoreUndoState();
|
StoreUndoState();
|
||||||
<<<<<<< HEAD
|
m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size,
|
||||||
m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size);
|
startX, endX, startY, endY);
|
||||||
|
|
||||||
//revert changes outside estate limits
|
|
||||||
=======
|
|
||||||
m_floodeffects[(StandardTerrainEffects) action].FloodEffect(m_channel, fillArea, size);
|
|
||||||
|
|
||||||
//block changes outside estate limits
|
//block changes outside estate limits
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (!god)
|
if (!god)
|
||||||
EnforceEstateLimits();
|
EnforceEstateLimits();
|
||||||
}
|
}
|
||||||
|
@ -1641,52 +1274,22 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
private void StoreUndoState()
|
private void StoreUndoState()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
lock(m_undo)
|
|
||||||
{
|
|
||||||
if (m_undo.Count > 0)
|
|
||||||
{
|
|
||||||
LandUndoState last = m_undo.Peek();
|
|
||||||
if (last != null)
|
|
||||||
{
|
|
||||||
if (last.Compare(m_channel))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LandUndoState nUndo = new LandUndoState(this, m_channel);
|
|
||||||
m_undo.Push(nUndo);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Console Commands
|
#region Console Commands
|
||||||
|
|
||||||
private void InterfaceLoadFile(Object[] args)
|
private void InterfaceLoadFile(Object[] args)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
LoadFromFile((string)args[0]);
|
|
||||||
=======
|
|
||||||
LoadFromFile((string) args[0]);
|
LoadFromFile((string) args[0]);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceLoadTileFile(Object[] args)
|
private void InterfaceLoadTileFile(Object[] args)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
LoadFromFile((string)args[0],
|
|
||||||
(int)args[1],
|
|
||||||
(int)args[2],
|
|
||||||
(int)args[3],
|
|
||||||
(int)args[4]);
|
|
||||||
=======
|
|
||||||
LoadFromFile((string) args[0],
|
LoadFromFile((string) args[0],
|
||||||
(int) args[1],
|
(int) args[1],
|
||||||
(int) args[2],
|
(int) args[2],
|
||||||
(int) args[3],
|
(int) args[3],
|
||||||
(int) args[4]);
|
(int) args[4]);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceSaveFile(Object[] args)
|
private void InterfaceSaveFile(Object[] args)
|
||||||
|
@ -1711,15 +1314,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private void InterfaceRevertTerrain(Object[] args)
|
private void InterfaceRevertTerrain(Object[] args)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
m_channel[x, y] = m_revert[x, y];
|
|
||||||
=======
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
for (y = 0; y < m_channel.Height; y++)
|
||||||
m_channel[x, y] = m_baked[x, y];
|
m_channel[x, y] = m_baked[x, y];
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1729,15 +1326,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
if (direction.ToLower().StartsWith("y"))
|
if (direction.ToLower().StartsWith("y"))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
for(int x = 0; x < m_channel.Width; x++)
|
|
||||||
{
|
|
||||||
for(int y = 0; y < m_channel.Height / 2; y++)
|
|
||||||
=======
|
|
||||||
for (int x = 0; x < m_channel.Width; x++)
|
for (int x = 0; x < m_channel.Width; x++)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < m_channel.Height / 2; y++)
|
for (int y = 0; y < m_channel.Height / 2; y++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
double height = m_channel[x, y];
|
double height = m_channel[x, y];
|
||||||
double flippedHeight = m_channel[x, (int)m_channel.Height - 1 - y];
|
double flippedHeight = m_channel[x, (int)m_channel.Height - 1 - y];
|
||||||
|
@ -1749,15 +1340,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
else if (direction.ToLower().StartsWith("x"))
|
else if (direction.ToLower().StartsWith("x"))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
for(int y = 0; y < m_channel.Height; y++)
|
|
||||||
{
|
|
||||||
for(int x = 0; x < m_channel.Width / 2; x++)
|
|
||||||
=======
|
|
||||||
for (int y = 0; y < m_channel.Height; y++)
|
for (int y = 0; y < m_channel.Height; y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < m_channel.Width / 2; x++)
|
for (int x = 0; x < m_channel.Width / 2; x++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
double height = m_channel[x, y];
|
double height = m_channel[x, y];
|
||||||
double flippedHeight = m_channel[(int)m_channel.Width - 1 - x, y];
|
double flippedHeight = m_channel[(int)m_channel.Width - 1 - x, y];
|
||||||
|
@ -1837,47 +1422,29 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
m_channel[x, y] += (double)args[0];
|
|
||||||
=======
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
for (y = 0; y < m_channel.Height; y++)
|
||||||
m_channel[x, y] += val;
|
m_channel[x, y] += val;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceMultiplyTerrain(Object[] args)
|
private void InterfaceMultiplyTerrain(Object[] args)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
m_channel[x, y] *= (double)args[0];
|
|
||||||
=======
|
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
for (y = 0; y < m_channel.Height; y++)
|
||||||
m_channel[x, y] *= val;
|
m_channel[x, y] *= val;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceLowerTerrain(Object[] args)
|
private void InterfaceLowerTerrain(Object[] args)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
m_channel[x, y] -= (double)args[0];
|
|
||||||
=======
|
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
for (y = 0; y < m_channel.Height; y++)
|
||||||
m_channel[x, y] -= val;
|
m_channel[x, y] -= val;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InterfaceFillTerrain(Object[] args)
|
public void InterfaceFillTerrain(Object[] args)
|
||||||
|
@ -1885,26 +1452,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
int x, y;
|
int x, y;
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
|
||||||
m_channel[x, y] = (double)args[0];
|
|
||||||
=======
|
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
for (y = 0; y < m_channel.Height; y++)
|
for (y = 0; y < m_channel.Height; y++)
|
||||||
m_channel[x, y] = val;
|
m_channel[x, y] = val;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceMinTerrain(Object[] args)
|
private void InterfaceMinTerrain(Object[] args)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
=======
|
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
for(y = 0; y < m_channel.Height; y++)
|
||||||
{
|
{
|
||||||
|
@ -1916,19 +1473,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private void InterfaceMaxTerrain(Object[] args)
|
private void InterfaceMaxTerrain(Object[] args)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
<<<<<<< HEAD
|
|
||||||
for(x = 0; x < m_channel.Width; x++)
|
|
||||||
=======
|
|
||||||
double val = (double)args[0];
|
double val = (double)args[0];
|
||||||
for (x = 0; x < m_channel.Width; x++)
|
for (x = 0; x < m_channel.Width; x++)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
for(y = 0; y < m_channel.Height; y++)
|
for(y = 0; y < m_channel.Height; y++)
|
||||||
{
|
{
|
||||||
m_channel[x, y] = Math.Min(val, m_channel[x, y]);
|
m_channel[x, y] = Math.Min(val, m_channel[x, y]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceShow(Object[] args)
|
private void InterfaceShow(Object[] args)
|
||||||
|
@ -1944,8 +1496,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
double height = m_channel[(int)point.X, (int)point.Y];
|
double height = m_channel[(int)point.X, (int)point.Y];
|
||||||
|
|
||||||
Console.WriteLine("Terrain height at {0} is {1}", point, height);
|
Console.WriteLine("Terrain height at {0} is {1}", point, height);
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InterfaceShowDebugStats(Object[] args)
|
private void InterfaceShowDebugStats(Object[] args)
|
||||||
|
@ -2157,6 +1707,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
public void ModifyCommand(string module, string[] cmd)
|
public void ModifyCommand(string module, string[] cmd)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
string result;
|
string result;
|
||||||
Scene scene = SceneManager.Instance.CurrentScene;
|
Scene scene = SceneManager.Instance.CurrentScene;
|
||||||
if ((scene != null) && (scene != m_scene))
|
if ((scene != null) && (scene != m_scene))
|
||||||
|
@ -2196,6 +1747,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
MainConsole.Instance.Output(result);
|
MainConsole.Instance.Output(result);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -60,12 +60,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests
|
||||||
TerrainChannel map = new TerrainChannel((int)Constants.RegionSize, (int)Constants.RegionSize);
|
TerrainChannel map = new TerrainChannel((int)Constants.RegionSize, (int)Constants.RegionSize);
|
||||||
ITerrainPaintableEffect effect = new RaiseSphere();
|
ITerrainPaintableEffect effect = new RaiseSphere();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0);
|
|
||||||
=======
|
|
||||||
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0,
|
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0,
|
||||||
0, midRegion - 1,0, (int)Constants.RegionSize -1);
|
0, midRegion - 1,0, (int)Constants.RegionSize -1);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Assert.That(map[127, midRegion] > 0.0, "Raise brush should raising value at this point (127,128).");
|
Assert.That(map[127, midRegion] > 0.0, "Raise brush should raising value at this point (127,128).");
|
||||||
Assert.That(map[125, midRegion] > 0.0, "Raise brush should raising value at this point (124,128).");
|
Assert.That(map[125, midRegion] > 0.0, "Raise brush should raising value at this point (124,128).");
|
||||||
Assert.That(map[120, midRegion] == 0.0, "Raise brush should not change value at this point (120,128).");
|
Assert.That(map[120, midRegion] == 0.0, "Raise brush should not change value at this point (120,128).");
|
||||||
|
@ -84,12 +80,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests
|
||||||
}
|
}
|
||||||
effect = new LowerSphere();
|
effect = new LowerSphere();
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0);
|
|
||||||
=======
|
|
||||||
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0,
|
effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0,
|
||||||
0, (int)Constants.RegionSize -1,0, (int)Constants.RegionSize -1);
|
0, (int)Constants.RegionSize -1,0, (int)Constants.RegionSize -1);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
Assert.That(map[127, midRegion] >= 0.0, "Lower should not lowering value below 0.0 at this point (127,128).");
|
Assert.That(map[127, midRegion] >= 0.0, "Lower should not lowering value below 0.0 at this point (127,128).");
|
||||||
Assert.That(map[127, midRegion] == 0.0, "Lower brush should lowering value to 0.0 at this point (127,128).");
|
Assert.That(map[127, midRegion] == 0.0, "Lower brush should lowering value to 0.0 at this point (127,128).");
|
||||||
Assert.That(map[125, midRegion] < 1.0, "Lower brush should lowering value at this point (124,128).");
|
Assert.That(map[125, midRegion] < 1.0, "Lower brush should lowering value at this point (124,128).");
|
||||||
|
|
|
@ -79,13 +79,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
/// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting
|
/// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting
|
||||||
/// Note we create a 256x256 dimension texture even if the actual terrain is larger.
|
/// Note we create a 256x256 dimension texture even if the actual terrain is larger.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
<<<<<<< HEAD
|
|
||||||
public static Bitmap Splat(ITerrainChannel terrain,
|
public static Bitmap Splat(ITerrainChannel terrain,
|
||||||
UUID[] textureIDs, float[] startHeights, float[] heightRanges,
|
UUID[] textureIDs, float[] startHeights, float[] heightRanges,
|
||||||
Vector3d regionPosition, IAssetService assetService, bool textureTerrain)
|
Vector3d regionPosition, IAssetService assetService, bool textureTerrain)
|
||||||
=======
|
|
||||||
public static Bitmap Splat(ITerrainChannel terrain, UUID[] textureIDs, float[] startHeights, float[] heightRanges, Vector3d regionPosition, IAssetService assetService, bool textureTerrain)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
Debug.Assert(textureIDs.Length == 4);
|
Debug.Assert(textureIDs.Length == 4);
|
||||||
Debug.Assert(startHeights.Length == 4);
|
Debug.Assert(startHeights.Length == 4);
|
||||||
|
@ -133,8 +130,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
asset = assetService.Get(textureIDs[i].ToString());
|
asset = assetService.Get(textureIDs[i].ToString());
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID);
|
// "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID);
|
||||||
|
|
||||||
try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); }
|
try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); }
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -199,6 +196,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
using (SolidBrush brush = new SolidBrush(DEFAULT_TERRAIN_COLOR[i]))
|
using (SolidBrush brush = new SolidBrush(DEFAULT_TERRAIN_COLOR[i]))
|
||||||
gfx.FillRectangle(brush, 0, 0, 256, 256);
|
gfx.FillRectangle(brush, 0, 0, 256, 256);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256)
|
if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256)
|
||||||
|
@ -207,69 +205,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
else
|
|
||||||
=======
|
|
||||||
|
|
||||||
#region Layer Map
|
|
||||||
|
|
||||||
float[,] layermap = new float[256 , 256];
|
|
||||||
|
|
||||||
int xFactor = terrain.Width / 256;
|
|
||||||
int yFactor = terrain.Height / 256;
|
|
||||||
|
|
||||||
for (int y = 0; y < 256; y++)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
|
||||||
if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256)
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
detailTexture[i] = ResizeBitmap(detailTexture[i], 256, 256);
|
|
||||||
=======
|
|
||||||
float height = (float)terrain[x * xFactor, y * yFactor];
|
|
||||||
|
|
||||||
float pctX = (float)x / 255f;
|
|
||||||
float pctY = (float)y / 255f;
|
|
||||||
|
|
||||||
// Use bilinear interpolation between the four corners of start height and
|
|
||||||
// height range to select the current values at this position
|
|
||||||
float startHeight = ImageUtils.Bilinear(
|
|
||||||
startHeights[0],
|
|
||||||
startHeights[2],
|
|
||||||
startHeights[1],
|
|
||||||
startHeights[3],
|
|
||||||
pctX, pctY);
|
|
||||||
startHeight = Utils.Clamp(startHeight, 0f, 255f);
|
|
||||||
|
|
||||||
float heightRange = ImageUtils.Bilinear(
|
|
||||||
heightRanges[0],
|
|
||||||
heightRanges[2],
|
|
||||||
heightRanges[1],
|
|
||||||
heightRanges[3],
|
|
||||||
pctX, pctY);
|
|
||||||
heightRange = Utils.Clamp(heightRange, 0f, 255f);
|
|
||||||
|
|
||||||
// Generate two frequencies of perlin noise based on our global position
|
|
||||||
// The magic values were taken from http://opensimulator.org/wiki/Terrain_Splatting
|
|
||||||
Vector3 vec = new Vector3
|
|
||||||
(
|
|
||||||
((float)regionPosition.X + (x * xFactor)) * 0.20319f,
|
|
||||||
((float)regionPosition.Y + (y * yFactor)) * 0.20319f,
|
|
||||||
height * 0.25f
|
|
||||||
);
|
|
||||||
|
|
||||||
float lowFreq = Perlin.noise2(vec.X * 0.222222f, vec.Y * 0.222222f) * 6.5f;
|
|
||||||
float highFreq = Perlin.turbulence2(vec.X, vec.Y, 2f) * 2.25f;
|
|
||||||
float noise = (lowFreq + highFreq) * 2f;
|
|
||||||
|
|
||||||
// Combine the current height, generated noise, start height, and height range parameters, then scale all of it
|
|
||||||
float layer = ((height + noise - startHeight) / heightRange) * 4f;
|
|
||||||
if (Single.IsNaN(layer)) layer = 0f;
|
|
||||||
layermap[x,y] = Utils.Clamp(layer, 0f, 3f);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Layer Map
|
#region Layer Map
|
||||||
|
|
||||||
|
@ -286,7 +221,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
{
|
{
|
||||||
for (int x = 0; x < 256; x++)
|
for (int x = 0; x < 256; x++)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
float height = (float)terrain[x * xFactor, y * yFactor];
|
float height = (float)terrain[x * xFactor, y * yFactor];
|
||||||
|
|
||||||
float pctX = (float)x / 255f;
|
float pctX = (float)x / 255f;
|
||||||
|
@ -328,58 +262,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
if (Single.IsNaN(layer))
|
if (Single.IsNaN(layer))
|
||||||
layer = 0f;
|
layer = 0f;
|
||||||
layermap[x, y] = Utils.Clamp(layer, 0f, 3f);
|
layermap[x, y] = Utils.Clamp(layer, 0f, 3f);
|
||||||
=======
|
|
||||||
// Get handles to all of the texture data arrays
|
|
||||||
BitmapData[] datas = new BitmapData[]
|
|
||||||
{
|
|
||||||
detailTexture[0].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[0].PixelFormat),
|
|
||||||
detailTexture[1].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[1].PixelFormat),
|
|
||||||
detailTexture[2].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[2].PixelFormat),
|
|
||||||
detailTexture[3].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[3].PixelFormat)
|
|
||||||
};
|
|
||||||
|
|
||||||
int[] comps = new int[]
|
|
||||||
{
|
|
||||||
(datas[0].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3,
|
|
||||||
(datas[1].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3,
|
|
||||||
(datas[2].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3,
|
|
||||||
(datas[3].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int y = 0; y < 256; y++)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < 256; x++)
|
|
||||||
{
|
|
||||||
float layer = layermap[x, y];
|
|
||||||
|
|
||||||
// Select two textures
|
|
||||||
int l0 = (int)Math.Floor(layer);
|
|
||||||
int l1 = Math.Min(l0 + 1, 3);
|
|
||||||
|
|
||||||
byte* ptrA = (byte*)datas[l0].Scan0 + y * datas[l0].Stride + x * comps[l0];
|
|
||||||
byte* ptrB = (byte*)datas[l1].Scan0 + y * datas[l1].Stride + x * comps[l1];
|
|
||||||
byte* ptrO = (byte*)outputData.Scan0 + y * outputData.Stride + x * 3;
|
|
||||||
|
|
||||||
float aB = *(ptrA + 0);
|
|
||||||
float aG = *(ptrA + 1);
|
|
||||||
float aR = *(ptrA + 2);
|
|
||||||
|
|
||||||
float bB = *(ptrB + 0);
|
|
||||||
float bG = *(ptrB + 1);
|
|
||||||
float bR = *(ptrB + 2);
|
|
||||||
|
|
||||||
float layerDiff = layer - l0;
|
|
||||||
|
|
||||||
// Interpolate between the two selected textures
|
|
||||||
*(ptrO + 0) = (byte)Math.Floor(aB + layerDiff * (bB - aB));
|
|
||||||
*(ptrO + 1) = (byte)Math.Floor(aG + layerDiff * (bG - aG));
|
|
||||||
*(ptrO + 2) = (byte)Math.Floor(aR + layerDiff * (bR - aR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
detailTexture[i].UnlockBits(datas[i]);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,10 +353,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
b.Dispose();
|
b.Dispose();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
public static Bitmap SplatSimple(float[] heightmap)
|
public static Bitmap SplatSimple(float[] heightmap)
|
||||||
{
|
{
|
||||||
const float BASE_HSV_H = 93f / 360f;
|
const float BASE_HSV_H = 93f / 360f;
|
||||||
|
|
|
@ -156,13 +156,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
|
|
||||||
public Bitmap CreateMapTile()
|
public Bitmap CreateMapTile()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// Vector3 camPos = new Vector3(127.5f, 127.5f, 221.7025033688163f);
|
|
||||||
// Camera above the middle of the region
|
|
||||||
Vector3 camPos = new Vector3(
|
|
||||||
m_scene.RegionInfo.RegionSizeX/2 - 0.5f,
|
|
||||||
m_scene.RegionInfo.RegionSizeY/2 - 0.5f,
|
|
||||||
=======
|
|
||||||
/* this must be on all map, not just its image
|
/* this must be on all map, not just its image
|
||||||
if ((DateTime.Now - lastImageTime).TotalSeconds < 3600)
|
if ((DateTime.Now - lastImageTime).TotalSeconds < 3600)
|
||||||
{
|
{
|
||||||
|
@ -179,16 +172,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
Vector3 camPos = new Vector3(
|
Vector3 camPos = new Vector3(
|
||||||
m_scene.RegionInfo.RegionSizeX / 2 - 0.5f,
|
m_scene.RegionInfo.RegionSizeX / 2 - 0.5f,
|
||||||
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f,
|
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f,
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
221.7025033688163f);
|
221.7025033688163f);
|
||||||
// Viewport viewing down onto the region
|
// Viewport viewing down onto the region
|
||||||
Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f,
|
Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f,
|
||||||
(int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY,
|
(int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY,
|
||||||
<<<<<<< HEAD
|
|
||||||
(float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY );
|
|
||||||
// Fill the viewport and return the image
|
|
||||||
return CreateMapTile(viewport, false);
|
|
||||||
=======
|
|
||||||
(float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY);
|
(float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY);
|
||||||
|
|
||||||
Bitmap tile = CreateMapTile(viewport, false);
|
Bitmap tile = CreateMapTile(viewport, false);
|
||||||
|
@ -199,7 +186,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
lastImageTime = DateTime.Now;
|
lastImageTime = DateTime.Now;
|
||||||
return (Bitmap)lastImage.Clone();
|
return (Bitmap)lastImage.Clone();
|
||||||
*/
|
*/
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures)
|
public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures)
|
||||||
|
@ -315,15 +301,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight;
|
float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight;
|
||||||
|
|
||||||
renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f);
|
renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f);
|
||||||
<<<<<<< HEAD
|
|
||||||
renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX/2 - 0.5f,
|
|
||||||
waterHeight,
|
|
||||||
m_scene.RegionInfo.RegionSizeY/2 - 0.5f );
|
|
||||||
=======
|
|
||||||
renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX / 2 - 0.5f,
|
renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX / 2 - 0.5f,
|
||||||
waterHeight,
|
waterHeight,
|
||||||
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f);
|
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR));
|
warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR));
|
||||||
waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif
|
waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif
|
||||||
|
@ -352,11 +332,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]);
|
warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]);
|
||||||
obj.addVertex(new warp_Vertex(pos,
|
obj.addVertex(new warp_Vertex(pos,
|
||||||
x / (float)m_scene.RegionInfo.RegionSizeX,
|
x / (float)m_scene.RegionInfo.RegionSizeX,
|
||||||
<<<<<<< HEAD
|
|
||||||
(((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY) );
|
|
||||||
=======
|
|
||||||
(((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY));
|
(((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY));
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,12 +400,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
warp_Texture texture;
|
warp_Texture texture;
|
||||||
using (
|
using (
|
||||||
Bitmap image
|
Bitmap image
|
||||||
<<<<<<< HEAD
|
|
||||||
= TerrainSplat.Splat(terrain, textureIDs, startHeights, heightRanges,
|
|
||||||
=======
|
|
||||||
= TerrainSplat.Splat(
|
= TerrainSplat.Splat(
|
||||||
terrain, textureIDs, startHeights, heightRanges,
|
terrain, textureIDs, startHeights, heightRanges,
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain))
|
new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain))
|
||||||
{
|
{
|
||||||
texture = new warp_Texture(image);
|
texture = new warp_Texture(image);
|
||||||
|
@ -711,12 +683,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
return new warp_Vector(x, z, y);
|
return new warp_Vector(x, z, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: axis change.
|
|
||||||
private static warp_Vector ConvertVector(float x, float y, float z)
|
|
||||||
{
|
|
||||||
return new warp_Vector(x, z, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static warp_Vector ConvertVector(Vector3 vector)
|
private static warp_Vector ConvertVector(Vector3 vector)
|
||||||
{
|
{
|
||||||
return new warp_Vector(vector.X, vector.Z, vector.Y);
|
return new warp_Vector(vector.X, vector.Z, vector.Y);
|
||||||
|
|
|
@ -141,12 +141,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags)
|
private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
|
||||||
if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4))
|
|
||||||
=======
|
|
||||||
Util.FireAndForget(x =>
|
Util.FireAndForget(x =>
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||||
if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4))
|
if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4))
|
||||||
|
@ -232,74 +227,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// they have different values depending on different viewers, apparently
|
// they have different values depending on different viewers, apparently
|
||||||
remoteClient.SendMapBlock(blocks, flags);
|
remoteClient.SendMapBlock(blocks, flags);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
|
|
||||||
|
|
||||||
string mapNameOrig = mapName;
|
|
||||||
if (regionInfos.Count == 0)
|
|
||||||
{
|
|
||||||
// Hack to get around the fact that ll V3 now drops the port from the
|
|
||||||
// map name. See https://jira.secondlife.com/browse/VWR-28570
|
|
||||||
//
|
|
||||||
// Caller, use this magic form instead:
|
|
||||||
// secondlife://http|!!mygrid.com|8002|Region+Name/128/128
|
|
||||||
// or url encode if possible.
|
|
||||||
// the hacks we do with this viewer...
|
|
||||||
//
|
|
||||||
if (mapName.Contains("|"))
|
|
||||||
mapName = mapName.Replace('|', ':');
|
|
||||||
if (mapName.Contains("+"))
|
|
||||||
mapName = mapName.Replace('+', ' ');
|
|
||||||
if (mapName.Contains("!"))
|
|
||||||
mapName = mapName.Replace('!', '/');
|
|
||||||
|
|
||||||
if (mapName != mapNameOrig)
|
|
||||||
regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags);
|
|
||||||
|
|
||||||
if (regionInfos.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (GridRegion info in regionInfos)
|
|
||||||
{
|
|
||||||
if ((flags & 2) == 2) // V2 sends this
|
|
||||||
{
|
|
||||||
List<MapBlockData> datas = WorldMap.Map2BlockFromGridRegion(info, flags);
|
|
||||||
// ugh! V2-3 is very sensitive about the result being
|
|
||||||
// exactly the same as the requested name
|
|
||||||
if (regionInfos.Count == 1 && (mapName != mapNameOrig))
|
|
||||||
datas.ForEach(d => d.Name = mapNameOrig);
|
|
||||||
|
|
||||||
blocks.AddRange(datas);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MapBlockData data = WorldMap.MapBlockFromGridRegion(info, flags);
|
|
||||||
blocks.Add(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// final block, closing the search result
|
|
||||||
AddFinalBlock(blocks);
|
|
||||||
|
|
||||||
// flags are agent flags sent from the viewer.
|
|
||||||
// they have different values depending on different viewers, apparently
|
|
||||||
remoteClient.SendMapBlock(blocks, flags);
|
|
||||||
|
|
||||||
// send extra user messages for V3
|
|
||||||
// because the UI is very confusing
|
|
||||||
// while we don't fix the hard-coded urls
|
|
||||||
if (flags == 2)
|
|
||||||
{
|
|
||||||
if (regionInfos.Count == 0)
|
|
||||||
remoteClient.SendAlertMessage("No regions found with that name.");
|
|
||||||
// this seems unnecessary because found regions will show up in the search results
|
|
||||||
//else if (regionInfos.Count == 1)
|
|
||||||
// remoteClient.SendAlertMessage("Region found!");
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// send extra user messages for V3
|
// send extra user messages for V3
|
||||||
// because the UI is very confusing
|
// because the UI is very confusing
|
||||||
// while we don't fix the hard-coded urls
|
// while we don't fix the hard-coded urls
|
||||||
|
@ -311,7 +238,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddFinalBlock(List<MapBlockData> blocks)
|
private void AddFinalBlock(List<MapBlockData> blocks)
|
||||||
|
|
|
@ -68,12 +68,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
private static readonly UUID STOP_UUID = UUID.Random();
|
private static readonly UUID STOP_UUID = UUID.Random();
|
||||||
private static readonly string m_mapLayerPath = "0001/";
|
private static readonly string m_mapLayerPath = "0001/";
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private IMapImageGenerator m_mapImageGenerator;
|
|
||||||
private IMapImageUploadModule m_mapImageServiceModule;
|
|
||||||
|
|
||||||
private OpenSim.Framework.BlockingQueue<MapRequestState> requests = new OpenSim.Framework.BlockingQueue<MapRequestState>();
|
|
||||||
=======
|
|
||||||
private ManualResetEvent queueEvent = new ManualResetEvent(false);
|
private ManualResetEvent queueEvent = new ManualResetEvent(false);
|
||||||
private Queue<MapRequestState> requests = new Queue<MapRequestState>();
|
private Queue<MapRequestState> requests = new Queue<MapRequestState>();
|
||||||
|
|
||||||
|
@ -82,7 +76,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
private IMapImageGenerator m_mapImageGenerator;
|
private IMapImageGenerator m_mapImageGenerator;
|
||||||
private IMapImageUploadModule m_mapImageServiceModule;
|
private IMapImageUploadModule m_mapImageServiceModule;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
private List<MapBlockData> cachedMapBlocks = new List<MapBlockData>();
|
private List<MapBlockData> cachedMapBlocks = new List<MapBlockData>();
|
||||||
|
@ -154,14 +147,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
if (!m_Enabled)
|
if (!m_Enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
m_ServiceThrottle = scene.RequestModuleInterface<IServiceThrottleModule>();
|
|
||||||
=======
|
|
||||||
m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>();
|
|
||||||
m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>();
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>();
|
m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>();
|
||||||
m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>();
|
m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>();
|
||||||
}
|
}
|
||||||
|
@ -275,56 +260,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// 6/8/2011 -- I'm adding an explicit 2048 check, so that we never forget that there is
|
// 6/8/2011 -- I'm adding an explicit 2048 check, so that we never forget that there is
|
||||||
// a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks.
|
// a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks.
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048)
|
|
||||||
{
|
|
||||||
ScenePresence avatarPresence = null;
|
|
||||||
|
|
||||||
m_scene.TryGetScenePresence(agentID, out avatarPresence);
|
|
||||||
|
|
||||||
if (avatarPresence != null)
|
|
||||||
{
|
|
||||||
bool lookup = false;
|
|
||||||
|
|
||||||
lock (cachedMapBlocks)
|
|
||||||
{
|
|
||||||
if (cachedMapBlocks.Count > 0 && ((cachedTime + 1800) > Util.UnixTimeSinceEpoch()))
|
|
||||||
{
|
|
||||||
List<MapBlockData> mapBlocks;
|
|
||||||
|
|
||||||
mapBlocks = cachedMapBlocks;
|
|
||||||
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lookup = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lookup)
|
|
||||||
{
|
|
||||||
List<MapBlockData> mapBlocks = new List<MapBlockData>(); ;
|
|
||||||
|
|
||||||
// Get regions that are within 8 regions of here
|
|
||||||
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
|
||||||
(int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX - 8),
|
|
||||||
(int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX + 8),
|
|
||||||
(int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY - 8),
|
|
||||||
(int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY + 8) );
|
|
||||||
foreach (GridRegion r in regions)
|
|
||||||
{
|
|
||||||
MapBlockData block = MapBlockFromGridRegion(r, 0);
|
|
||||||
mapBlocks.Add(block);
|
|
||||||
}
|
|
||||||
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
|
||||||
|
|
||||||
lock (cachedMapBlocks)
|
|
||||||
cachedMapBlocks = mapBlocks;
|
|
||||||
|
|
||||||
cachedTime = Util.UnixTimeSinceEpoch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
//if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048)
|
//if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048)
|
||||||
//{
|
//{
|
||||||
// ScenePresence avatarPresence = null;
|
// ScenePresence avatarPresence = null;
|
||||||
|
@ -373,7 +308,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
|
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
|
||||||
mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse());
|
mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse());
|
||||||
|
@ -459,7 +393,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
ThreadPriority.BelowNormal,
|
ThreadPriority.BelowNormal,
|
||||||
true,
|
true,
|
||||||
true);
|
true);
|
||||||
Watchdog.StartThread(
|
WorkManager.StartThread(
|
||||||
MapBlockSendThread,
|
MapBlockSendThread,
|
||||||
string.Format("MapBlockSendThread ({0})", m_scene.RegionInfo.RegionName),
|
string.Format("MapBlockSendThread ({0})", m_scene.RegionInfo.RegionName),
|
||||||
ThreadPriority.BelowNormal,
|
ThreadPriority.BelowNormal,
|
||||||
|
@ -516,12 +450,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
uint xstart = 0;
|
uint xstart = 0;
|
||||||
uint ystart = 0;
|
uint ystart = 0;
|
||||||
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
|
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
|
||||||
<<<<<<< HEAD
|
|
||||||
if (itemtype == (int)GridItemType.AgentLocations)
|
|
||||||
=======
|
|
||||||
|
|
||||||
if (itemtype == 6) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots)
|
if (itemtype == (int)GridItemType.AgentLocations) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
|
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
|
||||||
{
|
{
|
||||||
|
@ -531,22 +461,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
mapItemReply mapitem = new mapItemReply();
|
mapItemReply mapitem = new mapItemReply();
|
||||||
if (m_scene.GetRootAgentCount() <= 1)
|
if (m_scene.GetRootAgentCount() <= 1)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
mapitem = new mapItemReply(
|
mapitem = new mapItemReply(
|
||||||
xstart + 1,
|
xstart + 1,
|
||||||
ystart + 1,
|
ystart + 1,
|
||||||
UUID.Zero,
|
UUID.Zero,
|
||||||
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
||||||
0, 0);
|
0, 0);
|
||||||
=======
|
|
||||||
mapitem = new mapItemReply();
|
|
||||||
mapitem.x = xstart + 1;
|
|
||||||
mapitem.y = ystart + 1;
|
|
||||||
mapitem.id = UUID.Zero;
|
|
||||||
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
|
|
||||||
mapitem.Extra = 0;
|
|
||||||
mapitem.Extra2 = 0;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
mapitems.Add(mapitem);
|
mapitems.Add(mapitem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -556,22 +476,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// Don't send a green dot for yourself
|
// Don't send a green dot for yourself
|
||||||
if (sp.UUID != remoteClient.AgentId)
|
if (sp.UUID != remoteClient.AgentId)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
mapitem = new mapItemReply(
|
mapitem = new mapItemReply(
|
||||||
xstart + (uint)sp.AbsolutePosition.X,
|
xstart + (uint)sp.AbsolutePosition.X,
|
||||||
ystart + (uint)sp.AbsolutePosition.Y,
|
ystart + (uint)sp.AbsolutePosition.Y,
|
||||||
UUID.Zero,
|
UUID.Zero,
|
||||||
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
||||||
1, 0);
|
1, 0);
|
||||||
=======
|
|
||||||
mapitem = new mapItemReply();
|
|
||||||
mapitem.x = xstart + (uint)sp.AbsolutePosition.X;
|
|
||||||
mapitem.y = ystart + (uint)sp.AbsolutePosition.Y;
|
|
||||||
mapitem.id = UUID.Zero;
|
|
||||||
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
|
|
||||||
mapitem.Extra = 1;
|
|
||||||
mapitem.Extra2 = 0;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
mapitems.Add(mapitem);
|
mapitems.Add(mapitem);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -615,8 +525,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
Vector3 max = parcel.AABBMax;
|
Vector3 max = parcel.AABBMax;
|
||||||
float x = (min.X+max.X)/2;
|
float x = (min.X+max.X)/2;
|
||||||
float y = (min.Y+max.Y)/2;
|
float y = (min.Y+max.Y)/2;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
mapitem = new mapItemReply(
|
mapitem = new mapItemReply(
|
||||||
xstart + (uint)x,
|
xstart + (uint)x,
|
||||||
ystart + (uint)y,
|
ystart + (uint)y,
|
||||||
|
@ -625,16 +533,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
parcel.Area,
|
parcel.Area,
|
||||||
parcel.SalePrice
|
parcel.SalePrice
|
||||||
);
|
);
|
||||||
=======
|
|
||||||
mapitem = new mapItemReply();
|
|
||||||
mapitem.x = xstart + (uint)x;
|
|
||||||
mapitem.y = ystart +(uint)y;
|
|
||||||
// mapitem.z = (uint)m_scene.GetGroundHeight(x,y);
|
|
||||||
mapitem.id = parcel.GlobalID;
|
|
||||||
mapitem.name = parcel.Name;
|
|
||||||
mapitem.Extra = parcel.Area;
|
|
||||||
mapitem.Extra2 = parcel.SalePrice;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
mapitems.Add(mapitem);
|
mapitems.Add(mapitem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -659,7 +557,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject);
|
SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject);
|
||||||
if (sog != null)
|
if (sog != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
mapitem = new mapItemReply(
|
mapitem = new mapItemReply(
|
||||||
xstart + (uint)sog.AbsolutePosition.X,
|
xstart + (uint)sog.AbsolutePosition.X,
|
||||||
ystart + (uint)sog.AbsolutePosition.Y,
|
ystart + (uint)sog.AbsolutePosition.Y,
|
||||||
|
@ -668,15 +565,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
0, // color (not used)
|
0, // color (not used)
|
||||||
0 // 0 = telehub / 1 = infohub
|
0 // 0 = telehub / 1 = infohub
|
||||||
);
|
);
|
||||||
=======
|
|
||||||
mapitem = new mapItemReply();
|
|
||||||
mapitem.x = xstart + (uint)sog.AbsolutePosition.X;
|
|
||||||
mapitem.y = ystart + (uint)sog.AbsolutePosition.Y;
|
|
||||||
mapitem.id = UUID.Zero;
|
|
||||||
mapitem.name = sog.Name;
|
|
||||||
mapitem.Extra = 0; // color (not used)
|
|
||||||
mapitem.Extra2 = 0; // 0 = telehub / 1 = infohub
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
mapitems.Add(mapitem);
|
mapitems.Add(mapitem);
|
||||||
|
|
||||||
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
|
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
|
||||||
|
@ -763,126 +651,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
{
|
{
|
||||||
lock (requests)
|
lock (requests)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (st.agentID != UUID.Zero)
|
|
||||||
{
|
|
||||||
bool dorequest = true;
|
|
||||||
lock (m_rootAgents)
|
|
||||||
{
|
|
||||||
if (!m_rootAgents.Contains(st.agentID))
|
|
||||||
dorequest = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dorequest && !m_blacklistedregions.ContainsKey(st.regionhandle))
|
|
||||||
{
|
|
||||||
if (nAsyncRequests >= MAX_ASYNC_REQUESTS) // hit the break
|
|
||||||
{
|
|
||||||
// AH!!! Recursive !
|
|
||||||
// Put this request back in the queue and return
|
|
||||||
EnqueueMapItemRequest(st);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RequestMapItemsDelegate d = RequestMapItemsAsync;
|
|
||||||
d.BeginInvoke(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle, RequestMapItemsCompleted, null);
|
|
||||||
//OSDMap response = RequestMapItemsAsync(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle);
|
|
||||||
//RequestMapItemsCompleted(response);
|
|
||||||
Interlocked.Increment(ref nAsyncRequests);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sends the mapitem response to the IClientAPI
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="response">The OSDMap Response for the mapitem</param>
|
|
||||||
private void RequestMapItemsCompleted(IAsyncResult iar)
|
|
||||||
{
|
|
||||||
AsyncResult result = (AsyncResult)iar;
|
|
||||||
RequestMapItemsDelegate icon = (RequestMapItemsDelegate)result.AsyncDelegate;
|
|
||||||
|
|
||||||
OSDMap response = (OSDMap)icon.EndInvoke(iar);
|
|
||||||
|
|
||||||
Interlocked.Decrement(ref nAsyncRequests);
|
|
||||||
|
|
||||||
if (!response.ContainsKey("requestID"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
UUID requestID = response["requestID"].AsUUID();
|
|
||||||
|
|
||||||
if (requestID != UUID.Zero)
|
|
||||||
{
|
|
||||||
MapRequestState mrs = new MapRequestState();
|
|
||||||
mrs.agentID = UUID.Zero;
|
|
||||||
lock (m_openRequests)
|
|
||||||
{
|
|
||||||
if (m_openRequests.ContainsKey(requestID))
|
|
||||||
{
|
|
||||||
mrs = m_openRequests[requestID];
|
|
||||||
m_openRequests.Remove(requestID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mrs.agentID != UUID.Zero)
|
|
||||||
{
|
|
||||||
ScenePresence av = null;
|
|
||||||
m_scene.TryGetScenePresence(mrs.agentID, out av);
|
|
||||||
if (av != null)
|
|
||||||
{
|
|
||||||
if (response.ContainsKey(mrs.itemtype.ToString()))
|
|
||||||
{
|
|
||||||
List<mapItemReply> returnitems = new List<mapItemReply>();
|
|
||||||
OSDArray itemarray = (OSDArray)response[mrs.itemtype.ToString()];
|
|
||||||
for (int i = 0; i < itemarray.Count; i++)
|
|
||||||
{
|
|
||||||
OSDMap mapitem = (OSDMap)itemarray[i];
|
|
||||||
mapItemReply mi = new mapItemReply();
|
|
||||||
mi.FromOSD(mapitem);
|
|
||||||
returnitems.Add(mi);
|
|
||||||
}
|
|
||||||
av.ControllingClient.SendMapItemReply(returnitems.ToArray(), mrs.itemtype, mrs.flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Service 7 (MAP_ITEM_LAND_FOR_SALE)
|
|
||||||
uint itemtype = (uint)GridItemType.LandForSale;
|
|
||||||
|
|
||||||
if (response.ContainsKey(itemtype.ToString()))
|
|
||||||
{
|
|
||||||
List<mapItemReply> returnitems = new List<mapItemReply>();
|
|
||||||
OSDArray itemarray = (OSDArray)response[itemtype.ToString()];
|
|
||||||
for (int i = 0; i < itemarray.Count; i++)
|
|
||||||
{
|
|
||||||
OSDMap mapitem = (OSDMap)itemarray[i];
|
|
||||||
mapItemReply mi = new mapItemReply();
|
|
||||||
mi.FromOSD(mapitem);
|
|
||||||
returnitems.Add(mi);
|
|
||||||
}
|
|
||||||
av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Service 1 (MAP_ITEM_TELEHUB)
|
|
||||||
itemtype = (uint)GridItemType.Telehub;
|
|
||||||
|
|
||||||
if (response.ContainsKey(itemtype.ToString()))
|
|
||||||
{
|
|
||||||
List<mapItemReply> returnitems = new List<mapItemReply>();
|
|
||||||
OSDArray itemarray = (OSDArray)response[itemtype.ToString()];
|
|
||||||
for (int i = 0; i < itemarray.Count; i++)
|
|
||||||
{
|
|
||||||
OSDMap mapitem = (OSDMap)itemarray[i];
|
|
||||||
mapItemReply mi = new mapItemReply();
|
|
||||||
mi.FromOSD(mapitem);
|
|
||||||
returnitems.Add(mi);
|
|
||||||
}
|
|
||||||
av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
queueEvent.Set();
|
queueEvent.Set();
|
||||||
requests.Enqueue(state);
|
requests.Enqueue(state);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1228,11 +999,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
/// <param name="maxY"></param>
|
/// <param name="maxY"></param>
|
||||||
public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
|
public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
m_log.DebugFormat("[WoldMapModule] RequestMapBlocks {0}={1}={2}={3} {4}", minX, minY, maxX, maxY, flag);
|
m_log.DebugFormat("[WoldMapModule] RequestMapBlocks {0}={1}={2}={3} {4}", minX, minY, maxX, maxY, flag);
|
||||||
/* this flag does not seem to mean what his says
|
/* this flag does not seem to mean what his says
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible
|
if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible
|
||||||
{
|
{
|
||||||
List<MapBlockData> response = new List<MapBlockData>();
|
List<MapBlockData> response = new List<MapBlockData>();
|
||||||
|
@ -1241,34 +1009,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
// on an unloaded square.
|
// on an unloaded square.
|
||||||
// But make sure: Look whether the one we requested is in there
|
// But make sure: Look whether the one we requested is in there
|
||||||
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
||||||
<<<<<<< HEAD
|
|
||||||
(int)Util.RegionToWorldLoc((uint)minX), (int)Util.RegionToWorldLoc((uint)maxX),
|
|
||||||
(int)Util.RegionToWorldLoc((uint)minY), (int)Util.RegionToWorldLoc((uint)maxY) );
|
|
||||||
|
|
||||||
m_log.DebugFormat("[WORLD MAP MODULE] RequestMapBlocks min=<{0},{1}>, max=<{2},{3}>, flag={4}, cntFound={5}",
|
|
||||||
minX, minY, maxX, maxY, flag.ToString("X"), regions.Count);
|
|
||||||
=======
|
|
||||||
(int)Util.RegionToWorldLoc((uint)minX),
|
(int)Util.RegionToWorldLoc((uint)minX),
|
||||||
(int)Util.RegionToWorldLoc((uint)maxX),
|
(int)Util.RegionToWorldLoc((uint)maxX),
|
||||||
(int)Util.RegionToWorldLoc((uint)minY),
|
(int)Util.RegionToWorldLoc((uint)minY),
|
||||||
(int)Util.RegionToWorldLoc((uint)maxY) );
|
(int)Util.RegionToWorldLoc((uint)maxY) );
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (regions != null)
|
if (regions != null)
|
||||||
{
|
{
|
||||||
foreach (GridRegion r in regions)
|
foreach (GridRegion r in regions)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX)
|
|
||||||
&& r.RegionLocY == Util.RegionToWorldLoc((uint)minY) )
|
|
||||||
{
|
|
||||||
// found it => add it to response
|
|
||||||
// Version 2 viewers can handle the larger regions
|
|
||||||
if ((flag & 2) == 2)
|
|
||||||
response.AddRange(Map2BlockFromGridRegion(r, flag));
|
|
||||||
else
|
|
||||||
response.Add(MapBlockFromGridRegion(r, flag));
|
|
||||||
=======
|
|
||||||
if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX) &&
|
if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX) &&
|
||||||
r.RegionLocY == Util.RegionToWorldLoc((uint)minY))
|
r.RegionLocY == Util.RegionToWorldLoc((uint)minY))
|
||||||
{
|
{
|
||||||
|
@ -1281,7 +1030,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
MapBlockFromGridRegion(block, r, flag);
|
MapBlockFromGridRegion(block, r, flag);
|
||||||
response.Add(block);
|
response.Add(block);
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1373,19 +1121,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
List<MapBlockData> allBlocks = new List<MapBlockData>();
|
List<MapBlockData> allBlocks = new List<MapBlockData>();
|
||||||
List<MapBlockData> mapBlocks = new List<MapBlockData>();
|
List<MapBlockData> mapBlocks = new List<MapBlockData>();
|
||||||
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
||||||
<<<<<<< HEAD
|
|
||||||
(int)Util.RegionToWorldLoc((uint)(minX - 4)), (int)Util.RegionToWorldLoc((uint)(maxX + 4)),
|
|
||||||
(int)Util.RegionToWorldLoc((uint)(minY - 4)), (int)Util.RegionToWorldLoc((uint)(maxY + 4)) );
|
|
||||||
//m_log.DebugFormat("{0} GetAndSendBlocks. min=<{1},{2}>, max=<{3},{4}>, cntFound={5}",
|
|
||||||
// LogHeader, minX, minY, maxX, maxY, regions.Count);
|
|
||||||
foreach (GridRegion r in regions)
|
|
||||||
{
|
|
||||||
// Version 2 viewers can handle the larger regions
|
|
||||||
if ((flag & 2) == 2)
|
|
||||||
mapBlocks.AddRange(Map2BlockFromGridRegion(r, flag));
|
|
||||||
else
|
|
||||||
mapBlocks.Add(MapBlockFromGridRegion(r, flag));
|
|
||||||
=======
|
|
||||||
minX * (int)Constants.RegionSize,
|
minX * (int)Constants.RegionSize,
|
||||||
maxX * (int)Constants.RegionSize,
|
maxX * (int)Constants.RegionSize,
|
||||||
minY * (int)Constants.RegionSize,
|
minY * (int)Constants.RegionSize,
|
||||||
|
@ -1407,7 +1142,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
mapBlocks.Add(block);
|
mapBlocks.Add(block);
|
||||||
remoteClient.SendMapBlock(mapBlocks, flag & 0xffff);
|
remoteClient.SendMapBlock(mapBlocks, flag & 0xffff);
|
||||||
return allBlocks;
|
return allBlocks;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (GridRegion r in regions)
|
foreach (GridRegion r in regions)
|
||||||
|
@ -1438,15 +1172,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
return allBlocks;
|
return allBlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// Fill a passed MapBlockData from a GridRegion
|
|
||||||
public MapBlockData MapBlockFromGridRegion(GridRegion r, uint flag)
|
|
||||||
=======
|
|
||||||
public void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag)
|
public void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
MapBlockData block = new MapBlockData();
|
|
||||||
|
|
||||||
block.Access = r.Access;
|
block.Access = r.Access;
|
||||||
switch (flag & 0xffff)
|
switch (flag & 0xffff)
|
||||||
{
|
{
|
||||||
|
@ -1461,14 +1188,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
block.Name = r.RegionName;
|
block.Name = r.RegionName;
|
||||||
<<<<<<< HEAD
|
|
||||||
block.X = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocX);
|
|
||||||
block.Y = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocY);
|
|
||||||
block.SizeX = (ushort) r.RegionSizeX;
|
|
||||||
block.SizeY = (ushort) r.RegionSizeY;
|
|
||||||
|
|
||||||
return block;
|
|
||||||
=======
|
|
||||||
block.X = (ushort)(r.RegionLocX / Constants.RegionSize);
|
block.X = (ushort)(r.RegionLocX / Constants.RegionSize);
|
||||||
block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
|
block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
|
||||||
block.SizeX = (ushort)r.RegionSizeX;
|
block.SizeX = (ushort)r.RegionSizeX;
|
||||||
|
@ -1508,45 +1227,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
blocks.Add(block);
|
blocks.Add(block);
|
||||||
}
|
}
|
||||||
return blocks;
|
return blocks;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag)
|
|
||||||
{
|
|
||||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
|
||||||
MapBlockData block = new MapBlockData();
|
|
||||||
if (r == null)
|
|
||||||
{
|
|
||||||
block.Access = (byte)SimAccess.Down;
|
|
||||||
block.MapImageId = UUID.Zero;
|
|
||||||
blocks.Add(block);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
block.Access = r.Access;
|
|
||||||
switch (flag & 0xffff)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
block.MapImageId = r.TerrainImage;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
block.MapImageId = r.ParcelImage;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
block.MapImageId = UUID.Zero;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
block.Name = r.RegionName;
|
|
||||||
block.X = (ushort)(r.RegionLocX / Constants.RegionSize);
|
|
||||||
block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
|
|
||||||
block.SizeX = (ushort)r.RegionSizeX;
|
|
||||||
block.SizeY = (ushort)r.RegionSizeY;
|
|
||||||
blocks.Add(block);
|
|
||||||
}
|
|
||||||
return blocks;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Hashtable OnHTTPThrottled(Hashtable keysvals)
|
public Hashtable OnHTTPThrottled(Hashtable keysvals)
|
||||||
{
|
{
|
||||||
Hashtable reply = new Hashtable();
|
Hashtable reply = new Hashtable();
|
||||||
|
@ -1681,7 +1363,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
foreach (GridRegion r in regions)
|
foreach (GridRegion r in regions)
|
||||||
{
|
{
|
||||||
MapBlockData mapBlock = MapBlockFromGridRegion(r, 0);
|
MapBlockData mapBlock = new MapBlockData();
|
||||||
|
MapBlockFromGridRegion(mapBlock, r , 0);
|
||||||
AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString());
|
AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString());
|
||||||
|
|
||||||
if (texAsset != null)
|
if (texAsset != null)
|
||||||
|
@ -1752,13 +1435,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
uint xstart = 0;
|
uint xstart = 0;
|
||||||
uint ystart = 0;
|
uint ystart = 0;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle,out xstart,out ystart);
|
|
||||||
// m_log.DebugFormat("{0} HandleRemoteMapItemRequest. loc=<{1},{2}>",
|
|
||||||
// LogHeader, Util.WorldToRegionLoc(xstart), Util.WorldToRegionLoc(ystart));
|
|
||||||
=======
|
|
||||||
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
|
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
// Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots)
|
// Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots)
|
||||||
|
|
||||||
|
@ -1878,7 +1555,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name);
|
m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile())
|
using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile())
|
||||||
{
|
{
|
||||||
|
@ -1894,23 +1570,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
{
|
{
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile())
|
|
||||||
{
|
|
||||||
// V1 (This Module)
|
|
||||||
GenerateMaptile(mapbmp);
|
|
||||||
|
|
||||||
// v2/3 (MapImageServiceModule)
|
|
||||||
m_mapImageServiceModule.UploadMapTile(m_scene, mapbmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GenerateMaptile(Bitmap mapbmp)
|
|
||||||
{
|
|
||||||
byte[] data;
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
data = OpenJPEG.EncodeFromImage(mapbmp, true);
|
data = OpenJPEG.EncodeFromImage(mapbmp, true);
|
||||||
|
@ -2027,11 +1686,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
int regionSizeX = (int)m_scene.RegionInfo.RegionSizeX;
|
int regionSizeX = (int)m_scene.RegionInfo.RegionSizeX;
|
||||||
int regionSizeY = (int)m_scene.RegionInfo.RegionSizeY;
|
int regionSizeY = (int)m_scene.RegionInfo.RegionSizeY;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
int landTileSize = LandManagementModule.LandUnit;
|
int landTileSize = LandManagementModule.LandUnit;
|
||||||
=======
|
|
||||||
int landTileSize = LandManagementModule.landUnit;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
int regionLandTilesX = regionSizeX / landTileSize;
|
int regionLandTilesX = regionSizeX / landTileSize;
|
||||||
int regionLandTilesY = regionSizeY / landTileSize;
|
int regionLandTilesY = regionSizeY / landTileSize;
|
||||||
|
|
||||||
|
@ -2054,10 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
{
|
{
|
||||||
using (SolidBrush transparent = new SolidBrush(background))
|
using (SolidBrush transparent = new SolidBrush(background))
|
||||||
g.FillRectangle(transparent, 0, 0, regionSizeX, regionSizeY);
|
g.FillRectangle(transparent, 0, 0, regionSizeX, regionSizeY);
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
foreach (ILandObject land in parcels)
|
foreach (ILandObject land in parcels)
|
||||||
{
|
{
|
||||||
|
@ -2080,17 +1731,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9)))
|
using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9)))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
for (int x = 0 ; x < regionLandTilesX ; x++)
|
|
||||||
{
|
|
||||||
for (int y = 0 ; y < regionLandTilesY ; y++)
|
|
||||||
{
|
|
||||||
if (saleBitmap[x, y])
|
|
||||||
g.FillRectangle(
|
|
||||||
yellow, x * landTileSize,
|
|
||||||
regionSizeX - landTileSize - (y * landTileSize),
|
|
||||||
landTileSize,
|
|
||||||
=======
|
|
||||||
for (int x = 0; x < regionLandTilesX ; x++)
|
for (int x = 0; x < regionLandTilesX ; x++)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < regionLandTilesY ; y++)
|
for (int y = 0; y < regionLandTilesY ; y++)
|
||||||
|
@ -2101,7 +1741,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
x * landTileSize,
|
x * landTileSize,
|
||||||
regionSizeX - landTileSize - (y * landTileSize),
|
regionSizeX - landTileSize - (y * landTileSize),
|
||||||
landTileSize,
|
landTileSize,
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
landTileSize);
|
landTileSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,7 +402,6 @@ namespace OpenSim.Region.DataSnapshot
|
||||||
string url = services[i].Trim();
|
string url = services[i].Trim();
|
||||||
using (RestClient cli = new RestClient(url))
|
using (RestClient cli = new RestClient(url))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
cli.AddQueryParameter("service", serviceName);
|
cli.AddQueryParameter("service", serviceName);
|
||||||
cli.AddQueryParameter("host", m_hostname);
|
cli.AddQueryParameter("host", m_hostname);
|
||||||
cli.AddQueryParameter("port", m_listener_port);
|
cli.AddQueryParameter("port", m_listener_port);
|
||||||
|
@ -436,30 +435,7 @@ namespace OpenSim.Region.DataSnapshot
|
||||||
// string responseStr = Util.UTF8.GetString(response);
|
// string responseStr = Util.UTF8.GetString(response);
|
||||||
m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret);
|
m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret);
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
m_log.Warn("[DATASNAPSHOT]: Ignoring unknown exception " + e.ToString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] response = new byte[1024];
|
|
||||||
// int n = 0;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// n = reply.Read(response, 0, 1024);
|
|
||||||
reply.Read(response, 0, 1024);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[DATASNAPSHOT]: Unable to decode reply from data service. Ignoring. {0}", e.StackTrace);
|
|
||||||
}
|
|
||||||
// This is not quite working, so...
|
|
||||||
// string responseStr = Util.UTF8.GetString(response);
|
|
||||||
m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret);
|
|
||||||
|
|
||||||
if(reply != null)
|
|
||||||
reply.Close();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,9 @@ namespace OpenSim.Services.Interfaces
|
||||||
public interface IBakedTextureModule
|
public interface IBakedTextureModule
|
||||||
{
|
{
|
||||||
WearableCacheItem[] Get(UUID id);
|
WearableCacheItem[] Get(UUID id);
|
||||||
|
|
||||||
void Store(UUID id);
|
void Store(UUID id);
|
||||||
|
void Store(UUID id, WearableCacheItem[] WearableCache);
|
||||||
void UpdateMeshAvatar(UUID id);
|
void UpdateMeshAvatar(UUID id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,15 +93,9 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
|
|
||||||
void EnableChildAgent(ScenePresence agent, GridRegion region);
|
void EnableChildAgent(ScenePresence agent, GridRegion region);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version,
|
|
||||||
out Vector3 newpos, out string reason);
|
|
||||||
|
|
||||||
=======
|
|
||||||
GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version, out Vector3 newpos);
|
GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version, out Vector3 newpos);
|
||||||
GridRegion GetObjectDestination(SceneObjectGroup grp, Vector3 targetPosition, out Vector3 newpos);
|
GridRegion GetObjectDestination(SceneObjectGroup grp, Vector3 targetPosition, out Vector3 newpos);
|
||||||
bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason);
|
bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
void Cross(SceneObjectGroup sog, Vector3 position, bool silent);
|
void Cross(SceneObjectGroup sog, Vector3 position, bool silent);
|
||||||
bool CrossPrimGroupIntoNewRegion(GridRegion destination, Vector3 newPosition, SceneObjectGroup grp, bool silent);
|
bool CrossPrimGroupIntoNewRegion(GridRegion destination, Vector3 newPosition, SceneObjectGroup grp, bool silent);
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
public interface IHttpRequestModule
|
public interface IHttpRequestModule
|
||||||
{
|
{
|
||||||
UUID MakeHttpRequest(string url, string parameters, string body);
|
UUID MakeHttpRequest(string url, string parameters, string body);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Starts the http request.
|
/// Starts the http request.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -86,12 +84,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// Stop and remove all http requests for the given script.
|
/// Stop and remove all http requests for the given script.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name='id'></param>
|
/// <param name='id'></param>
|
||||||
void StopHttpRequestsForScript(UUID id);
|
|
||||||
|
|
||||||
=======
|
|
||||||
UUID StartHttpRequest(uint localID, UUID itemID, string url, List<string> parameters, Dictionary<string, string> headers, string body);
|
|
||||||
void StopHttpRequest(uint m_localID, UUID m_itemID);
|
void StopHttpRequest(uint m_localID, UUID m_itemID);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
IServiceRequest GetNextCompletedRequest();
|
IServiceRequest GetNextCompletedRequest();
|
||||||
void RemoveCompletedRequest(UUID id);
|
void RemoveCompletedRequest(UUID id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,24 +25,14 @@
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
using System.Drawing;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
=======
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Interfaces
|
namespace OpenSim.Region.Framework.Interfaces
|
||||||
{
|
{
|
||||||
public interface IMapImageUploadModule
|
public interface IMapImageUploadModule
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
void UploadMapTile(IScene scene, Bitmap mapTile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Upload a new maptile
|
/// Upload a new maptile
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -50,4 +40,3 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
void UploadMapTile(IScene scene, Bitmap mapTile);
|
void UploadMapTile(IScene scene, Bitmap mapTile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
|
@ -127,12 +127,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <param name="requestId">If supplied, this request Id is later returned in the saved event</param>
|
/// <param name="requestId">If supplied, this request Id is later returned in the saved event</param>
|
||||||
/// <param name="options">
|
/// <param name="options">
|
||||||
/// Dictionary of options.
|
/// Dictionary of options.
|
||||||
<<<<<<< HEAD
|
|
||||||
/// </param>
|
/// </param>
|
||||||
void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string,object> options);
|
void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string,object> options);
|
||||||
=======
|
|
||||||
/// </param>
|
|
||||||
void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,11 +28,8 @@ using System.IO;
|
||||||
|
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Interfaces
|
namespace OpenSim.Region.Framework.Interfaces
|
||||||
|
@ -55,12 +52,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void PushTerrain(IClientAPI pClient);
|
void PushTerrain(IClientAPI pClient);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// When a client initially connects, all the terrain must be pushed to the viewer.
|
|
||||||
/// This call causes all the terrain patches to be sent to the client.
|
|
||||||
/// </summary>
|
|
||||||
void PushTerrain(IClientAPI pClient);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Load a terrain from a stream.
|
/// Load a terrain from a stream.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -69,7 +60,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <param name="stream"></param>
|
/// <param name="stream"></param>
|
||||||
void LoadFromStream(string filename, Stream stream);
|
void LoadFromStream(string filename, Stream stream);
|
||||||
void LoadFromStream(string filename, Vector3 displacement, float radianRotation, Vector2 rotationDisplacement, Stream stream);
|
|
||||||
void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap);
|
void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap);
|
||||||
void LoadFromStream(string filename, Vector3 displacement,
|
void LoadFromStream(string filename, Vector3 displacement,
|
||||||
float radianRotation, Vector2 rotationDisplacement, Stream stream);
|
float radianRotation, Vector2 rotationDisplacement, Stream stream);
|
||||||
|
|
|
@ -37,10 +37,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void GenerateMaptile();
|
void GenerateMaptile();
|
||||||
List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag);
|
List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag);
|
||||||
<<<<<<< HEAD
|
|
||||||
MapBlockData MapBlockFromGridRegion(GridRegion r, uint flag);
|
|
||||||
=======
|
|
||||||
void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag);
|
void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,26 +351,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_group = grp;
|
m_group = grp;
|
||||||
m_scene = grp.Scene;
|
m_scene = grp.Scene;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Vector3 grppos = grp.AbsolutePosition;
|
|
||||||
Vector3 offset = grppos - m_serializedPosition;
|
|
||||||
// avoid doing it more than once
|
|
||||||
// current this will happen dragging a prim to other region
|
|
||||||
m_serializedPosition = grppos;
|
|
||||||
|
|
||||||
m_basePosition += offset;
|
|
||||||
m_nextPosition += offset;
|
|
||||||
|
|
||||||
m_currentFrame.StartPosition += offset;
|
|
||||||
m_currentFrame.Position += offset;
|
|
||||||
|
|
||||||
for (int i = 0; i < m_frames.Count; i++)
|
|
||||||
{
|
|
||||||
Keyframe k = m_frames[i];
|
|
||||||
k.StartPosition += offset;
|
|
||||||
k.Position += offset;
|
|
||||||
m_frames[i]=k;
|
|
||||||
=======
|
|
||||||
lock (m_frames)
|
lock (m_frames)
|
||||||
{
|
{
|
||||||
Vector3 grppos = grp.AbsolutePosition;
|
Vector3 grppos = grp.AbsolutePosition;
|
||||||
|
@ -390,7 +371,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
k.Position += offset;
|
k.Position += offset;
|
||||||
m_frames[i] = k;
|
m_frames[i] = k;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_running)
|
if (m_running)
|
||||||
|
@ -708,29 +688,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (m_frames.Count == 0)
|
if (m_frames.Count == 0)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (!m_running) return;
|
|
||||||
|
|
||||||
GetNextList();
|
|
||||||
|
|
||||||
if (m_frames.Count == 0)
|
|
||||||
{
|
|
||||||
Stop();
|
|
||||||
// Scene scene = m_group.Scene;
|
|
||||||
//
|
|
||||||
// IScriptModule[] scriptModules = scene.RequestModuleInterfaces<IScriptModule>();
|
|
||||||
// foreach (IScriptModule m in scriptModules)
|
|
||||||
// {
|
|
||||||
// if (m == null)
|
|
||||||
// continue;
|
|
||||||
// m.PostObjectEvent(m_group.RootPart.UUID, "moving_end", new object[0]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
m_group.Scene.EventManager.TriggerMovingEndEvent(m_group.RootPart.LocalId);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
lock (m_frames)
|
lock (m_frames)
|
||||||
{
|
{
|
||||||
GetNextList();
|
GetNextList();
|
||||||
|
@ -738,17 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (m_frames.Count == 0)
|
if (m_frames.Count == 0)
|
||||||
{
|
{
|
||||||
Done();
|
Done();
|
||||||
Scene scene = m_group.Scene;
|
m_group.Scene.EventManager.TriggerMovingEndEvent(m_group.RootPart.LocalId);
|
||||||
|
|
||||||
IScriptModule[] scriptModules = scene.RequestModuleInterfaces<IScriptModule>();
|
|
||||||
foreach (IScriptModule m in scriptModules)
|
|
||||||
{
|
|
||||||
if (m == null)
|
|
||||||
continue;
|
|
||||||
m.PostObjectEvent(m_group.RootPart.UUID, "moving_end", new object[0]);
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -792,21 +739,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal;
|
float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal;
|
||||||
bool lastStep = m_currentFrame.TimeMS <= tickDuration;
|
bool lastStep = m_currentFrame.TimeMS <= tickDuration;
|
||||||
|
|
||||||
Vector3 positionThisStep = m_currentFrame.StartPosition + (m_currentFrame.Position.Value - m_currentFrame.StartPosition) * completed;
|
Vector3 v = (Vector3)m_currentFrame.Position - m_group.AbsolutePosition;
|
||||||
Vector3 motionThisStep = positionThisStep - m_group.AbsolutePosition;
|
Vector3 motionThisFrame = v / (float)remainingSteps;
|
||||||
|
v = v * 1000 / m_currentFrame.TimeMS;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
float mag = Vector3.Mag(motionThisStep);
|
|
||||||
|
|
||||||
if ((mag >= 0.02f) || lastStep)
|
|
||||||
{
|
|
||||||
m_nextPosition = m_group.AbsolutePosition + motionThisStep;
|
|
||||||
m_group.AbsolutePosition = m_nextPosition;
|
|
||||||
=======
|
|
||||||
m_nextPosition = m_group.AbsolutePosition + motionThisFrame;
|
m_nextPosition = m_group.AbsolutePosition + motionThisFrame;
|
||||||
|
|
||||||
if (Vector3.Mag(motionThisFrame) >= 0.05f)
|
if (Vector3.Mag(motionThisFrame) >= 0.05f)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
update = true;
|
update = true;
|
||||||
|
|
||||||
//int totalSteps = m_currentFrame.TimeTotal / (int)tickDuration;
|
//int totalSteps = m_currentFrame.TimeTotal / (int)tickDuration;
|
||||||
|
@ -819,45 +758,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed);
|
Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed);
|
||||||
step.Normalize();
|
step.Normalize();
|
||||||
<<<<<<< HEAD
|
|
||||||
/* use simpler change detection
|
|
||||||
* float angle = 0;
|
|
||||||
|
|
||||||
float aa = current.X * current.X + current.Y * current.Y + current.Z * current.Z + current.W * current.W;
|
|
||||||
float bb = step.X * step.X + step.Y * step.Y + step.Z * step.Z + step.W * step.W;
|
|
||||||
float aa_bb = aa * bb;
|
|
||||||
|
|
||||||
if (aa_bb == 0)
|
|
||||||
{
|
|
||||||
angle = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float ab = current.X * step.X +
|
|
||||||
current.Y * step.Y +
|
|
||||||
current.Z * step.Z +
|
|
||||||
current.W * step.W;
|
|
||||||
float q = (ab * ab) / aa_bb;
|
|
||||||
|
|
||||||
if (q > 1.0f)
|
|
||||||
{
|
|
||||||
angle = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
angle = (float)Math.Acos(2 * q - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (angle > 0.01f)
|
|
||||||
*/
|
|
||||||
if(Math.Abs(step.X - current.X) > 0.001f
|
|
||||||
|| Math.Abs(step.Y - current.Y) > 0.001f
|
|
||||||
|| Math.Abs(step.Z - current.Z) > 0.001f
|
|
||||||
|| lastStep)
|
|
||||||
// assuming w is a dependente var
|
|
||||||
|
|
||||||
=======
|
|
||||||
/* use simpler change detection
|
/* use simpler change detection
|
||||||
* float angle = 0;
|
* float angle = 0;
|
||||||
|
|
||||||
|
@ -893,9 +793,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|| Math.Abs(step.Y - current.Y) > 0.001f
|
|| Math.Abs(step.Y - current.Y) > 0.001f
|
||||||
|| Math.Abs(step.Z - current.Z) > 0.001f)
|
|| Math.Abs(step.Z - current.Z) > 0.001f)
|
||||||
// assuming w is a dependente var
|
// assuming w is a dependente var
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
// m_group.UpdateGroupRotationR(step);
|
// m_group.UpdateGroupRotationR(step);
|
||||||
m_group.RootPart.RotationOffset = step;
|
m_group.RootPart.RotationOffset = step;
|
||||||
|
|
||||||
//m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2);
|
//m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2);
|
||||||
|
@ -922,22 +821,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
SceneObjectGroup tmp = m_group;
|
SceneObjectGroup tmp = m_group;
|
||||||
m_group = null;
|
m_group = null;
|
||||||
if (!m_selected && tmp != null)
|
|
||||||
m_serializedPosition = tmp.AbsolutePosition;
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
fmt.Serialize(ms, this);
|
|
||||||
m_group = tmp;
|
|
||||||
if (!timerWasStopped && m_running && !m_waitingCrossing)
|
|
||||||
StartTimer();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
using (MemoryStream ms = new MemoryStream())
|
using (MemoryStream ms = new MemoryStream())
|
||||||
{
|
{
|
||||||
BinaryFormatter fmt = new BinaryFormatter();
|
BinaryFormatter fmt = new BinaryFormatter();
|
||||||
|
if (!m_selected && tmp != null)
|
||||||
|
m_serializedPosition = tmp.AbsolutePosition;
|
||||||
fmt.Serialize(ms, this);
|
fmt.Serialize(ms, this);
|
||||||
m_group = tmp;
|
m_group = tmp;
|
||||||
if (m_running && !m_waitingCrossing)
|
if (!timerWasStopped && m_running && !m_waitingCrossing)
|
||||||
StartTimer();
|
StartTimer();
|
||||||
|
|
||||||
return ms.ToArray();
|
return ms.ToArray();
|
||||||
|
|
|
@ -487,7 +487,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
XmlTextReader reader;
|
XmlReader reader;
|
||||||
|
|
||||||
private int XRint()
|
private int XRint()
|
||||||
{
|
{
|
||||||
|
@ -524,7 +524,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public static bool EReadProcessors(
|
public static bool EReadProcessors(
|
||||||
Dictionary<string, Action> processors,
|
Dictionary<string, Action> processors,
|
||||||
XmlTextReader xtr)
|
XmlReader xtr)
|
||||||
{
|
{
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
|
|
||||||
|
@ -564,14 +564,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public string ToXml2()
|
public string ToXml2()
|
||||||
{
|
{
|
||||||
MemoryStream ms = new MemoryStream(512);
|
using (StringWriter sw = new StringWriter())
|
||||||
UTF8Encoding enc = new UTF8Encoding();
|
{
|
||||||
XmlTextWriter xwriter = new XmlTextWriter(ms, enc);
|
using (XmlTextWriter xwriter = new XmlTextWriter(sw))
|
||||||
|
{
|
||||||
ToXml2(xwriter);
|
ToXml2(xwriter);
|
||||||
xwriter.Flush();
|
}
|
||||||
string s = ms.GetStreamString();
|
|
||||||
xwriter.Close();
|
return sw.ToString();
|
||||||
return s;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SOPVehicle FromXml2(string text)
|
public static SOPVehicle FromXml2(string text)
|
||||||
|
@ -598,7 +599,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SOPVehicle FromXml2(XmlTextReader reader)
|
public static SOPVehicle FromXml2(XmlReader reader)
|
||||||
{
|
{
|
||||||
SOPVehicle vehicle = new SOPVehicle();
|
SOPVehicle vehicle = new SOPVehicle();
|
||||||
|
|
||||||
|
@ -611,7 +612,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return vehicle;
|
return vehicle;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FromXml2(XmlTextReader _reader, out bool errors)
|
private void FromXml2(XmlReader _reader, out bool errors)
|
||||||
{
|
{
|
||||||
errors = false;
|
errors = false;
|
||||||
reader = _reader;
|
reader = _reader;
|
||||||
|
|
|
@ -881,14 +881,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (newName == String.Empty)
|
if (newName == String.Empty)
|
||||||
newName = item.Name;
|
newName = item.Name;
|
||||||
=======
|
|
||||||
if (newName == null) newName = item.Name;
|
|
||||||
|
|
||||||
AssetBase asset = AssetService.Get(item.AssetID.ToString());
|
AssetBase asset = AssetService.Get(item.AssetID.ToString());
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
if (asset != null)
|
||||||
|
{
|
||||||
|
if (newName != String.Empty)
|
||||||
|
{
|
||||||
|
asset.Name = newName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newName = item.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (remoteClient.AgentId == oldAgentID
|
if (remoteClient.AgentId == oldAgentID
|
||||||
|| (LibraryService != null
|
|| (LibraryService != null
|
||||||
|
@ -916,6 +924,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[AGENT INVENTORY]: Could not copy item {0} since asset {1} could not be found",
|
||||||
|
item.Name, item.AssetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a new asset data structure.
|
/// Create a new asset data structure.
|
||||||
|
@ -982,31 +997,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void CreateNewInventoryItem(
|
public void CreateNewInventoryItem(
|
||||||
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
||||||
string name, string description, uint flags, uint callbackID,
|
string name, string description, uint flags, uint callbackID,
|
||||||
<<<<<<< HEAD
|
|
||||||
UUID assetID, sbyte assetType, sbyte invType, uint nextOwnerMask, int creationDate)
|
UUID assetID, sbyte assetType, sbyte invType, uint nextOwnerMask, int creationDate)
|
||||||
{
|
{
|
||||||
CreateNewInventoryItem(
|
CreateNewInventoryItem(
|
||||||
remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, assetID, assetType, invType,
|
remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, assetID, assetType, invType,
|
||||||
(uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0,
|
(uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0,
|
||||||
creationDate, true);
|
creationDate, true);
|
||||||
=======
|
|
||||||
AssetBase asset, sbyte invType, uint nextOwnerMask, int creationDate, UUID transationID)
|
|
||||||
{
|
|
||||||
CreateNewInventoryItem(
|
|
||||||
remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, asset, invType,
|
|
||||||
(uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0, creationDate, transationID);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void CreateNewInventoryItem(
|
|
||||||
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
|
||||||
string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType,
|
|
||||||
uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate)
|
|
||||||
{
|
|
||||||
CreateNewInventoryItem(remoteClient, creatorID, creatorData, folderID,
|
|
||||||
name, description, flags, callbackID, asset, invType,
|
|
||||||
baseMask, currentMask, everyoneMask, nextOwnerMask, groupMask, creationDate, UUID.Zero);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1030,14 +1026,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="creationDate">Unix timestamp at which this item was created.</param>
|
/// <param name="creationDate">Unix timestamp at which this item was created.</param>
|
||||||
private void CreateNewInventoryItem(
|
private void CreateNewInventoryItem(
|
||||||
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
||||||
<<<<<<< HEAD
|
|
||||||
string name, string description, uint flags, uint callbackID, UUID assetID, sbyte assetType, sbyte invType,
|
string name, string description, uint flags, uint callbackID, UUID assetID, sbyte assetType, sbyte invType,
|
||||||
uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate,
|
uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate,
|
||||||
bool assetUpload)
|
bool assetUpload)
|
||||||
=======
|
|
||||||
string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType,
|
|
||||||
uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate,UUID transationID)
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
InventoryItemBase item = new InventoryItemBase();
|
InventoryItemBase item = new InventoryItemBase();
|
||||||
item.Owner = remoteClient.AgentId;
|
item.Owner = remoteClient.AgentId;
|
||||||
|
@ -1058,17 +1049,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
item.BasePermissions = baseMask;
|
item.BasePermissions = baseMask;
|
||||||
item.CreationDate = creationDate;
|
item.CreationDate = creationDate;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if (AddInventoryItem(item, assetUpload))
|
|
||||||
=======
|
|
||||||
// special AnimationSet case
|
// special AnimationSet case
|
||||||
if (item.InvType == (int)CustomInventoryType.AnimationSet)
|
if (item.InvType == (int)CustomInventoryType.AnimationSet)
|
||||||
AnimationSet.enforceItemPermitions(item,true);
|
AnimationSet.enforceItemPermitions(item,true);
|
||||||
|
|
||||||
if (AddInventoryItem(item))
|
if (AddInventoryItem(item))
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
remoteClient.SendInventoryItemCreateUpdate(item, transationID, callbackID);
|
remoteClient.SendInventoryItemCreateUpdate(item, callbackID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1284,7 +1271,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
|
agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
if (taskItem.InvType == (int)InventoryType.Object)
|
if (taskItem.InvType == (int)InventoryType.Object)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// Bake the new base permissions from folded permissions
|
// Bake the new base permissions from folded permissions
|
||||||
// The folded perms are in the lowest 3 bits of the current perms
|
// The folded perms are in the lowest 3 bits of the current perms
|
||||||
// We use base permissions here to avoid baking the "Locked" status
|
// We use base permissions here to avoid baking the "Locked" status
|
||||||
|
@ -1296,13 +1282,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
agentItem.BasePermissions = perms | (uint)PermissionMask.Move;
|
agentItem.BasePermissions = perms | (uint)PermissionMask.Move;
|
||||||
// Newly given items cannot be "locked" on rez. Make sure by
|
// Newly given items cannot be "locked" on rez. Make sure by
|
||||||
// setting current equal to base.
|
// setting current equal to base.
|
||||||
=======
|
|
||||||
uint perms = taskItem.BasePermissions & taskItem.NextPermissions;
|
|
||||||
PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms);
|
|
||||||
// agentItem.BasePermissions = perms | (uint)PermissionMask.Move;
|
|
||||||
// agentItem.CurrentPermissions = agentItem.BasePermissions;
|
|
||||||
agentItem.BasePermissions = perms | (uint)PermissionMask.Move;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
agentItem.CurrentPermissions = agentItem.BasePermissions;
|
agentItem.CurrentPermissions = agentItem.BasePermissions;
|
||||||
|
@ -1577,12 +1556,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items)
|
public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ScenePresence avatar;
|
ScenePresence avatar;
|
||||||
IClientAPI remoteClient = null;
|
IClientAPI remoteClient = null;
|
||||||
if (TryGetScenePresence(destID, out avatar))
|
if (TryGetScenePresence(destID, out avatar))
|
||||||
remoteClient = avatar.ControllingClient;
|
remoteClient = avatar.ControllingClient;
|
||||||
=======
|
// ????
|
||||||
SceneObjectPart destPart = GetSceneObjectPart(destID);
|
SceneObjectPart destPart = GetSceneObjectPart(destID);
|
||||||
if (destPart != null) // Move into a prim
|
if (destPart != null) // Move into a prim
|
||||||
{
|
{
|
||||||
|
@ -1590,7 +1569,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
MoveTaskInventoryItem(destID, host, itemID);
|
MoveTaskInventoryItem(destID, host, itemID);
|
||||||
return destID; // Prim folder ID == prim ID
|
return destID; // Prim folder ID == prim ID
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
// /????
|
||||||
|
|
||||||
InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID);
|
InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID);
|
||||||
|
|
||||||
|
@ -2157,14 +2136,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>();
|
List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>();
|
||||||
List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>();
|
List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>();
|
||||||
|
|
||||||
foreach (uint localID in localIDs)
|
|
||||||
{
|
|
||||||
// Start with true for both, then remove the flags if objects
|
// Start with true for both, then remove the flags if objects
|
||||||
// that we can't derez are part of the selection
|
// that we can't derez are part of the selection
|
||||||
bool permissionToTake = true;
|
bool permissionToTake = true;
|
||||||
bool permissionToTakeCopy = true;
|
bool permissionToTakeCopy = true;
|
||||||
bool permissionToDelete = true;
|
bool permissionToDelete = true;
|
||||||
|
|
||||||
|
foreach (uint localID in localIDs)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
// Invalid id
|
// Invalid id
|
||||||
SceneObjectPart part = GetSceneObjectPart(localID);
|
SceneObjectPart part = GetSceneObjectPart(localID);
|
||||||
if (part == null)
|
if (part == null)
|
||||||
|
@ -2287,27 +2268,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// OK, we're done with permissions. Let's check if any part of the code prevents the objects from being deleted
|
|
||||||
bool canDelete = EventManager.TriggerDeRezRequested(remoteClient, deleteGroups, action);
|
|
||||||
|
|
||||||
if (permissionToTake && (action != DeRezAction.Delete || this.m_useTrashOnDelete))
|
|
||||||
=======
|
|
||||||
SendKillObject(deleteIDs);
|
SendKillObject(deleteIDs);
|
||||||
|
|
||||||
if (deleteGroups.Count > 0)
|
if (deleteGroups.Count > 0)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
foreach (SceneObjectGroup g in deleteGroups)
|
foreach (SceneObjectGroup g in deleteGroups)
|
||||||
deleteIDs.Remove(g.LocalId);
|
deleteIDs.Remove(g.LocalId);
|
||||||
|
|
||||||
m_asyncSceneObjectDeleter.DeleteToInventory(
|
m_asyncSceneObjectDeleter.DeleteToInventory(
|
||||||
action, destinationID, deleteGroups, remoteClient,
|
action, destinationID, deleteGroups, remoteClient,
|
||||||
<<<<<<< HEAD
|
|
||||||
permissionToDelete && canDelete);
|
|
||||||
}
|
|
||||||
else if (permissionToDelete && canDelete)
|
|
||||||
=======
|
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
if (takeGroups.Count > 0)
|
if (takeGroups.Count > 0)
|
||||||
|
@ -2317,7 +2286,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
if (deleteIDs.Count > 0)
|
if (deleteIDs.Count > 0)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
foreach (SceneObjectGroup g in deleteGroups)
|
foreach (SceneObjectGroup g in deleteGroups)
|
||||||
DeleteSceneObject(g, true);
|
DeleteSceneObject(g, true);
|
||||||
|
@ -2361,7 +2329,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
item.AssetType = asset.Type;
|
item.AssetType = asset.Type;
|
||||||
item.InvType = (int)InventoryType.Object;
|
item.InvType = (int)InventoryType.Object;
|
||||||
|
|
||||||
InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.Object);
|
InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, FolderType.Object);
|
||||||
if (folder != null)
|
if (folder != null)
|
||||||
item.Folder = folder.ID;
|
item.Folder = folder.ID;
|
||||||
else // oopsies
|
else // oopsies
|
||||||
|
@ -2435,34 +2403,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData));
|
string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData));
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
try
|
try
|
||||||
=======
|
|
||||||
if (e == null || attachment) // Single
|
|
||||||
{
|
|
||||||
SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
|
|
||||||
/*
|
|
||||||
if (!attachment)
|
|
||||||
{
|
|
||||||
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
|
||||||
g.RootPart.AttachedPos = g.AbsolutePosition;
|
|
||||||
g.RootPart.AttachRotation = g.GroupRotation;
|
|
||||||
if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
|
|
||||||
g.RootPart.Shape.PCode != (byte)PCode.Tree)
|
|
||||||
g.RootPart.Shape.State = 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
objlist.Add(g);
|
|
||||||
veclist.Add(new Vector3(0, 0, 0));
|
|
||||||
bbox = g.GetAxisAlignedBoundingBox(out offsetHeight);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
|
using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
|
using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
|
||||||
{
|
{
|
||||||
reader.Read();
|
reader.Read();
|
||||||
|
@ -2526,28 +2470,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(n.OuterXml);
|
|
||||||
/*
|
|
||||||
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
|
||||||
g.RootPart.AttachedPos = g.AbsolutePosition;
|
|
||||||
g.RootPart.AttachRotation = g.GroupRotation;
|
|
||||||
if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
|
|
||||||
g.RootPart.Shape.PCode != (byte)PCode.Tree)
|
|
||||||
g.RootPart.Shape.State = 0;
|
|
||||||
*/
|
|
||||||
objlist.Add(g);
|
|
||||||
|
|
||||||
XmlElement el = (XmlElement)n;
|
|
||||||
string rawX = el.GetAttribute("offsetx");
|
|
||||||
string rawY = el.GetAttribute("offsety");
|
|
||||||
string rawZ = el.GetAttribute("offsetz");
|
|
||||||
|
|
||||||
float x = Convert.ToSingle(rawX);
|
|
||||||
float y = Convert.ToSingle(rawY);
|
|
||||||
float z = Convert.ToSingle(rawZ);
|
|
||||||
veclist.Add(new Vector3(x, y, z));
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -551,7 +551,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder)
|
void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems);
|
SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems);
|
||||||
|
@ -562,10 +561,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
string.Format(
|
string.Format(
|
||||||
"[AGENT INVENTORY]: Error in SendInventoryAsync() for {0} with folder ID {1}. Exception ", e));
|
"[AGENT INVENTORY]: Error in SendInventoryAsync() for {0} with folder ID {1}. Exception ", e));
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
Thread.Sleep(20);
|
Thread.Sleep(20);
|
||||||
SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems);
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendInventoryComplete(IAsyncResult iar)
|
void SendInventoryComplete(IAsyncResult iar)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,3 @@
|
||||||
<<<<<<< HEAD
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
@ -201,7 +200,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// If -1 then updates until shutdown.
|
/// If -1 then updates until shutdown.
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns>true if update completed within minimum frame time, false otherwise.</returns>
|
/// <returns>true if update completed within minimum frame time, false otherwise.</returns>
|
||||||
public abstract bool Update(int frames);
|
public abstract void Update(int frames);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -635,603 +634,3 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep);
|
public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
/*
|
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* * Neither the name of the OpenSimulator Project nor the
|
|
||||||
* names of its contributors may be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using log4net;
|
|
||||||
using Nini.Config;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Framework.Console;
|
|
||||||
|
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
|
||||||
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Scenes
|
|
||||||
{
|
|
||||||
public abstract class SceneBase : IScene
|
|
||||||
{
|
|
||||||
protected static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
protected static readonly string LogHeader = "[SCENE]";
|
|
||||||
|
|
||||||
#region Events
|
|
||||||
|
|
||||||
public event restart OnRestart;
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Fields
|
|
||||||
|
|
||||||
public string Name { get { return RegionInfo.RegionName; } }
|
|
||||||
|
|
||||||
public IConfigSource Config
|
|
||||||
{
|
|
||||||
get { return GetConfig(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual IConfigSource GetConfig()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// All the region modules attached to this scene.
|
|
||||||
/// </value>
|
|
||||||
public Dictionary<string, IRegionModuleBase> RegionModules
|
|
||||||
{
|
|
||||||
get { return m_regionModules; }
|
|
||||||
}
|
|
||||||
private Dictionary<string, IRegionModuleBase> m_regionModules = new Dictionary<string, IRegionModuleBase>();
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// The module interfaces available from this scene.
|
|
||||||
/// </value>
|
|
||||||
protected Dictionary<Type, List<object>> ModuleInterfaces = new Dictionary<Type, List<object>>();
|
|
||||||
|
|
||||||
protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>();
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// The module commanders available from this scene
|
|
||||||
/// </value>
|
|
||||||
protected Dictionary<string, ICommander> m_moduleCommanders = new Dictionary<string, ICommander>();
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// Registered classes that are capable of creating entities.
|
|
||||||
/// </value>
|
|
||||||
protected Dictionary<PCode, IEntityCreator> m_entityCreators = new Dictionary<PCode, IEntityCreator>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
|
|
||||||
/// dispensed.
|
|
||||||
/// </summary>
|
|
||||||
protected uint m_lastAllocatedLocalId = 720000;
|
|
||||||
|
|
||||||
private readonly Mutex _primAllocateMutex = new Mutex(false);
|
|
||||||
|
|
||||||
protected readonly ClientManager m_clientManager = new ClientManager();
|
|
||||||
|
|
||||||
public bool LoginsEnabled
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return m_loginsEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (m_loginsEnabled != value)
|
|
||||||
{
|
|
||||||
m_loginsEnabled = value;
|
|
||||||
EventManager.TriggerRegionLoginsStatusChange(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private bool m_loginsEnabled;
|
|
||||||
|
|
||||||
public bool Ready
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return m_ready;
|
|
||||||
}
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (m_ready != value)
|
|
||||||
{
|
|
||||||
m_ready = value;
|
|
||||||
EventManager.TriggerRegionReadyStatusChange(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private bool m_ready;
|
|
||||||
|
|
||||||
public float TimeDilation
|
|
||||||
{
|
|
||||||
get { return 1.0f; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ulong m_regionHandle;
|
|
||||||
protected string m_regionName;
|
|
||||||
|
|
||||||
public ITerrainChannel Heightmap;
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// Allows retrieval of land information for this scene.
|
|
||||||
/// </value>
|
|
||||||
public ILandChannel LandChannel;
|
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// Manage events that occur in this scene (avatar movement, script rez, etc.). Commonly used by region modules
|
|
||||||
/// to subscribe to scene events.
|
|
||||||
/// </value>
|
|
||||||
public EventManager EventManager
|
|
||||||
{
|
|
||||||
get { return m_eventManager; }
|
|
||||||
}
|
|
||||||
protected EventManager m_eventManager;
|
|
||||||
|
|
||||||
protected ScenePermissions m_permissions;
|
|
||||||
public ScenePermissions Permissions
|
|
||||||
{
|
|
||||||
get { return m_permissions; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string m_datastore;
|
|
||||||
|
|
||||||
/* Used by the loadbalancer plugin on GForge */
|
|
||||||
protected RegionStatus m_regStatus;
|
|
||||||
public RegionStatus RegionStatus
|
|
||||||
{
|
|
||||||
get { return m_regStatus; }
|
|
||||||
set { m_regStatus = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public SceneBase(RegionInfo regInfo)
|
|
||||||
{
|
|
||||||
RegionInfo = regInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Update Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called to update the scene loop by a number of frames and until shutdown.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="frames">
|
|
||||||
/// Number of frames to update. Exits on shutdown even if there are frames remaining.
|
|
||||||
/// If -1 then updates until shutdown.
|
|
||||||
/// </param>
|
|
||||||
public abstract void Update(int frames);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Terrain Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Loads the World heightmap
|
|
||||||
/// </summary>
|
|
||||||
public abstract void LoadWorldMap();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send the region heightmap to the client
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="RemoteClient">Client to send to</param>
|
|
||||||
public virtual void SendLayerData(IClientAPI RemoteClient)
|
|
||||||
{
|
|
||||||
// RemoteClient.SendLayerData(Heightmap.GetFloatsSerialised());
|
|
||||||
ITerrainModule terrModule = RequestModuleInterface<ITerrainModule>();
|
|
||||||
if (terrModule != null)
|
|
||||||
{
|
|
||||||
terrModule.PushTerrain(RemoteClient);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Add/Remove Agent/Avatar
|
|
||||||
|
|
||||||
public abstract ISceneAgent AddNewAgent(IClientAPI client, PresenceType type);
|
|
||||||
|
|
||||||
public abstract bool CloseAgent(UUID agentID, bool force);
|
|
||||||
|
|
||||||
public bool TryGetScenePresence(UUID agentID, out object scenePresence)
|
|
||||||
{
|
|
||||||
scenePresence = null;
|
|
||||||
ScenePresence sp = null;
|
|
||||||
if (TryGetScenePresence(agentID, out sp))
|
|
||||||
{
|
|
||||||
scenePresence = sp;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Try to get a scene presence from the scene
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="agentID"></param>
|
|
||||||
/// <param name="scenePresence">null if there is no scene presence with the given agent id</param>
|
|
||||||
/// <returns>true if there was a scene presence with the given id, false otherwise.</returns>
|
|
||||||
public abstract bool TryGetScenePresence(UUID agentID, out ScenePresence scenePresence);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public virtual RegionInfo RegionInfo { get; private set; }
|
|
||||||
|
|
||||||
#region admin stuff
|
|
||||||
|
|
||||||
public abstract void OtherRegionUp(GridRegion otherRegion);
|
|
||||||
|
|
||||||
public virtual string GetSimulatorVersion()
|
|
||||||
{
|
|
||||||
return "OpenSimulator Server";
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Shutdown
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tidy before shutdown
|
|
||||||
/// </summary>
|
|
||||||
public virtual void Close()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
EventManager.TriggerShutdown();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.Error(string.Format("[SCENE]: SceneBase.cs: Close() - Failed with exception ", e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns a new unallocated local ID
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A brand new local ID</returns>
|
|
||||||
public uint AllocateLocalId()
|
|
||||||
{
|
|
||||||
uint myID;
|
|
||||||
|
|
||||||
_primAllocateMutex.WaitOne();
|
|
||||||
myID = ++m_lastAllocatedLocalId;
|
|
||||||
_primAllocateMutex.ReleaseMutex();
|
|
||||||
|
|
||||||
return myID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public uint AllocatePresenceLocalId()
|
|
||||||
{
|
|
||||||
uint myID;
|
|
||||||
|
|
||||||
_primAllocateMutex.WaitOne();
|
|
||||||
myID = ++m_lastAllocatedLocalId;
|
|
||||||
++m_lastAllocatedLocalId;
|
|
||||||
_primAllocateMutex.ReleaseMutex();
|
|
||||||
|
|
||||||
return myID;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Module Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Add a region-module to this scene. TODO: This will replace AddModule in the future.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="module"></param>
|
|
||||||
public void AddRegionModule(string name, IRegionModuleBase module)
|
|
||||||
{
|
|
||||||
if (!RegionModules.ContainsKey(name))
|
|
||||||
{
|
|
||||||
RegionModules.Add(name, module);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveRegionModule(string name)
|
|
||||||
{
|
|
||||||
RegionModules.Remove(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Register a module commander.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="commander"></param>
|
|
||||||
public void RegisterModuleCommander(ICommander commander)
|
|
||||||
{
|
|
||||||
lock (m_moduleCommanders)
|
|
||||||
{
|
|
||||||
m_moduleCommanders.Add(commander.Name, commander);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Unregister a module commander and all its commands
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
public void UnregisterModuleCommander(string name)
|
|
||||||
{
|
|
||||||
lock (m_moduleCommanders)
|
|
||||||
{
|
|
||||||
ICommander commander;
|
|
||||||
if (m_moduleCommanders.TryGetValue(name, out commander))
|
|
||||||
m_moduleCommanders.Remove(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Get a module commander
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <returns>The module commander, null if no module commander with that name was found</returns>
|
|
||||||
public ICommander GetCommander(string name)
|
|
||||||
{
|
|
||||||
lock (m_moduleCommanders)
|
|
||||||
{
|
|
||||||
if (m_moduleCommanders.ContainsKey(name))
|
|
||||||
return m_moduleCommanders[name];
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Dictionary<string, ICommander> GetCommanders()
|
|
||||||
{
|
|
||||||
return m_moduleCommanders;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Register an interface to a region module. This allows module methods to be called directly as
|
|
||||||
/// well as via events. If there is already a module registered for this interface, it is not replaced
|
|
||||||
/// (is this the best behaviour?)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="mod"></param>
|
|
||||||
public void RegisterModuleInterface<M>(M mod)
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[SCENE BASE]: Registering interface {0}", typeof(M));
|
|
||||||
|
|
||||||
List<Object> l = null;
|
|
||||||
if (!ModuleInterfaces.TryGetValue(typeof(M), out l))
|
|
||||||
{
|
|
||||||
l = new List<Object>();
|
|
||||||
ModuleInterfaces.Add(typeof(M), l);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (l.Count > 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
l.Add(mod);
|
|
||||||
|
|
||||||
if (mod is IEntityCreator)
|
|
||||||
{
|
|
||||||
IEntityCreator entityCreator = (IEntityCreator)mod;
|
|
||||||
foreach (PCode pcode in entityCreator.CreationCapabilities)
|
|
||||||
{
|
|
||||||
m_entityCreators[pcode] = entityCreator;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UnregisterModuleInterface<M>(M mod)
|
|
||||||
{
|
|
||||||
List<Object> l;
|
|
||||||
if (ModuleInterfaces.TryGetValue(typeof(M), out l))
|
|
||||||
{
|
|
||||||
if (l.Remove(mod))
|
|
||||||
{
|
|
||||||
if (mod is IEntityCreator)
|
|
||||||
{
|
|
||||||
IEntityCreator entityCreator = (IEntityCreator)mod;
|
|
||||||
foreach (PCode pcode in entityCreator.CreationCapabilities)
|
|
||||||
{
|
|
||||||
m_entityCreators[pcode] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void StackModuleInterface<M>(M mod)
|
|
||||||
{
|
|
||||||
List<Object> l;
|
|
||||||
if (ModuleInterfaces.ContainsKey(typeof(M)))
|
|
||||||
l = ModuleInterfaces[typeof(M)];
|
|
||||||
else
|
|
||||||
l = new List<Object>();
|
|
||||||
|
|
||||||
if (l.Contains(mod))
|
|
||||||
return;
|
|
||||||
|
|
||||||
l.Add(mod);
|
|
||||||
|
|
||||||
if (mod is IEntityCreator)
|
|
||||||
{
|
|
||||||
IEntityCreator entityCreator = (IEntityCreator)mod;
|
|
||||||
foreach (PCode pcode in entityCreator.CreationCapabilities)
|
|
||||||
{
|
|
||||||
m_entityCreators[pcode] = entityCreator;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ModuleInterfaces[typeof(M)] = l;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the given interface, retrieve the region module which implements it.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>null if there is no registered module implementing that interface</returns>
|
|
||||||
public T RequestModuleInterface<T>()
|
|
||||||
{
|
|
||||||
if (ModuleInterfaces.ContainsKey(typeof(T)) &&
|
|
||||||
(ModuleInterfaces[typeof(T)].Count > 0))
|
|
||||||
return (T)ModuleInterfaces[typeof(T)][0];
|
|
||||||
else
|
|
||||||
return default(T);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the given interface, retrieve an array of region modules that implement it.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>an empty array if there are no registered modules implementing that interface</returns>
|
|
||||||
public T[] RequestModuleInterfaces<T>()
|
|
||||||
{
|
|
||||||
if (ModuleInterfaces.ContainsKey(typeof(T)))
|
|
||||||
{
|
|
||||||
List<T> ret = new List<T>();
|
|
||||||
|
|
||||||
foreach (Object o in ModuleInterfaces[typeof(T)])
|
|
||||||
ret.Add((T)o);
|
|
||||||
return ret.ToArray();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new T[] {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Call this from a region module to add a command to the OpenSim console.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="mod"></param>
|
|
||||||
/// <param name="command"></param>
|
|
||||||
/// <param name="shorthelp"></param>
|
|
||||||
/// <param name="longhelp"></param>
|
|
||||||
/// <param name="callback"></param>
|
|
||||||
public void AddCommand(IRegionModuleBase module, string command, string shorthelp, string longhelp, CommandDelegate callback)
|
|
||||||
{
|
|
||||||
AddCommand(module, command, shorthelp, longhelp, string.Empty, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Call this from a region module to add a command to the OpenSim console.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="mod">
|
|
||||||
/// The use of IRegionModuleBase is a cheap trick to get a different method signature,
|
|
||||||
/// though all new modules should be using interfaces descended from IRegionModuleBase anyway.
|
|
||||||
/// </param>
|
|
||||||
/// <param name="category">
|
|
||||||
/// Category of the command. This is the section under which it will appear when the user asks for help
|
|
||||||
/// </param>
|
|
||||||
/// <param name="command"></param>
|
|
||||||
/// <param name="shorthelp"></param>
|
|
||||||
/// <param name="longhelp"></param>
|
|
||||||
/// <param name="callback"></param>
|
|
||||||
public void AddCommand(
|
|
||||||
string category, IRegionModuleBase module, string command, string shorthelp, string longhelp, CommandDelegate callback)
|
|
||||||
{
|
|
||||||
AddCommand(category, module, command, shorthelp, longhelp, string.Empty, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Call this from a region module to add a command to the OpenSim console.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="mod"></param>
|
|
||||||
/// <param name="command"></param>
|
|
||||||
/// <param name="shorthelp"></param>
|
|
||||||
/// <param name="longhelp"></param>
|
|
||||||
/// <param name="descriptivehelp"></param>
|
|
||||||
/// <param name="callback"></param>
|
|
||||||
public void AddCommand(IRegionModuleBase module, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback)
|
|
||||||
{
|
|
||||||
string moduleName = "";
|
|
||||||
|
|
||||||
if (module != null)
|
|
||||||
moduleName = module.Name;
|
|
||||||
|
|
||||||
AddCommand(moduleName, module, command, shorthelp, longhelp, descriptivehelp, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Call this from a region module to add a command to the OpenSim console.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="category">
|
|
||||||
/// Category of the command. This is the section under which it will appear when the user asks for help
|
|
||||||
/// </param>
|
|
||||||
/// <param name="mod"></param>
|
|
||||||
/// <param name="command"></param>
|
|
||||||
/// <param name="shorthelp"></param>
|
|
||||||
/// <param name="longhelp"></param>
|
|
||||||
/// <param name="descriptivehelp"></param>
|
|
||||||
/// <param name="callback"></param>
|
|
||||||
public void AddCommand(
|
|
||||||
string category, IRegionModuleBase module, string command,
|
|
||||||
string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback)
|
|
||||||
{
|
|
||||||
if (MainConsole.Instance == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
bool shared = false;
|
|
||||||
|
|
||||||
if (module != null)
|
|
||||||
shared = module is ISharedRegionModule;
|
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
|
||||||
category, shared, command, shorthelp, longhelp, descriptivehelp, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual ISceneObject DeserializeObject(string representation)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool AllowScriptCrossings
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Start()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Restart()
|
|
||||||
{
|
|
||||||
// This has to be here to fire the event
|
|
||||||
restart handlerPhysicsCrash = OnRestart;
|
|
||||||
if (handlerPhysicsCrash != null)
|
|
||||||
handlerPhysicsCrash(RegionInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
|
@ -1928,7 +1928,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectGroupsByLocalPartID[part.LocalId] = parentGroup;
|
SceneObjectGroupsByLocalPartID[part.LocalId] = parentGroup;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
parentGroup.AdjustChildPrimPermissions();
|
parentGroup.AdjustChildPrimPermissions(false);
|
||||||
parentGroup.HasGroupChanged = true;
|
parentGroup.HasGroupChanged = true;
|
||||||
parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true);
|
parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true);
|
||||||
parentGroup.ScheduleGroupForFullUpdate();
|
parentGroup.ScheduleGroupForFullUpdate();
|
||||||
|
@ -2066,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// return unless the root is deleted. This will remove them
|
// return unless the root is deleted. This will remove them
|
||||||
// from the database. They will be rewritten immediately,
|
// from the database. They will be rewritten immediately,
|
||||||
// minus the rows for the unlinked child prims.
|
// minus the rows for the unlinked child prims.
|
||||||
g.AdjustChildPrimPermissions();
|
g.AdjustChildPrimPermissions(false);
|
||||||
m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID);
|
m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID);
|
||||||
g.TriggerScriptChangedEvent(Changed.LINK);
|
g.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
g.HasGroupChanged = true; // Persist
|
g.HasGroupChanged = true; // Persist
|
||||||
|
@ -2154,13 +2154,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (m_parentScene.Permissions.CanDuplicateObject(
|
if (m_parentScene.Permissions.CanDuplicateObject(
|
||||||
original.PrimCount, original.UUID, AgentID, original.AbsolutePosition))
|
original.PrimCount, original.UUID, AgentID, original.AbsolutePosition))
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[SCENEGRAPH]: Attempt to duplicate nonexistent prim id {0} by {1}", originalPrimID, AgentID);
|
|
||||||
=======
|
|
||||||
SceneObjectGroup copy = original.Copy(true);
|
SceneObjectGroup copy = original.Copy(true);
|
||||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (original.OwnerID != AgentID)
|
if (original.OwnerID != AgentID)
|
||||||
{
|
{
|
||||||
|
@ -2197,30 +2192,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// PROBABLE END OF FIXME
|
// PROBABLE END OF FIXME
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// FIXME: This section needs to be refactored so that it just calls AddSceneObject()
|
|
||||||
Entities.Add(copy);
|
|
||||||
|
|
||||||
lock (SceneObjectGroupsByFullID)
|
|
||||||
SceneObjectGroupsByFullID[copy.UUID] = copy;
|
|
||||||
|
|
||||||
SceneObjectPart[] children = copy.Parts;
|
|
||||||
|
|
||||||
lock (SceneObjectGroupsByFullPartID)
|
|
||||||
{
|
|
||||||
SceneObjectGroupsByFullPartID[copy.UUID] = copy;
|
|
||||||
foreach (SceneObjectPart part in children)
|
|
||||||
SceneObjectGroupsByFullPartID[part.UUID] = copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (SceneObjectGroupsByLocalPartID)
|
|
||||||
{
|
|
||||||
SceneObjectGroupsByLocalPartID[copy.LocalId] = copy;
|
|
||||||
foreach (SceneObjectPart part in children)
|
|
||||||
SceneObjectGroupsByLocalPartID[part.LocalId] = copy;
|
|
||||||
}
|
|
||||||
// PROBABLE END OF FIXME
|
|
||||||
|
|
||||||
// Since we copy from a source group that is in selected
|
// Since we copy from a source group that is in selected
|
||||||
// state, but the copy is shown deselected in the viewer,
|
// state, but the copy is shown deselected in the viewer,
|
||||||
// We need to clear the selection flag here, else that
|
// We need to clear the selection flag here, else that
|
||||||
|
@ -2228,33 +2199,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// think it's selected, so it will never send a deselect...
|
// think it's selected, so it will never send a deselect...
|
||||||
copy.IsSelected = false;
|
copy.IsSelected = false;
|
||||||
|
|
||||||
m_numTotalPrim += copy.Parts.Length;
|
|
||||||
|
|
||||||
// Go through all parts (primitives and meshes) of this Scene Object
|
|
||||||
foreach (SceneObjectPart part in copy.Parts)
|
|
||||||
{
|
|
||||||
// Keep track of the total number of meshes or geometric primitives now in the scene;
|
|
||||||
// determine which object this is based on its primitive type: sculpted (sculpt) prim refers to
|
|
||||||
// a mesh and all other prims (i.e. box, sphere, etc) are geometric primitives
|
|
||||||
if (part.GetPrimType() == PrimType.SCULPT)
|
|
||||||
m_numMesh++;
|
|
||||||
else
|
|
||||||
m_numPrim++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rot != Quaternion.Identity)
|
|
||||||
{
|
|
||||||
copy.UpdateGroupRotationR(rot);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
// Since we copy from a source group that is in selected
|
|
||||||
// state, but the copy is shown deselected in the viewer,
|
|
||||||
// We need to clear the selection flag here, else that
|
|
||||||
// prim never gets persisted at all. The client doesn't
|
|
||||||
// think it's selected, so it will never send a deselect...
|
|
||||||
copy.IsSelected = false;
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
m_numPrim += copy.Parts.Length;
|
m_numPrim += copy.Parts.Length;
|
||||||
|
|
||||||
if (rot != Quaternion.Identity)
|
if (rot != Quaternion.Identity)
|
||||||
|
|
|
@ -266,15 +266,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
<<<<<<< HEAD
|
|
||||||
// m_log.DebugFormat("[SCENE OBJECT GROUP INVENTORY]: Effective perms of {0} are {1}", part.Name, (OpenMetaverse.PermissionMask)part.OwnerMask);
|
|
||||||
ownerMask &= part.OwnerMask;
|
|
||||||
=======
|
|
||||||
if (useBase)
|
if (useBase)
|
||||||
ownerMask &= part.BaseMask;
|
ownerMask &= part.BaseMask;
|
||||||
else
|
else
|
||||||
ownerMask &= part.OwnerMask;
|
ownerMask &= part.OwnerMask;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
perms &= part.Inventory.MaskEffectivePermissions();
|
perms &= part.Inventory.MaskEffectivePermissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,17 +122,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// since the group's last persistent backup
|
/// since the group's last persistent backup
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private bool m_hasGroupChanged = false;
|
private bool m_hasGroupChanged = false;
|
||||||
<<<<<<< HEAD
|
|
||||||
private long timeFirstChanged;
|
|
||||||
private long timeLastChanged;
|
|
||||||
=======
|
|
||||||
private long timeFirstChanged = 0;
|
private long timeFirstChanged = 0;
|
||||||
private long timeLastChanged = 0;
|
private long timeLastChanged = 0;
|
||||||
private long m_maxPersistTime = 0;
|
private long m_maxPersistTime = 0;
|
||||||
private long m_minPersistTime = 0;
|
private long m_minPersistTime = 0;
|
||||||
// private Random m_rand;
|
// private Random m_rand;
|
||||||
private List<ScenePresence> m_linkedAvatars = new List<ScenePresence>();
|
private List<ScenePresence> m_linkedAvatars = new List<ScenePresence>();
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This indicates whether the object has changed such that it needs to be repersisted to permenant storage
|
/// This indicates whether the object has changed such that it needs to be repersisted to permenant storage
|
||||||
|
@ -205,7 +200,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// the prims in the database still use the old SceneGroupID. That's a problem if the group
|
/// the prims in the database still use the old SceneGroupID. That's a problem if the group
|
||||||
/// is deleted, because we delete groups by searching for prims by their SceneGroupID.
|
/// is deleted, because we delete groups by searching for prims by their SceneGroupID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
<<<<<<< HEAD
|
|
||||||
public bool GroupContainsForeignPrims
|
public bool GroupContainsForeignPrims
|
||||||
{
|
{
|
||||||
private set
|
private set
|
||||||
|
@ -218,9 +212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
get { return m_groupContainsForeignPrims; }
|
get { return m_groupContainsForeignPrims; }
|
||||||
}
|
}
|
||||||
|
|
||||||
=======
|
|
||||||
public bool HasGroupChangedDueToDelink { get; set; }
|
public bool HasGroupChangedDueToDelink { get; set; }
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
private bool isTimeToPersist()
|
private bool isTimeToPersist()
|
||||||
{
|
{
|
||||||
|
@ -350,7 +342,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
get { return RootPart.VolumeDetectActive; }
|
get { return RootPart.VolumeDetectActive; }
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
private Vector3 lastPhysGroupPos;
|
private Vector3 lastPhysGroupPos;
|
||||||
private Quaternion lastPhysGroupRot;
|
private Quaternion lastPhysGroupRot;
|
||||||
|
|
||||||
|
@ -358,9 +349,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Is this entity set to be saved in persistent storage?
|
/// Is this entity set to be saved in persistent storage?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Backup { get; private set; }
|
public bool Backup { get; private set; }
|
||||||
=======
|
|
||||||
private bool m_isBackedUp;
|
private bool m_isBackedUp;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
public bool IsBackedUp
|
public bool IsBackedUp
|
||||||
{
|
{
|
||||||
|
@ -570,146 +560,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
&& !Scene.LoadingPrims
|
&& !Scene.LoadingPrims
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (
|
|
||||||
!Scene.PositionIsInCurrentRegion(val)
|
|
||||||
&& !IsAttachmentCheckFull()
|
|
||||||
&& (!Scene.LoadingPrims)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
IEntityTransferModule entityTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
|
||||||
string version = String.Empty;
|
|
||||||
Vector3 newpos = Vector3.Zero;
|
|
||||||
string failureReason = String.Empty;
|
|
||||||
OpenSim.Services.Interfaces.GridRegion destination = null;
|
|
||||||
|
|
||||||
if (m_rootPart.KeyframeMotion != null)
|
|
||||||
m_rootPart.KeyframeMotion.StartCrossingCheck();
|
|
||||||
|
|
||||||
bool canCross = true;
|
|
||||||
foreach (ScenePresence av in GetSittingAvatars())
|
|
||||||
{
|
|
||||||
// We need to cross these agents. First, let's find
|
|
||||||
// out if any of them can't cross for some reason.
|
|
||||||
// We have to deny the crossing entirely if any
|
|
||||||
// of them are banned. Alternatively, we could
|
|
||||||
// unsit banned agents....
|
|
||||||
|
|
||||||
|
|
||||||
// We set the avatar position as being the object
|
|
||||||
// position to get the region to send to
|
|
||||||
if ((destination = entityTransfer.GetDestination(m_scene, av.UUID, val, out version, out newpos, out failureReason)) == null)
|
|
||||||
{
|
|
||||||
canCross = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_log.DebugFormat("[SCENE OBJECT]: Avatar {0} needs to be crossed to {1}", av.Name, destination.RegionName);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canCross)
|
|
||||||
{
|
|
||||||
// We unparent the SP quietly so that it won't
|
|
||||||
// be made to stand up
|
|
||||||
|
|
||||||
List<avtocrossInfo> avsToCross = new List<avtocrossInfo>();
|
|
||||||
|
|
||||||
foreach (ScenePresence av in GetSittingAvatars())
|
|
||||||
{
|
|
||||||
avtocrossInfo avinfo = new avtocrossInfo();
|
|
||||||
SceneObjectPart parentPart = m_scene.GetSceneObjectPart(av.ParentID);
|
|
||||||
if (parentPart != null)
|
|
||||||
av.ParentUUID = parentPart.UUID;
|
|
||||||
|
|
||||||
avinfo.av = av;
|
|
||||||
avinfo.ParentID = av.ParentID;
|
|
||||||
avsToCross.Add(avinfo);
|
|
||||||
|
|
||||||
av.PrevSitOffset = av.OffsetPosition;
|
|
||||||
av.ParentID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_scene.CrossPrimGroupIntoNewRegion(val, this, true);
|
|
||||||
|
|
||||||
// Normalize
|
|
||||||
if (val.X >= m_scene.RegionInfo.RegionSizeX)
|
|
||||||
val.X -= m_scene.RegionInfo.RegionSizeX;
|
|
||||||
if (val.Y >= m_scene.RegionInfo.RegionSizeY)
|
|
||||||
val.Y -= m_scene.RegionInfo.RegionSizeY;
|
|
||||||
if (val.X < 0)
|
|
||||||
val.X += m_scene.RegionInfo.RegionSizeX;
|
|
||||||
if (val.Y < 0)
|
|
||||||
val.Y += m_scene.RegionInfo.RegionSizeY;
|
|
||||||
|
|
||||||
// If it's deleted, crossing was successful
|
|
||||||
if (IsDeleted)
|
|
||||||
{
|
|
||||||
foreach (avtocrossInfo avinfo in avsToCross)
|
|
||||||
{
|
|
||||||
ScenePresence av = avinfo.av;
|
|
||||||
if (!av.IsInTransit) // just in case...
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val);
|
|
||||||
|
|
||||||
av.IsInTransit = true;
|
|
||||||
|
|
||||||
// A temporary measure to allow regression tests to work.
|
|
||||||
// Quite possibly, all BeginInvoke() calls should be replaced by Util.FireAndForget
|
|
||||||
// or similar since BeginInvoke() always uses the system threadpool to launch
|
|
||||||
// threads rather than any replace threadpool that we might be using.
|
|
||||||
if (Util.FireAndForgetMethod == FireAndForgetMethod.RegressionTest)
|
|
||||||
{
|
|
||||||
entityTransfer.CrossAgentToNewRegionAsync(av, val, destination, av.Flying, version);
|
|
||||||
CrossAgentToNewRegionCompleted(av);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CrossAgentToNewRegionDelegate d = entityTransfer.CrossAgentToNewRegionAsync;
|
|
||||||
d.BeginInvoke(
|
|
||||||
av, val, destination, av.Flying, version,
|
|
||||||
ar => CrossAgentToNewRegionCompleted(d.EndInvoke(ar)), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[SCENE OBJECT]: Not crossing avatar {0} to {1} because it's already in transit", av.Name, val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else // cross failed, put avas back ??
|
|
||||||
{
|
|
||||||
foreach (avtocrossInfo avinfo in avsToCross)
|
|
||||||
{
|
|
||||||
ScenePresence av = avinfo.av;
|
|
||||||
av.ParentUUID = UUID.Zero;
|
|
||||||
av.ParentID = avinfo.ParentID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (m_rootPart.KeyframeMotion != null)
|
|
||||||
m_rootPart.KeyframeMotion.CrossingFailure();
|
|
||||||
|
|
||||||
if (RootPart.PhysActor != null)
|
|
||||||
{
|
|
||||||
RootPart.PhysActor.CrossingFailure();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 oldp = AbsolutePosition;
|
|
||||||
val.X = Util.Clamp<float>(oldp.X, 0.5f, (float)m_scene.RegionInfo.RegionSizeX - 0.5f);
|
|
||||||
val.Y = Util.Clamp<float>(oldp.Y, 0.5f, (float)m_scene.RegionInfo.RegionSizeY - 0.5f);
|
|
||||||
val.Z = Util.Clamp<float>(oldp.Z, 0.5f, Constants.RegionHeight);
|
|
||||||
=======
|
|
||||||
if (!inTransit)
|
if (!inTransit)
|
||||||
{
|
{
|
||||||
inTransit = true;
|
inTransit = true;
|
||||||
SOGCrossDelegate d = CrossAsync;
|
SOGCrossDelegate d = CrossAsync;
|
||||||
d.BeginInvoke(this, val, CrossAsyncCompleted, d);
|
d.BeginInvoke(this, val, CrossAsyncCompleted, d);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1200,7 +1055,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// No avatar should appear more than once in this list.
|
/// No avatar should appear more than once in this list.
|
||||||
/// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart.
|
/// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected internal List<ScenePresence> m_sittingAvatars = new List<ScenePresence>();
|
protected internal List<UUID> m_sittingAvatars = new List<UUID>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -1311,14 +1166,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual void AttachToBackup()
|
public virtual void AttachToBackup()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (CanBeBackedUp)
|
|
||||||
=======
|
|
||||||
if (IsAttachment) return;
|
if (IsAttachment) return;
|
||||||
m_scene.SceneGraph.FireAttachToBackup(this);
|
m_scene.SceneGraph.FireAttachToBackup(this);
|
||||||
|
|
||||||
if (InSceneBackup)
|
// if (InSceneBackup)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID);
|
// "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID);
|
||||||
|
@ -1431,21 +1282,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public void GetAxisAlignedBoundingBoxRaw(out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ)
|
public void GetAxisAlignedBoundingBoxRaw(out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
maxX = -256f;
|
|
||||||
maxY = -256f;
|
|
||||||
maxZ = -256f;
|
|
||||||
minX = 10000f;
|
|
||||||
minY = 10000f;
|
|
||||||
minZ = 10000f;
|
|
||||||
=======
|
|
||||||
maxX = float.MinValue;
|
maxX = float.MinValue;
|
||||||
maxY = float.MinValue;
|
maxY = float.MinValue;
|
||||||
maxZ = float.MinValue;
|
maxZ = float.MinValue;
|
||||||
minX = float.MaxValue;
|
minX = float.MaxValue;
|
||||||
minY = float.MaxValue;
|
minY = float.MaxValue;
|
||||||
minZ = float.MaxValue;
|
minZ = float.MaxValue;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
foreach (SceneObjectPart part in parts)
|
foreach (SceneObjectPart part in parts)
|
||||||
|
@ -1843,17 +1685,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="part"></param>
|
|
||||||
private void SetPartAsNonRoot(SceneObjectPart part)
|
|
||||||
{
|
|
||||||
part.ParentID = m_rootPart.LocalId;
|
|
||||||
part.ClearUndoState();
|
|
||||||
=======
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add the avatar to this linkset (avatar is sat).
|
/// Add the avatar to this linkset (avatar is sat).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1893,7 +1724,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public List<ScenePresence> GetLinkedAvatars()
|
public List<ScenePresence> GetLinkedAvatars()
|
||||||
{
|
{
|
||||||
return m_linkedAvatars;
|
return m_linkedAvatars;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2197,14 +2027,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (Scene != null)
|
if (Scene != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (!sp.IsChildAgent && sp.ParentID == part.LocalId)
|
|
||||||
sp.StandUp();
|
|
||||||
|
|
||||||
if (!silent)
|
|
||||||
=======
|
|
||||||
Scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
|
Scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (avatar.ParentID == LocalId)
|
if (avatar.ParentID == LocalId)
|
||||||
avatar.StandUp();
|
avatar.StandUp();
|
||||||
|
@ -2504,16 +2327,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public SceneObjectGroup Copy(bool userExposed)
|
public SceneObjectGroup Copy(bool userExposed)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// FIXME: This is dangerous since it's easy to forget to reset some references when necessary and end up
|
|
||||||
// with bugs that only occur in some circumstances (e.g. crossing between regions on the same simulator
|
|
||||||
// but not between regions on different simulators). Really, all copying should be done explicitly.
|
|
||||||
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
|
||||||
|
|
||||||
dupe.Backup = false;
|
|
||||||
dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>();
|
|
||||||
dupe.m_sittingAvatars = new List<ScenePresence>();
|
|
||||||
=======
|
|
||||||
m_dupeInProgress = true;
|
m_dupeInProgress = true;
|
||||||
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
||||||
dupe.m_isBackedUp = false;
|
dupe.m_isBackedUp = false;
|
||||||
|
@ -2525,7 +2338,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
dupe.m_linkedAvatars = new List<ScenePresence>();
|
dupe.m_linkedAvatars = new List<ScenePresence>();
|
||||||
dupe.m_sittingAvatars = new List<UUID>();
|
dupe.m_sittingAvatars = new List<UUID>();
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
||||||
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
||||||
|
|
||||||
|
@ -2700,12 +2512,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return RootPart.Torque;
|
return RootPart.Torque;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
public void MoveToTarget(Vector3 target, float tau)
|
|
||||||
=======
|
|
||||||
// This is used by both Double-Click Auto-Pilot and llMoveToTarget() in an attached object
|
// This is used by both Double-Click Auto-Pilot and llMoveToTarget() in an attached object
|
||||||
public void moveToTarget(Vector3 target, float tau)
|
public void MoveToTarget(Vector3 target, float tau)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
{
|
{
|
||||||
if (IsAttachment)
|
if (IsAttachment)
|
||||||
{
|
{
|
||||||
|
@ -2732,21 +2540,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (IsAttachment)
|
if (IsAttachment)
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
if (avatar != null)
|
|
||||||
avatar.ResetMoveToTarget();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PhysicsActor pa = RootPart.PhysActor;
|
|
||||||
|
|
||||||
if (pa != null && pa.PIDActive)
|
|
||||||
{
|
|
||||||
pa.PIDActive = false;
|
|
||||||
|
|
||||||
ScheduleGroupForTerseUpdate();
|
|
||||||
=======
|
|
||||||
if (avatar != null)
|
if (avatar != null)
|
||||||
{
|
{
|
||||||
avatar.ResetMoveToTarget();
|
avatar.ResetMoveToTarget();
|
||||||
|
@ -2786,7 +2580,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
rootpart.PhysActor.APIDDamping = damping;
|
rootpart.PhysActor.APIDDamping = damping;
|
||||||
rootpart.PhysActor.APIDActive = true;
|
rootpart.PhysActor.APIDActive = true;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3484,18 +3277,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
linkPart.Rezzed = RootPart.Rezzed;
|
linkPart.Rezzed = RootPart.Rezzed;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// We must persist the delinked group to the database immediately, for safety. The problem
|
|
||||||
// is that although in memory the new group has a new SceneGroupID, in the database it
|
|
||||||
// still has the parent group's SceneGroupID (until the next backup). This means that if the
|
|
||||||
// parent group is deleted then the delinked group will also be deleted from the database.
|
|
||||||
// This problem will disappear if the region remains alive long enough for another backup,
|
|
||||||
// since at that time the delinked group's new SceneGroupID will be written to the database.
|
|
||||||
// But if the region crashes before that then the prims will be permanently gone, and this must
|
|
||||||
// not happen. (We can't use a just-in-time trick like GroupContainsForeignPrims in this case
|
|
||||||
// because the delinked group doesn't know when the source group is deleted.)
|
|
||||||
m_scene.ForceSceneObjectBackup(objectGroup);
|
|
||||||
=======
|
|
||||||
// When we delete a group, we currently have to force persist to the database if the object id has changed
|
// When we delete a group, we currently have to force persist to the database if the object id has changed
|
||||||
// (since delete works by deleting all rows which have a given object id)
|
// (since delete works by deleting all rows which have a given object id)
|
||||||
|
|
||||||
|
@ -3507,7 +3288,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_rootPart.PhysActor.Building = false;
|
m_rootPart.PhysActor.Building = false;
|
||||||
|
|
||||||
objectGroup.HasGroupChangedDueToDelink = true;
|
objectGroup.HasGroupChangedDueToDelink = true;
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (sendEvents)
|
if (sendEvents)
|
||||||
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
|
@ -3521,13 +3301,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="objectGroup"></param>
|
/// <param name="objectGroup"></param>
|
||||||
public virtual void DetachFromBackup()
|
public virtual void DetachFromBackup()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (Backup && Scene != null)
|
|
||||||
=======
|
|
||||||
if (m_scene != null)
|
if (m_scene != null)
|
||||||
m_scene.SceneGraph.FireDetachFromBackup(this);
|
m_scene.SceneGraph.FireDetachFromBackup(this);
|
||||||
if (m_isBackedUp && Scene != null)
|
if (m_isBackedUp && Scene != null)
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
m_scene.EventManager.OnBackup -= ProcessBackup;
|
m_scene.EventManager.OnBackup -= ProcessBackup;
|
||||||
|
|
||||||
Backup = false;
|
Backup = false;
|
||||||
|
@ -3973,9 +3749,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF);
|
RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
AdjustChildPrimPermissions(Scene.Permissions.IsGod(AgentID));
|
|
||||||
=======
|
|
||||||
bool god = Scene.Permissions.IsGod(AgentID);
|
bool god = Scene.Permissions.IsGod(AgentID);
|
||||||
|
|
||||||
if (field == 1 && god)
|
if (field == 1 && god)
|
||||||
|
@ -3986,8 +3759,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
AdjustChildPrimPermissions();
|
AdjustChildPrimPermissions(false);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (field == 1 && god) // Base mask was set. Update all child part inventories
|
if (field == 1 && god) // Base mask was set. Update all child part inventories
|
||||||
{
|
{
|
||||||
|
@ -5037,10 +4809,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// down after it move one place down the list.
|
/// down after it move one place down the list.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns>
|
/// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns>
|
||||||
public List<ScenePresence> GetSittingAvatars()
|
public List<UUID> GetSittingAvatars()
|
||||||
{
|
{
|
||||||
lock (m_sittingAvatars)
|
lock (m_sittingAvatars)
|
||||||
return new List<ScenePresence>(m_sittingAvatars);
|
return new List<UUID>(m_sittingAvatars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1046,39 +1046,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
if (Util.IsNanOrInfinity(value))
|
if (Util.IsNanOrInfinity(value))
|
||||||
m_angularVelocity = Vector3.Zero;
|
m_angularVelocity = Vector3.Zero;
|
||||||
else
|
else
|
||||||
m_angularVelocity = value;
|
m_angularVelocity = value;
|
||||||
|
|
||||||
PhysicsActor actor = PhysActor;
|
|
||||||
if ((actor != null) && actor.IsPhysical)
|
|
||||||
actor.RotationalVelocity = m_angularVelocity;
|
|
||||||
=======
|
|
||||||
m_angularVelocity = value;
|
|
||||||
PhysicsActor actor = PhysActor;
|
PhysicsActor actor = PhysActor;
|
||||||
if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE)
|
if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE)
|
||||||
{
|
{
|
||||||
actor.RotationalVelocity = m_angularVelocity;
|
actor.RotationalVelocity = m_angularVelocity;
|
||||||
}
|
}
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary></summary>
|
/// <summary></summary>
|
||||||
public Vector3 Acceleration
|
public Vector3 Acceleration
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
get { return m_acceleration; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (Util.IsNanOrInfinity(value))
|
|
||||||
m_acceleration = Vector3.Zero;
|
|
||||||
else
|
|
||||||
m_acceleration = value;
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
PhysicsActor actor = PhysActor;
|
PhysicsActor actor = PhysActor;
|
||||||
|
@ -1089,8 +1072,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return m_acceleration;
|
return m_acceleration;
|
||||||
}
|
}
|
||||||
|
|
||||||
set { m_acceleration = value; }
|
set
|
||||||
>>>>>>> avn/ubitvar
|
{
|
||||||
|
if (Util.IsNanOrInfinity(value))
|
||||||
|
m_acceleration = Vector3.Zero;
|
||||||
|
else
|
||||||
|
m_acceleration = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
@ -1431,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <value>
|
/// <value>
|
||||||
/// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene.
|
/// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene.
|
||||||
/// </value>
|
/// </value>
|
||||||
private HashSet<ScenePresence> m_sittingAvatars;
|
private HashSet<UUID> m_sittingAvatars;
|
||||||
|
|
||||||
public virtual UUID RegionID
|
public virtual UUID RegionID
|
||||||
{
|
{
|
||||||
|
@ -1932,7 +1920,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim)
|
public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
if (pTexAnim.Flags == Primitive.TextureAnimMode.ANIM_OFF)
|
if (pTexAnim.Flags == Primitive.TextureAnimMode.ANIM_OFF)
|
||||||
|
@ -1944,13 +1931,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
data = new byte[16];
|
data = new byte[16];
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
|
||||||
=======
|
|
||||||
if (((int)pTexAnim.Flags & 1) != 0) // ANIM_ON
|
|
||||||
{
|
|
||||||
byte[] data = new byte[16];
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
// The flags don't like conversion from uint to byte, so we have to do
|
// The flags don't like conversion from uint to byte, so we have to do
|
||||||
// it the crappy way. See the above function :(
|
// it the crappy way. See the above function :(
|
||||||
|
|
||||||
|
@ -1962,18 +1942,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos);
|
Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos);
|
||||||
Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4);
|
Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4);
|
||||||
Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8);
|
Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8);
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
|
}
|
||||||
m_TextureAnimation = data;
|
m_TextureAnimation = data;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_TextureAnimation = Utils.EmptyBytes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AdjustSoundGain(double volume)
|
public void AdjustSoundGain(double volume)
|
||||||
{
|
{
|
||||||
|
@ -2240,7 +2212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Array.Copy(Shape.ExtraParams, extraP, extraP.Length);
|
Array.Copy(Shape.ExtraParams, extraP, extraP.Length);
|
||||||
dupe.Shape.ExtraParams = extraP;
|
dupe.Shape.ExtraParams = extraP;
|
||||||
|
|
||||||
dupe.m_sittingAvatars = new HashSet<ScenePresence>();
|
dupe.m_sittingAvatars = new HashSet<UUID>();
|
||||||
|
|
||||||
// safeguard actual copy is done in sog.copy
|
// safeguard actual copy is done in sog.copy
|
||||||
dupe.KeyframeMotion = null;
|
dupe.KeyframeMotion = null;
|
||||||
|
@ -2829,7 +2801,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
CollidingMessage = CreateColliderArgs(this, colliders);
|
CollidingMessage = CreateColliderArgs(this, colliders);
|
||||||
|
|
||||||
if (CollidingMessage.Colliders.Count > 0)
|
if (CollidingMessage.Colliders.Count > 0)
|
||||||
DoNotify(notify, LocalId, CollidingMessage);
|
notify(LocalId, CollidingMessage);
|
||||||
|
|
||||||
if (PassCollisions)
|
if (PassCollisions)
|
||||||
sendToRoot = true;
|
sendToRoot = true;
|
||||||
|
@ -2843,7 +2815,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
CollidingMessage = CreateColliderArgs(ParentGroup.RootPart, colliders);
|
CollidingMessage = CreateColliderArgs(ParentGroup.RootPart, colliders);
|
||||||
if (CollidingMessage.Colliders.Count > 0)
|
if (CollidingMessage.Colliders.Count > 0)
|
||||||
DoNotify(notify, ParentGroup.RootPart.LocalId, CollidingMessage);
|
notify(ParentGroup.RootPart.LocalId, CollidingMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2858,35 +2830,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
colliding.Add(CreateDetObjectForGround());
|
colliding.Add(CreateDetObjectForGround());
|
||||||
LandCollidingMessage.Colliders = colliding;
|
LandCollidingMessage.Colliders = colliding;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
DoNotify(notify, LocalId, LandCollidingMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DoNotify(ScriptCollidingNotification notify, uint id, ColliderArgs collargs)
|
|
||||||
{
|
|
||||||
if (m_parentGroup != null && ParentGroup.Scene != null && ParentGroup.Scene.ShouldUseFireAndForgetForCollisions)
|
|
||||||
{
|
|
||||||
// For those learning C#, FireAndForget takes a function, an object to pass
|
|
||||||
// to that function and an ID string. The "oo => {}" construct is a lambda expression
|
|
||||||
// for a function with one arguement ('oo'). The 'new Object[] {}" construct creates an Object
|
|
||||||
// that is an object array and initializes it with three items (the parameters
|
|
||||||
// being passed). The parameters passed are the function to call ('notify') and
|
|
||||||
// its two arguements. Finally, once in the function (called later by the FireAndForget
|
|
||||||
// thread scheduler), the passed object is cast to an object array and then each
|
|
||||||
// of its items (aoo[0] to aoo[2]) are individually cast to what they are and
|
|
||||||
// then used in a call of the passed ScriptCollidingNotification function.
|
|
||||||
Util.FireAndForget(oo =>
|
|
||||||
{
|
|
||||||
Object[] aoo = (Object[])oo;
|
|
||||||
((ScriptCollidingNotification)aoo[0])((uint)aoo[1], (ColliderArgs)aoo[2]);
|
|
||||||
|
|
||||||
}, new Object[] { notify, id, collargs }, "SOP.Collision");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
notify(id, collargs);
|
|
||||||
=======
|
|
||||||
if (Inventory.ContainsScripts())
|
if (Inventory.ContainsScripts())
|
||||||
{
|
{
|
||||||
if (!PassCollisions)
|
if (!PassCollisions)
|
||||||
|
@ -2898,7 +2841,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot)
|
if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot)
|
||||||
{
|
{
|
||||||
notify(ParentGroup.RootPart.LocalId, LandCollidingMessage);
|
notify(ParentGroup.RootPart.LocalId, LandCollidingMessage);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3046,12 +2988,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (pa != null)
|
if (pa != null)
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
Vector3 newpos = pa.Position;
|
Vector3 newpos = pa.Position;
|
||||||
=======
|
|
||||||
Vector3 newpos = new Vector3(pa.Position.GetBytes(), 0);
|
|
||||||
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
if (!ParentGroup.Scene.PositionIsInCurrentRegion(newpos))
|
if (!ParentGroup.Scene.PositionIsInCurrentRegion(newpos))
|
||||||
{
|
{
|
||||||
// Setting position outside current region will start region crossing
|
// Setting position outside current region will start region crossing
|
||||||
|
@ -3996,14 +3933,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
|
|
||||||
public void StopMoveToTarget()
|
public void StopMoveToTarget()
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ParentGroup.StopMoveToTarget();
|
ParentGroup.StopMoveToTarget();
|
||||||
=======
|
|
||||||
ParentGroup.stopMoveToTarget();
|
|
||||||
|
|
||||||
// ParentGroup.ScheduleGroupForTerseUpdate();
|
|
||||||
//ParentGroup.ScheduleGroupForFullUpdate();
|
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StoreUndoState(ObjectChangeType change)
|
public void StoreUndoState(ObjectChangeType change)
|
||||||
|
@ -4665,8 +4595,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
|
|
||||||
public void ClonePermissions(SceneObjectPart source)
|
public void ClonePermissions(SceneObjectPart source)
|
||||||
{
|
{
|
||||||
bool update = false;
|
|
||||||
|
|
||||||
uint prevOwnerMask = OwnerMask;
|
uint prevOwnerMask = OwnerMask;
|
||||||
uint prevGroupMask = GroupMask;
|
uint prevGroupMask = GroupMask;
|
||||||
uint prevEveryoneMask = EveryoneMask;
|
uint prevEveryoneMask = EveryoneMask;
|
||||||
|
@ -4851,12 +4779,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
}
|
}
|
||||||
else // it already has a physical representation
|
else // it already has a physical representation
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
pa.SetMaterial(Material);
|
|
||||||
pa.Position = GetWorldPosition();
|
|
||||||
pa.Orientation = GetWorldRotation();
|
|
||||||
DoPhysicsPropertyUpdate(UsePhysics, true);
|
|
||||||
=======
|
|
||||||
DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status.
|
DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status.
|
||||||
/* moved into DoPhysicsPropertyUpdate
|
/* moved into DoPhysicsPropertyUpdate
|
||||||
if(VolumeDetectActive)
|
if(VolumeDetectActive)
|
||||||
|
@ -4864,7 +4787,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
else
|
else
|
||||||
pa.SetVolumeDetect(0);
|
pa.SetVolumeDetect(0);
|
||||||
*/
|
*/
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
if (pa.Building != building)
|
if (pa.Building != building)
|
||||||
pa.Building = building;
|
pa.Building = building;
|
||||||
|
@ -5621,19 +5543,19 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
/// true if the avatar was not already recorded, false otherwise.
|
/// true if the avatar was not already recorded, false otherwise.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
/// <param name='avatarId'></param>
|
/// <param name='avatarId'></param>
|
||||||
protected internal bool AddSittingAvatar(ScenePresence sp)
|
protected internal bool AddSittingAvatar(UUID id)
|
||||||
{
|
{
|
||||||
lock (ParentGroup.m_sittingAvatars)
|
lock (ParentGroup.m_sittingAvatars)
|
||||||
{
|
{
|
||||||
if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
|
if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
|
||||||
SitTargetAvatar = sp.UUID;
|
SitTargetAvatar = id;
|
||||||
|
|
||||||
if (m_sittingAvatars == null)
|
if (m_sittingAvatars == null)
|
||||||
m_sittingAvatars = new HashSet<ScenePresence>();
|
m_sittingAvatars = new HashSet<UUID>();
|
||||||
|
|
||||||
if (m_sittingAvatars.Add(sp))
|
if (m_sittingAvatars.Add(id))
|
||||||
{
|
{
|
||||||
ParentGroup.m_sittingAvatars.Add(sp);
|
ParentGroup.m_sittingAvatars.Add(id);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -5650,22 +5572,22 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
/// true if the avatar was present and removed, false if it was not present.
|
/// true if the avatar was present and removed, false if it was not present.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
/// <param name='avatarId'></param>
|
/// <param name='avatarId'></param>
|
||||||
protected internal bool RemoveSittingAvatar(ScenePresence sp)
|
protected internal bool RemoveSittingAvatar(UUID id)
|
||||||
{
|
{
|
||||||
lock (ParentGroup.m_sittingAvatars)
|
lock (ParentGroup.m_sittingAvatars)
|
||||||
{
|
{
|
||||||
if (SitTargetAvatar == sp.UUID)
|
if (SitTargetAvatar == id)
|
||||||
SitTargetAvatar = UUID.Zero;
|
SitTargetAvatar = UUID.Zero;
|
||||||
|
|
||||||
if (m_sittingAvatars == null)
|
if (m_sittingAvatars == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (m_sittingAvatars.Remove(sp))
|
if (m_sittingAvatars.Remove(id))
|
||||||
{
|
{
|
||||||
if (m_sittingAvatars.Count == 0)
|
if (m_sittingAvatars.Count == 0)
|
||||||
m_sittingAvatars = null;
|
m_sittingAvatars = null;
|
||||||
|
|
||||||
ParentGroup.m_sittingAvatars.Remove(sp);
|
ParentGroup.m_sittingAvatars.Remove(id);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -5679,14 +5601,14 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks>
|
/// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks>
|
||||||
/// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns>
|
/// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns>
|
||||||
public HashSet<ScenePresence> GetSittingAvatars()
|
public HashSet<UUID> GetSittingAvatars()
|
||||||
{
|
{
|
||||||
lock (ParentGroup.m_sittingAvatars)
|
lock (ParentGroup.m_sittingAvatars)
|
||||||
{
|
{
|
||||||
if (m_sittingAvatars == null)
|
if (m_sittingAvatars == null)
|
||||||
return null;
|
return null;
|
||||||
else
|
else
|
||||||
return new HashSet<ScenePresence>(m_sittingAvatars);
|
return new HashSet<UUID>(m_sittingAvatars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -892,16 +892,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
offsetHeight = 0;
|
offsetHeight = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
Vector3 bbox;
|
|
||||||
float offsetHeight;
|
|
||||||
|
|
||||||
m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight);
|
|
||||||
=======
|
|
||||||
|
|
||||||
bool single = m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight);
|
bool single = m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
|
|
||||||
for (int i = 0; i < objlist.Count; i++)
|
for (int i = 0; i < objlist.Count; i++)
|
||||||
{
|
{
|
||||||
|
@ -1068,12 +1060,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_items.LockItemsForRead(false);
|
m_items.LockItemsForRead(false);
|
||||||
if (type == 10) // Script
|
if (type == 10) // Script
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
// route it through here, to handle script cleanup tasks
|
|
||||||
RemoveScriptInstance(itemID, false);
|
|
||||||
=======
|
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
||||||
>>>>>>> avn/ubitvar
|
|
||||||
}
|
}
|
||||||
m_items.LockItemsForWrite(true);
|
m_items.LockItemsForWrite(true);
|
||||||
m_items.Remove(itemID);
|
m_items.Remove(itemID);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue