seems to compile ( tests comented out)
parent
371c9dd2af
commit
a11edceb00
|
@ -1296,7 +1296,7 @@ namespace OpenSim.Groups
|
|||
presence.Grouptitle = Title;
|
||||
|
||||
if (! presence.IsChildAgent)
|
||||
presence.SendAvatarDataToAllClients();
|
||||
presence.SendAvatarDataToAllAgents();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,37 +25,39 @@
|
|||
* 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 Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.Imaging;
|
||||
using OpenMetaverse.StructuredData;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Servers;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||
|
||||
|
||||
|
||||
|
||||
namespace OpenSim.Capabilities.Handlers
|
||||
{
|
||||
public class GetMeshHandler : BaseStreamHandler
|
||||
public class GetMeshHandler
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
||||
private IAssetService m_assetService;
|
||||
|
||||
public const string DefaultFormat = "vnd.ll.mesh";
|
||||
|
||||
|
||||
public GetMeshHandler(IAssetService assService)
|
||||
{
|
||||
m_assetService = assService;
|
||||
m_RedirectURL = redirectURL;
|
||||
if (m_RedirectURL != null && !m_RedirectURL.EndsWith("/"))
|
||||
m_RedirectURL += "/";
|
||||
}
|
||||
public Hashtable Handle(Hashtable request)
|
||||
{
|
||||
|
@ -67,7 +69,7 @@ namespace OpenSim.Capabilities.Handlers
|
|||
ret["int_bytes"] = 0;
|
||||
ret["int_lod"] = 0;
|
||||
string MeshStr = (string)request["mesh_id"];
|
||||
|
||||
|
||||
|
||||
//m_log.DebugFormat("[GETMESH]: called {0}", MeshStr);
|
||||
|
||||
|
@ -81,122 +83,53 @@ namespace OpenSim.Capabilities.Handlers
|
|||
{
|
||||
// m_log.DebugFormat("[GETMESH]: Received request for mesh id {0}", meshID);
|
||||
|
||||
|
||||
|
||||
ret = ProcessGetMesh(request, UUID.Zero, null);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.Warn("[GETMESH]: Failed to parse a mesh_id from GetMesh request: " + (string)request["uri"]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap)
|
||||
{
|
||||
// Try to parse the texture ID from the request URL
|
||||
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
||||
string textureStr = query.GetOne("mesh_id");
|
||||
Hashtable responsedata = new Hashtable();
|
||||
responsedata["int_response_code"] = 400; //501; //410; //404;
|
||||
responsedata["content_type"] = "text/plain";
|
||||
responsedata["keepalive"] = false;
|
||||
responsedata["str_response_string"] = "Request wasn't what was expected";
|
||||
responsedata["reusecontext"] = false;
|
||||
responsedata["int_lod"] = 0;
|
||||
responsedata["int_bytes"] = 0;
|
||||
|
||||
if (m_assetService == null)
|
||||
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))
|
||||
{
|
||||
m_log.Error("[GETMESH]: Cannot fetch mesh " + textureStr + " without an asset service");
|
||||
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
||||
}
|
||||
|
||||
UUID meshID;
|
||||
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))
|
||||
if (m_assetService == null)
|
||||
{
|
||||
// Only try to fetch locally cached meshes. Misses are redirected
|
||||
mesh = m_assetService.GetCached(meshID.ToString());
|
||||
|
||||
if (mesh != null)
|
||||
{
|
||||
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;
|
||||
}
|
||||
responsedata["int_response_code"] = 404; //501; //410; //404;
|
||||
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;
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
AssetBase mesh = m_assetService.Get(meshID.ToString());
|
||||
|
||||
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))
|
||||
if (mesh != null)
|
||||
{
|
||||
// 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)
|
||||
if (mesh.Type == (SByte)AssetType.Mesh)
|
||||
{
|
||||
|
||||
Hashtable headers = new Hashtable();
|
||||
|
@ -212,12 +145,12 @@ namespace OpenSim.Capabilities.Handlers
|
|||
|
||||
if (!String.IsNullOrEmpty(range)) // Mesh Asset LOD // Physics
|
||||
{
|
||||
// Range request
|
||||
// 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
|
||||
// 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 >= mesh.Data.Length)
|
||||
{
|
||||
responsedata["int_response_code"] = 404; //501; //410; //404;
|
||||
|
@ -249,20 +182,20 @@ namespace OpenSim.Capabilities.Handlers
|
|||
responsedata["int_lod"] = 2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
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["int_bytes"] = mesh.Data.Length;
|
||||
responsedata["reusecontext"] = false;
|
||||
responsedata["int_lod"] = 3;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
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,
|
||||
mesh.Data.Length);
|
||||
|
||||
|
@ -293,6 +226,7 @@ namespace OpenSim.Capabilities.Handlers
|
|||
responsedata["int_lod"] = 3;
|
||||
}
|
||||
}
|
||||
// Optionally add additional mesh types here
|
||||
else
|
||||
{
|
||||
responsedata["int_response_code"] = 404; //501; //410; //404;
|
||||
|
@ -315,58 +249,8 @@ namespace OpenSim.Capabilities.Handlers
|
|||
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>
|
||||
/// 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;
|
||||
return responsedata;
|
||||
}
|
||||
private bool TryParseRange(string header, out int start, out int end)
|
||||
{
|
||||
|
|
|
@ -64,13 +64,15 @@ namespace OpenSim.Capabilities.Handlers
|
|||
|
||||
string rurl = serverConfig.GetString("GetMeshRedirectURL");
|
||||
|
||||
server.AddStreamHandler(
|
||||
new GetTextureHandler("/CAPS/GetMesh/" /*+ UUID.Random() */, m_AssetService, "GetMesh", null, rurl));
|
||||
|
||||
rurl = serverConfig.GetString("GetMesh2RedirectURL");
|
||||
|
||||
server.AddStreamHandler(
|
||||
new GetTextureHandler("/CAPS/GetMesh2/" /*+ UUID.Random() */, m_AssetService, "GetMesh2", null, rurl));
|
||||
GetMeshHandler gmeshHandler = new GetMeshHandler(m_AssetService);
|
||||
IRequestHandler reqHandler
|
||||
= new RestHTTPHandler(
|
||||
"GET",
|
||||
"/CAPS/" + UUID.Random(),
|
||||
httpMethod => gmeshHandler.ProcessGetMesh(httpMethod, UUID.Zero, null),
|
||||
"GetMesh",
|
||||
null);
|
||||
server.AddStreamHandler(reqHandler); ;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -63,9 +63,6 @@ namespace OpenSim.Capabilities.Handlers
|
|||
public GetTextureHandler(IAssetService assService)
|
||||
{
|
||||
m_assetService = assService;
|
||||
m_RedirectURL = redirectURL;
|
||||
if (m_RedirectURL != null && !m_RedirectURL.EndsWith("/"))
|
||||
m_RedirectURL += "/";
|
||||
}
|
||||
|
||||
public Hashtable Handle(Hashtable request)
|
||||
|
|
|
@ -66,7 +66,7 @@ namespace OpenSim.Capabilities.Handlers
|
|||
string rurl = serverConfig.GetString("GetTextureRedirectURL");
|
||||
;
|
||||
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 UpdateAvatarInterests(UserProfileProperties up, 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 SetUserAppData(UserAppData props, ref string result);
|
||||
OSDArray GetUserImageAssets(UUID avatarId);
|
||||
|
|
|
@ -202,52 +202,15 @@ namespace OpenSim.Data.MySQL
|
|||
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
|
||||
{
|
||||
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();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
|
||||
asset.FullID, asset.Name, e.Message);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.Error(
|
||||
string.Format(
|
||||
"[ASSET DB]: MySQL failure creating asset {0} with name {1}. Exception ",
|
||||
asset.FullID, asset.Name)
|
||||
, e);
|
||||
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
|
||||
asset.FullID, asset.Name, e.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1105,7 +1105,7 @@ namespace OpenSim.Data.MySQL
|
|||
"use_estate_sun, fixed_sun, sun_position, " +
|
||||
"covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " +
|
||||
"sunvectorz, loaded_creation_datetime, " +
|
||||
"loaded_creation_id, map_tile_ID, " +
|
||||
"loaded_creation_id, map_tile_ID, block_search, casino, " +
|
||||
"TelehubObject, parcel_tile_ID) " +
|
||||
"values (?RegionUUID, ?BlockTerraform, " +
|
||||
"?BlockFly, ?AllowDamage, ?RestrictPushing, " +
|
||||
|
@ -1122,53 +1122,14 @@ namespace OpenSim.Data.MySQL
|
|||
"?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " +
|
||||
"?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
|
||||
"?LoadedCreationDateTime, ?LoadedCreationID, " +
|
||||
"?TerrainImageID, " +
|
||||
"?TerrainImageID, ?block_search, ?casino, " +
|
||||
"?TelehubObject, ?ParcelImageID)";
|
||||
|
||||
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, block_search, casino, " +
|
||||
"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, ?block_search, ?casino, " +
|
||||
"?TelehubObject, ?ParcelImageID)";
|
||||
|
||||
ExecuteNonQuery(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
SaveSpawnPoints(rs);
|
||||
SaveSpawnPoints(rs);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual List<LandData> LoadLandObjects(UUID regionUUID)
|
||||
|
|
|
@ -896,16 +896,16 @@ namespace OpenSim.Data.MySQL
|
|||
}
|
||||
|
||||
#region User Preferences
|
||||
public OSDArray GetUserPreferences(UUID avatarId)
|
||||
public bool GetUserPreferences(ref UserPreferences pref, ref string result)
|
||||
{
|
||||
string query = string.Empty;
|
||||
|
||||
|
||||
query += "SELECT imviaemail,visible,email FROM ";
|
||||
query += "usersettings WHERE ";
|
||||
query += "useruuid = ?Id";
|
||||
|
||||
|
||||
OSDArray data = new OSDArray();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
|
||||
|
@ -913,33 +913,30 @@ namespace OpenSim.Data.MySQL
|
|||
dbcon.Open();
|
||||
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())
|
||||
{
|
||||
if(reader.HasRows)
|
||||
if (reader.HasRows)
|
||||
{
|
||||
reader.Read();
|
||||
OSDMap record = new OSDMap();
|
||||
|
||||
record.Add("imviaemail",OSD.FromString((string)reader["imviaemail"]));
|
||||
record.Add("visible",OSD.FromString((string)reader["visible"]));
|
||||
record.Add("email",OSD.FromString((string)reader["email"]));
|
||||
data.Add(record);
|
||||
bool.TryParse((string)reader["imviaemail"], out pref.IMViaEmail);
|
||||
bool.TryParse((string)reader["visible"], out pref.Visible);
|
||||
pref.EMail = (string)reader["email"];
|
||||
}
|
||||
else
|
||||
{
|
||||
dbcon.Close();
|
||||
dbcon.Open();
|
||||
|
||||
|
||||
query = "INSERT INTO usersettings VALUES ";
|
||||
query += "(?uuid,'false','false', ?Email)";
|
||||
|
||||
using (MySqlCommand put = new MySqlCommand(query, dbcon))
|
||||
{
|
||||
|
||||
// put.Parameters.AddWithValue("?Email", pref.EMail);
|
||||
// put.Parameters.AddWithValue("?uuid", pref.UserId.ToString());
|
||||
|
||||
put.Parameters.AddWithValue("?Email", pref.EMail);
|
||||
put.Parameters.AddWithValue("?uuid", pref.UserId.ToString());
|
||||
|
||||
put.ExecuteNonQuery();
|
||||
}
|
||||
|
@ -952,20 +949,22 @@ namespace OpenSim.Data.MySQL
|
|||
{
|
||||
m_log.ErrorFormat("[PROFILES_DATA]" +
|
||||
": 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;
|
||||
|
||||
query += "UPDATE userpsettings SET ";
|
||||
|
||||
query += "UPDATE usersettings SET ";
|
||||
query += "imviaemail=?ImViaEmail, ";
|
||||
query += "visible=?Visible, ";
|
||||
query += "email=?EMail ";
|
||||
query += "WHERE useruuid=?uuid";
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
|
||||
|
@ -986,6 +985,7 @@ namespace OpenSim.Data.MySQL
|
|||
{
|
||||
m_log.ErrorFormat("[PROFILES_DATA]" +
|
||||
": UserPreferencesUpdate exception {0} {1}", e.Message, e.InnerException);
|
||||
result = e.Message;
|
||||
return false;
|
||||
}
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -2013,7 +2013,7 @@ namespace OpenSim.Data.SQLite
|
|||
return entry;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
|
|
@ -741,7 +741,7 @@ namespace OpenSim.Data.SQLite
|
|||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
public bool UpdateUserPreferences(ref UserPreferences pref, ref string result)
|
||||
{
|
||||
string query = string.Empty;
|
||||
|
@ -826,7 +826,6 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
public bool GetUserAppData(ref UserAppData props, ref string result)
|
||||
{
|
||||
|
|
|
@ -150,12 +150,8 @@ namespace OpenSim.Framework
|
|||
Type == (sbyte)AssetType.Folder ||
|
||||
Type == (sbyte)AssetType.ImageJPEG ||
|
||||
Type == (sbyte)AssetType.ImageTGA ||
|
||||
<<<<<<< HEAD
|
||||
Type == (sbyte)AssetType.LSLBytecode);
|
||||
=======
|
||||
Type == (sbyte)AssetType.Mesh ||
|
||||
Type == (sbyte) AssetType.LSLBytecode);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -395,26 +395,7 @@ namespace OpenSim.Framework.Communications
|
|||
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)
|
||||
throw _asyncException;
|
||||
|
||||
|
@ -444,7 +425,6 @@ namespace OpenSim.Framework.Communications
|
|||
auth.AddAuthorization(_request.Headers);
|
||||
|
||||
src.Seek(0, SeekOrigin.Begin);
|
||||
<<<<<<< HEAD
|
||||
|
||||
int reqnum = WebUtil.RequestNumber++;
|
||||
if (WebUtil.DebugLevel >= 3)
|
||||
|
@ -452,16 +432,7 @@ namespace OpenSim.Framework.Communications
|
|||
if (WebUtil.DebugLevel >= 5)
|
||||
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())
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_log.Info("[REST]: GetRequestStream is ok");
|
||||
|
||||
|
|
|
@ -363,30 +363,43 @@ namespace OpenSim.Framework
|
|||
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)
|
||||
{
|
||||
foreach (EstateBan ban in l_EstateBans)
|
||||
if (!IsEstateManagerOrOwner(avatarID))
|
||||
{
|
||||
foreach (EstateBan ban in l_EstateBans)
|
||||
if (ban.BannedUserID == avatarID)
|
||||
return true;
|
||||
|
||||
if (!IsEstateManagerOrOwner(avatarID) && !HasAccess(avatarID))
|
||||
{
|
||||
if (DenyMinors)
|
||||
if (!HasAccess(avatarID))
|
||||
{
|
||||
if ((userFlags & 32) == 0)
|
||||
if (DenyMinors)
|
||||
{
|
||||
return true;
|
||||
if ((userFlags & 32) == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (DenyAnonymous)
|
||||
{
|
||||
if ((userFlags & 4) == 0)
|
||||
if (DenyAnonymous)
|
||||
{
|
||||
return true;
|
||||
if ((userFlags & 4) == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,20 +65,15 @@ namespace OpenSim.Framework
|
|||
/// </remarks>
|
||||
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>
|
||||
/// Send initial scene data to the client controlling this agent
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This includes scene object data and the appearance data of other avatars.
|
||||
/// </remarks>
|
||||
void SendInitialDataToClient();
|
||||
void SendInitialDataToMe();
|
||||
|
||||
/// <summary>
|
||||
/// <summary>
|
||||
/// Direction in which the scene presence is looking.
|
||||
/// </summary>
|
||||
/// <remarks>Will be Vector3.Zero for a child agent.</remarks>
|
||||
|
|
|
@ -245,15 +245,6 @@ namespace OpenSim.Framework
|
|||
// occasionally seems to corrupt its addin cache
|
||||
// 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 v0 = "addin-db-000";
|
||||
string v1 = "addin-db-001";
|
||||
|
@ -269,7 +260,7 @@ namespace OpenSim.Framework
|
|||
|
||||
if (Directory.Exists(v1))
|
||||
Directory.Delete(v1, true);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
|
|
|
@ -102,12 +102,11 @@ namespace OpenSim.Framework
|
|||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static readonly string LogHeader = "[REGION INFO]";
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
public bool commFailTF = false;
|
||||
public ConfigurationMember configMember;
|
||||
public string DataStore = String.Empty;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
public string RegionFile = String.Empty;
|
||||
public bool isSandbox = false;
|
||||
public bool Persistent = true;
|
||||
|
@ -534,11 +533,7 @@ namespace OpenSim.Framework
|
|||
return null;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
private void SetExtraSetting(string key, string value)
|
||||
=======
|
||||
public void SetExtraSetting(string key, string value)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
string keylower = key.ToLower();
|
||||
m_extraSettings[keylower] = value;
|
||||
|
@ -834,22 +829,16 @@ namespace OpenSim.Framework
|
|||
string location = String.Format("{0},{1}", RegionLocX, RegionLocY);
|
||||
config.Set("Location", location);
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (RegionSizeX > 0)
|
||||
=======
|
||||
if (DataStore != String.Empty)
|
||||
config.Set("Datastore", DataStore);
|
||||
|
||||
if (RegionSizeX != Constants.RegionSize || RegionSizeY != Constants.RegionSize)
|
||||
{
|
||||
>>>>>>> avn/ubitvar
|
||||
config.Set("SizeX", RegionSizeX);
|
||||
|
||||
if (RegionSizeY > 0)
|
||||
config.Set("SizeY", RegionSizeY);
|
||||
|
||||
// if (RegionSizeZ > 0)
|
||||
// config.Set("SizeZ", RegionSizeZ);
|
||||
// if (RegionSizeZ > 0)
|
||||
// config.Set("SizeZ", RegionSizeZ);
|
||||
}
|
||||
|
||||
config.Set("InternalAddress", m_internalEndPoint.Address.ToString());
|
||||
config.Set("InternalPort", m_internalEndPoint.Port);
|
||||
|
@ -920,8 +909,6 @@ namespace OpenSim.Framework
|
|||
throw new Exception("Invalid file type for region persistence.");
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
public void loadConfigurationOptionsFromMe()
|
||||
{
|
||||
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);
|
||||
|
||||
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,
|
||||
"Scope ID for this region", ScopeID.ToString(), true);
|
||||
|
@ -1131,7 +1118,7 @@ namespace OpenSim.Framework
|
|||
m_linksetCapacity = (int)configuration_result;
|
||||
break;
|
||||
case "agent_capacity":
|
||||
m_agentCapacity = (int)configuration_result;
|
||||
AgentCapacity = (int)configuration_result;
|
||||
break;
|
||||
case "scope_id":
|
||||
ScopeID = (UUID)configuration_result;
|
||||
|
@ -1147,7 +1134,7 @@ namespace OpenSim.Framework
|
|||
return true;
|
||||
}
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
public void SaveLastMapUUID(UUID mapUUID)
|
||||
{
|
||||
lastMapUUID = mapUUID;
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace OpenSim.Framework.RegionLoader.Web
|
|||
}
|
||||
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();
|
||||
bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false);
|
||||
|
||||
|
@ -69,101 +69,74 @@ namespace OpenSim.Framework.RegionLoader.Web
|
|||
}
|
||||
else
|
||||
{
|
||||
while(tries > 0)
|
||||
{
|
||||
RegionInfo[] regionInfos = new RegionInfo[] {};
|
||||
int regionCount = 0;
|
||||
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
|
||||
webRequest.Timeout = 30000; //30 Second Timeout
|
||||
m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
|
||||
while (tries > 0)
|
||||
{
|
||||
RegionInfo[] regionInfos = new RegionInfo[] { };
|
||||
int regionCount = 0;
|
||||
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||
webRequest.Timeout = 30000; //30 Second Timeout
|
||||
m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
|
||||
m_log.Debug("[WEBLOADER]: Downloading region information...");
|
||||
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
|
||||
string xmlSource = String.Empty;
|
||||
string tempStr = reader.ReadLine();
|
||||
while (tempStr != null)
|
||||
{
|
||||
xmlSource = xmlSource + tempStr;
|
||||
tempStr = reader.ReadLine();
|
||||
}
|
||||
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)
|
||||
{
|
||||
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
if (!allowRegionless)
|
||||
throw ex;
|
||||
}
|
||||
else
|
||||
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")
|
||||
try
|
||||
{
|
||||
regionCount = xmlDoc.FirstChild.ChildNodes.Count;
|
||||
|
||||
if (regionCount > 0)
|
||||
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
|
||||
m_log.Debug("[WEBLOADER]: Downloading region information...");
|
||||
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
|
||||
string xmlSource = String.Empty;
|
||||
string tempStr = reader.ReadLine();
|
||||
while (tempStr != null)
|
||||
{
|
||||
regionInfos = new RegionInfo[regionCount];
|
||||
int i;
|
||||
for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++)
|
||||
xmlSource = xmlSource + tempStr;
|
||||
tempStr = reader.ReadLine();
|
||||
}
|
||||
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)
|
||||
{
|
||||
m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
|
||||
regionInfos[i] =
|
||||
new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource);
|
||||
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)
|
||||
return regionInfos;
|
||||
catch (WebException ex)
|
||||
{
|
||||
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
if (!allowRegionless)
|
||||
throw ex;
|
||||
}
|
||||
else
|
||||
throw ex;
|
||||
}
|
||||
|
||||
if (regionCount > 0 | allowRegionless)
|
||||
return regionInfos;
|
||||
|
||||
m_log.Debug("[WEBLOADER]: Request yielded no regions.");
|
||||
tries--;
|
||||
if (tries > 0)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_log.Debug("[WEBLOADER]: Retrying");
|
||||
System.Threading.Thread.Sleep(wait);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_log.Error("[WEBLOADER]: No region configs were available.");
|
||||
return null;
|
||||
m_log.Error("[WEBLOADER]: No region configs were available.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
/// server.
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
|
||||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>
|
||||
/// Random uuid for private data
|
||||
|
@ -88,11 +85,8 @@ namespace OpenSim.Framework.Servers
|
|||
// Random uuid for private data
|
||||
m_osSecret = UUID.Random().ToString();
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
// m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
|
||||
// m_periodicDiagnosticsTimer.Enabled = true;
|
||||
>>>>>>> avn/ubitvar
|
||||
m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
|
||||
m_periodicDiagnosticsTimer.Enabled = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -1947,14 +1947,10 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
m_httpListener2.Start(64);
|
||||
|
||||
// Long Poll Service Manager with 3 worker threads a 25 second timeout for no events
|
||||
<<<<<<< HEAD
|
||||
|
||||
PollServiceRequestManager = new PollServiceRequestManager(this, performPollResponsesAsync, 3, 25000);
|
||||
PollServiceRequestManager.Start();
|
||||
|
||||
=======
|
||||
m_PollServiceManager = new PollServiceRequestManager(this, 4, 25000);
|
||||
m_PollServiceManager.Start();
|
||||
>>>>>>> avn/ubitvar
|
||||
HTTPDRunning = true;
|
||||
|
||||
//HttpListenerContext context;
|
||||
|
|
|
@ -74,16 +74,11 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
private Thread[] m_workerThreads;
|
||||
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 int slowCount = 0;
|
||||
|
||||
private SmartThreadPool m_threadPool;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
|
||||
public PollServiceRequestManager(
|
||||
BaseHttpServer pSrv, bool performResponsesAsync, uint pWorkerThreadCount, int pTimeout)
|
||||
|
@ -93,7 +88,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
m_WorkerThreadCount = pWorkerThreadCount;
|
||||
m_workerThreads = new Thread[m_WorkerThreadCount];
|
||||
|
||||
<<<<<<< HEAD
|
||||
/*
|
||||
StatsManager.RegisterStat(
|
||||
new Stat(
|
||||
"QueuedPollResponses",
|
||||
|
@ -119,7 +114,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
MeasuresOfInterest.AverageChangeOverTime,
|
||||
stat => stat.Value = ResponsesProcessed,
|
||||
StatVerbosity.Debug));
|
||||
=======
|
||||
*/
|
||||
PollServiceHttpRequestComparer preqCp = new PollServiceHttpRequestComparer();
|
||||
m_bycontext = new Dictionary<PollServiceHttpRequest, Queue<PollServiceHttpRequest>>(preqCp);
|
||||
|
||||
|
@ -132,46 +127,16 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
startInfo.ThreadPoolName = "PoolService";
|
||||
|
||||
m_threadPool = new SmartThreadPool(startInfo);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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();
|
||||
//startup worker threads
|
||||
for (uint i = 0; i < m_WorkerThreadCount; i++)
|
||||
{
|
||||
m_workerThreads[i]
|
||||
= Watchdog.StartThread(
|
||||
= WorkManager.StartThread(
|
||||
PoolWorkerJob,
|
||||
string.Format("PollServiceWorkerThread {0}:{1}", i, m_server.Port),
|
||||
ThreadPriority.Normal,
|
||||
|
@ -181,7 +146,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
int.MaxValue);
|
||||
}
|
||||
|
||||
m_retrysThread = Watchdog.StartThread(
|
||||
m_retrysThread = WorkManager.StartThread(
|
||||
this.CheckRetries,
|
||||
string.Format("PollServiceWatcherThread:{0}", m_server.Port),
|
||||
ThreadPriority.Normal,
|
||||
|
@ -189,7 +154,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
true,
|
||||
null,
|
||||
1000 * 60 * 10);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
|
||||
private void ReQueueEvent(PollServiceHttpRequest req)
|
||||
|
@ -258,36 +223,13 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
{
|
||||
Thread.Sleep(100); // let the world move .. back to faster rate
|
||||
Watchdog.UpdateThread();
|
||||
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)
|
||||
m_requests.Enqueue(m_retryRequests.Dequeue());
|
||||
}
|
||||
|
@ -295,7 +237,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
if (slowCount >= 10)
|
||||
{
|
||||
slowCount = 0;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
lock (m_slowRequests)
|
||||
{
|
||||
|
@ -308,12 +249,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
|
||||
public void Stop()
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
IsRunning = false;
|
||||
// m_timeout = -10000; // cause all to expire
|
||||
=======
|
||||
m_running = false;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
Thread.Sleep(1000); // let the world move
|
||||
|
||||
foreach (Thread t in m_workerThreads)
|
||||
|
@ -341,13 +278,9 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
|
||||
lock (m_slowRequests)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (m_longPollRequests.Count > 0 && IsRunning)
|
||||
m_longPollRequests.ForEach(req => m_requests.Enqueue(req));
|
||||
=======
|
||||
while (m_slowRequests.Count > 0)
|
||||
m_requests.Enqueue(m_slowRequests.Dequeue());
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
|
||||
while (m_requests.Count() > 0)
|
||||
|
@ -355,13 +288,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
try
|
||||
{
|
||||
wreq = m_requests.Dequeue(0);
|
||||
<<<<<<< HEAD
|
||||
ResponsesProcessed++;
|
||||
wreq.DoHTTPGruntWork(
|
||||
m_server, wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id));
|
||||
=======
|
||||
wreq.DoHTTPstop(m_server);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
@ -375,91 +303,35 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
|
||||
private void PoolWorkerJob()
|
||||
{
|
||||
while (IsRunning)
|
||||
while (m_running)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
PollServiceHttpRequest req = m_requests.Dequeue(5000);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
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)
|
||||
{
|
||||
try
|
||||
if (req != null)
|
||||
{
|
||||
if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id))
|
||||
try
|
||||
{
|
||||
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id);
|
||||
|
||||
<<<<<<< HEAD
|
||||
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)
|
||||
if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id))
|
||||
{
|
||||
try
|
||||
{
|
||||
ResponsesProcessed++;
|
||||
req.DoHTTPGruntWork(m_server, responsedata);
|
||||
}
|
||||
catch (ObjectDisposedException e) // Browser aborted before we could read body, server closed the stream
|
||||
{
|
||||
// Ignore it, no need to reply
|
||||
m_log.Error(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_threadPool.QueueWorkItem(x =>
|
||||
=======
|
||||
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id);
|
||||
|
||||
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
|
||||
catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
|
||||
{
|
||||
// Ignore it, no need to reply
|
||||
m_log.Error(e);
|
||||
}
|
||||
catch (Exception e)
|
||||
}
|
||||
else
|
||||
{
|
||||
m_threadPool.QueueWorkItem(x =>
|
||||
{
|
||||
<<<<<<< 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
|
||||
{
|
||||
req.DoHTTPGruntWork(m_server, responsedata);
|
||||
|
@ -478,7 +350,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
{
|
||||
if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms)
|
||||
{
|
||||
req.DoHTTPGruntWork(m_server,
|
||||
req.DoHTTPGruntWork(m_server,
|
||||
req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id));
|
||||
byContextDequeue(req);
|
||||
}
|
||||
|
@ -486,17 +358,15 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
{
|
||||
ReQueueEvent(req);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("Exception in poll service thread: " + e.ToString());
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("Exception in poll service thread: " + e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,9 +41,6 @@ namespace OpenSim.Framework.Servers.Tests
|
|||
{
|
||||
[TestFixture]
|
||||
public class OSHttpTests : OpenSimTestCase
|
||||
<<<<<<< HEAD
|
||||
{
|
||||
=======
|
||||
{
|
||||
// we need an IHttpClientContext for our tests
|
||||
public class TestHttpClientContext: IHttpClientContext
|
||||
|
@ -363,9 +360,8 @@ namespace OpenSim.Framework.Servers.Tests
|
|||
public void Redirect(Uri uri) {}
|
||||
public void Redirect(string url) {}
|
||||
}
|
||||
|
||||
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
public OSHttpRequest req0;
|
||||
public OSHttpRequest req1;
|
||||
|
||||
|
|
|
@ -160,11 +160,7 @@ namespace OpenSim.Framework
|
|||
public virtual ulong HomeRegion
|
||||
{
|
||||
get
|
||||
<<<<<<< HEAD
|
||||
{
|
||||
=======
|
||||
{
|
||||
>>>>>>> avn/ubitvar
|
||||
return Util.RegionWorldLocToHandle(Util.RegionToWorldLoc(m_homeRegionX), Util.RegionToWorldLoc(m_homeRegionY));
|
||||
// return Utils.UIntsToLong( m_homeRegionX * (uint)Constants.RegionSize, m_homeRegionY * (uint)Constants.RegionSize);
|
||||
}
|
||||
|
|
|
@ -91,6 +91,14 @@ namespace OpenSim.Framework
|
|||
public UUID TargetId;
|
||||
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
|
||||
{
|
||||
|
|
|
@ -1688,69 +1688,6 @@ namespace OpenSim.Framework
|
|||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (maxThreads < 2)
|
||||
|
|
|
@ -29,11 +29,7 @@ namespace OpenSim
|
|||
{
|
||||
public class VersionInfo
|
||||
{
|
||||
<<<<<<< HEAD:OpenSim/Framework/VersionInfo.cs
|
||||
public const string VersionNumber = "0.8.2.0";
|
||||
=======
|
||||
private const string VERSION_NUMBER = "0.8.0CM";
|
||||
>>>>>>> avn/ubitvar:OpenSim/Framework/Servers/VersionInfo.cs
|
||||
public const string VersionNumber = "0.8.2.0CM";
|
||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||
|
||||
public enum Flavour
|
||||
|
|
|
@ -205,16 +205,8 @@ namespace OpenSim.Framework
|
|||
{
|
||||
if (DebugLevel == 5)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (output.Length > 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));
|
||||
|
@ -295,12 +287,9 @@ namespace OpenSim.Framework
|
|||
}
|
||||
else
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
tickcompressdata = tickJsondata;
|
||||
compsize = buffer.Length;
|
||||
request.ContentType = "application/json";
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
request.ContentLength = buffer.Length; //Count bytes to send
|
||||
using (Stream requestStream = request.GetRequestStream())
|
||||
requestStream.Write(buffer, 0, buffer.Length); //Send it
|
||||
|
@ -315,7 +304,6 @@ namespace OpenSim.Framework
|
|||
{
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
using (StreamReader reader = new StreamReader(responseStream))
|
||||
{
|
||||
string responseStr = reader.ReadToEnd();
|
||||
|
@ -323,12 +311,6 @@ namespace OpenSim.Framework
|
|||
WebUtil.LogResponseDetail(reqnum, 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)
|
||||
{
|
||||
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}",
|
||||
reqnum,
|
||||
method,
|
||||
|
@ -366,7 +344,7 @@ namespace OpenSim.Framework
|
|||
tickcompressdata,
|
||||
compsize,
|
||||
strBuffer != null ? strBuffer.Length : 0,
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
strBuffer != null
|
||||
? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
|
||||
: "");
|
||||
|
@ -823,6 +801,20 @@ namespace OpenSim.Framework
|
|||
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,
|
||||
string requestUrl, TRequest obj, Action<TResponse> action,
|
||||
int maxConnections, IServiceAuth auth)
|
||||
|
@ -834,7 +826,7 @@ namespace OpenSim.Framework
|
|||
reqnum, verb, requestUrl);
|
||||
|
||||
int tickstart = Util.EnvironmentTickCount();
|
||||
// int tickdata = 0;
|
||||
int tickdata = 0;
|
||||
int tickdiff = 0;
|
||||
|
||||
Type type = typeof(TRequest);
|
||||
|
@ -876,27 +868,19 @@ namespace OpenSim.Framework
|
|||
request.ContentLength = length;
|
||||
byte[] data = buffer.ToArray();
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (WebUtil.DebugLevel >= 5)
|
||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||
|
||||
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))
|
||||
requestStream.Write(data, 0, length);
|
||||
|
||||
// capture how much time was spent writing
|
||||
tickdata = Util.EnvironmentTickCountSubtract(tickstart);
|
||||
// tickdata = Util.EnvironmentTickCountSubtract(tickstart);
|
||||
|
||||
request.BeginGetResponse(delegate(IAsyncResult ar)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
using (WebResponse response = request.EndGetResponse(ar))
|
||||
{
|
||||
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);
|
||||
|
||||
|
@ -980,7 +956,6 @@ namespace OpenSim.Framework
|
|||
"[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}",
|
||||
verb, requestUrl, e.Message, e.StackTrace);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
// m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString());
|
||||
|
||||
|
@ -998,83 +973,34 @@ namespace OpenSim.Framework
|
|||
}, null);
|
||||
}
|
||||
|
||||
int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
|
||||
tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
|
||||
if (tickdiff > WebUtil.LongCallTime)
|
||||
{
|
||||
string originalRequest = 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());
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (originalRequest.Length > 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}",
|
||||
reqnum, verb, requestUrl, tickdiff, tickdata,
|
||||
originalRequest);
|
||||
}
|
||||
else if (WebUtil.DebugLevel >= 4)
|
||||
{
|
||||
m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} took {1}ms, {2}ms writing",
|
||||
reqnum, tickdiff, tickdata);
|
||||
m_log.DebugFormat(
|
||||
"[WEB UTIL]: HTTP OUT {0} took {1}ms",
|
||||
reqnum, tickdiff);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (buffer != null)
|
||||
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;
|
||||
byte[] data = buffer.ToArray();
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (WebUtil.DebugLevel >= 5)
|
||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
Stream requestStream = null;
|
||||
try
|
||||
|
@ -1188,10 +1111,6 @@ namespace OpenSim.Framework
|
|||
if (tickdiff > WebUtil.LongCallTime)
|
||||
{
|
||||
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}",
|
||||
reqnum,
|
||||
verb,
|
||||
|
@ -1199,7 +1118,6 @@ namespace OpenSim.Framework
|
|||
tickdiff,
|
||||
tickset,
|
||||
tickdata,
|
||||
>>>>>>> avn/ubitvar
|
||||
obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
|
||||
}
|
||||
else if (WebUtil.DebugLevel >= 4)
|
||||
|
@ -1336,8 +1254,6 @@ namespace OpenSim.Framework
|
|||
ht.ServicePoint.ConnectionLimit = maxConnections;
|
||||
|
||||
request.Method = verb;
|
||||
if (pTimeout != 0)
|
||||
request.Timeout = pTimeout * 1000;
|
||||
MemoryStream buffer = null;
|
||||
|
||||
try
|
||||
|
@ -1351,29 +1267,17 @@ namespace OpenSim.Framework
|
|||
XmlWriterSettings settings = new XmlWriterSettings();
|
||||
settings.Encoding = Encoding.UTF8;
|
||||
|
||||
<<<<<<< HEAD
|
||||
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
|
||||
{
|
||||
XmlSerializer serializer = new XmlSerializer(type);
|
||||
serializer.Serialize(writer, obj);
|
||||
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;
|
||||
request.ContentLength = length;
|
||||
byte[] data = buffer.ToArray();
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (WebUtil.DebugLevel >= 5)
|
||||
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
|
||||
|
||||
|
@ -1397,9 +1301,6 @@ namespace OpenSim.Framework
|
|||
}
|
||||
}
|
||||
|
||||
=======
|
||||
Stream requestStream = null;
|
||||
>>>>>>> avn/ubitvar
|
||||
try
|
||||
{
|
||||
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
|
||||
|
@ -1488,7 +1389,6 @@ namespace OpenSim.Framework
|
|||
|
||||
return deserial;
|
||||
}
|
||||
|
||||
|
||||
public static class XMLResponseHelper
|
||||
{
|
||||
|
|
|
@ -115,13 +115,8 @@ namespace OpenSim
|
|||
if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod))
|
||||
Util.FireAndForgetMethod = asyncCallMethod;
|
||||
|
||||
<<<<<<< HEAD
|
||||
stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15);
|
||||
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 300);
|
||||
=======
|
||||
stpMinThreads = startupConfig.GetInt("MinPoolThreads", 2 );
|
||||
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 25);
|
||||
>>>>>>> avn/ubitvar
|
||||
m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) ");
|
||||
}
|
||||
|
||||
|
@ -273,20 +268,12 @@ namespace OpenSim
|
|||
SavePrimsXml2);
|
||||
|
||||
m_console.Commands.AddCommand("Archiving", false, "load oar",
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
"load oar [--merge] [--skip-assets]"
|
||||
+ " [--default-user \"User Name\"]"
|
||||
+ " [--force-terrain] [--force-parcels]"
|
||||
+ " [--no-objects]"
|
||||
+ " [--rotation degrees] [--rotation-center \"<x,y,z>\"]"
|
||||
<<<<<<< HEAD
|
||||
+ " [--displacement \"<x,y,z>\"]"
|
||||
=======
|
||||
+ " [--displacement \"<x,y,z>\"]"
|
||||
>>>>>>> avn/ubitvar
|
||||
+ " [<OAR path>]",
|
||||
"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"
|
||||
|
|
|
@ -276,13 +276,9 @@ namespace OpenSim
|
|||
|
||||
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
|
||||
// inserted them manually.
|
||||
=======
|
||||
LoadPlugins();
|
||||
|
||||
if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch!
|
||||
|
@ -290,7 +286,6 @@ namespace OpenSim
|
|||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
foreach (IApplicationPlugin plugin in m_plugins)
|
||||
plugin.PostInitialise();
|
||||
|
||||
|
@ -832,10 +827,6 @@ namespace OpenSim
|
|||
{
|
||||
Vector3 regionExtent = new Vector3(regionInfo.RegionSizeX, regionInfo.RegionSizeY, regionInfo.RegionSizeZ);
|
||||
PhysicsScene physicsScene = GetPhysicsScene(regionInfo.RegionName, regionExtent);
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
SceneCommunicationService sceneGridService = new SceneCommunicationService();
|
||||
|
||||
return new Scene(
|
||||
|
|
|
@ -45,7 +45,6 @@ using OpenSim.Region.Framework.Scenes;
|
|||
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||
using OpenSim.Framework.Servers;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Framework.Client;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||
|
@ -360,8 +359,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public string SeedCapRequest(string request, string path, string param,
|
||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID);
|
||||
m_log.DebugFormat(
|
||||
"[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID);
|
||||
|
||||
if (!m_HostCapsObj.WaitForActivation())
|
||||
return string.Empty;
|
||||
|
@ -789,99 +788,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
}
|
||||
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
|
||||
{
|
||||
inType = (sbyte)InventoryType.Object;
|
||||
assType = (sbyte)AssetType.Object;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
List<Vector3> positions = new List<Vector3>();
|
||||
List<Quaternion> rotations = new List<Quaternion>();
|
||||
|
@ -1467,24 +1377,17 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
{
|
||||
string 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);
|
||||
client.SendBulkUpdateInventory(copyItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
client.SendAgentAlertMessage(message, false);
|
||||
}
|
||||
m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder);
|
||||
client.SendBulkUpdateInventory(copyItem);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID);
|
||||
if (client != null)
|
||||
client.SendAgentAlertMessage("Failed to retrieve item", false);
|
||||
client.SendAlertMessage("Failed to retrieve item");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -1656,14 +1559,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
string param, IOSHttpRequest httpRequest,
|
||||
IOSHttpResponse httpResponse)
|
||||
{
|
||||
OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
|
||||
OSDMap accessPrefs = (OSDMap)req["access_prefs"];
|
||||
string desiredMaturity = accessPrefs["max"];
|
||||
|
||||
// OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
|
||||
OSDMap resp = new OSDMap();
|
||||
OSDMap respAccessPrefs = new OSDMap();
|
||||
respAccessPrefs["max"] = desiredMaturity; // echoing the maturity back means success
|
||||
resp["access_prefs"] = respAccessPrefs;
|
||||
|
||||
OSDMap accessPrefs = new OSDMap();
|
||||
accessPrefs["max"] = "A";
|
||||
|
||||
resp["access_prefs"] = accessPrefs;
|
||||
|
||||
string response = OSDParser.SerializeLLSDXmlString(resp);
|
||||
return response;
|
||||
|
|
|
@ -40,8 +40,8 @@ using OpenSim.Region.Framework.Interfaces;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||
|
||||
[assembly: Addin("LindenCaps", OpenSim.VersionInfo.VersionNumber)]
|
||||
[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)]
|
||||
[assembly: Addin("LindenCaps", "0.1")]
|
||||
[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
namespace OpenSim.Region.ClientStack.Linden
|
||||
{
|
||||
|
||||
|
|
|
@ -177,7 +177,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
<<<<<<< HEAD
|
||||
/// Always returns a valid queue
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
|
@ -201,8 +200,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// May return a null queue
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
|
@ -290,17 +288,11 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public void OnRegisterCaps(UUID agentID, Caps caps)
|
||||
{
|
||||
// Register an event queue for the client
|
||||
<<<<<<< HEAD
|
||||
|
||||
if (DebugLevel > 0)
|
||||
m_log.DebugFormat(
|
||||
"[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}",
|
||||
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;
|
||||
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)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (DebugLevel > 0)
|
||||
m_log.DebugFormat("{0} EnableSimulator. handle={1}, endPoint={2}, avatarID={3}",
|
||||
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);
|
||||
Enqueue(item, avatarID);
|
||||
|
@ -535,15 +522,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public virtual void EstablishAgentCommunication(UUID avatarID, IPEndPoint endPoint, string capsPath,
|
||||
ulong regionHandle, int regionSizeX, int regionSizeY)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (DebugLevel > 0)
|
||||
m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, endPoint={2}, avatarID={3}",
|
||||
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);
|
||||
Enqueue(item, avatarID);
|
||||
}
|
||||
|
@ -553,14 +535,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
uint locationID, uint flags, string capsURL,
|
||||
UUID avatarID, int regionSizeX, int regionSizeY)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (DebugLevel > 0)
|
||||
m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, endPoint={2}, avatarID={3}",
|
||||
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,
|
||||
locationID, flags, capsURL, avatarID, regionSizeX, regionSizeY);
|
||||
|
@ -571,14 +548,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
IPEndPoint newRegionExternalEndPoint,
|
||||
string capsURL, UUID avatarID, UUID sessionID, int regionSizeX, int regionSizeY)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (DebugLevel > 0)
|
||||
m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>",
|
||||
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,
|
||||
capsURL, avatarID, sessionID, regionSizeX, regionSizeY);
|
||||
|
|
|
@ -77,13 +77,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
llsdSimInfo.Add("Handle", new OSDBinary(ulongToByteArray(handle)));
|
||||
llsdSimInfo.Add("IP", new OSDBinary(endPoint.Address.GetAddressBytes()));
|
||||
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("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
OSDArray arr = new OSDArray(1);
|
||||
arr.Add(llsdSimInfo);
|
||||
|
@ -176,12 +171,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
info.Add("SimAccess", OSD.FromInteger(simAccess));
|
||||
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
|
||||
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.FromUInteger(flags));
|
||||
>>>>>>> avn/ubitvar
|
||||
info.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX));
|
||||
info.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY));
|
||||
|
||||
|
|
|
@ -60,11 +60,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
private IAssetService m_AssetService;
|
||||
private bool m_Enabled = true;
|
||||
private string m_URL;
|
||||
<<<<<<< HEAD
|
||||
|
||||
private string m_URL2;
|
||||
private string m_RedirectURL = null;
|
||||
private string m_RedirectURL2 = null;
|
||||
=======
|
||||
|
||||
struct aPollRequest
|
||||
{
|
||||
|
@ -94,7 +93,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
||||
|
||||
private Dictionary<UUID, PollServiceMeshEventArgs> m_pollservices = new Dictionary<UUID, PollServiceMeshEventArgs>();
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
|
||||
#region Region Module interfaceBase Members
|
||||
|
||||
|
@ -129,12 +128,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
if (m_URL2 != string.Empty)
|
||||
{
|
||||
m_Enabled = true;
|
||||
<<<<<<< HEAD
|
||||
|
||||
m_RedirectURL2 = config.GetString("GetMesh2RedirectURL");
|
||||
}
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
public void AddRegion(Scene pScene)
|
||||
|
@ -177,7 +173,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
for (uint i = 0; i < 2; i++)
|
||||
{
|
||||
m_workerThreads[i] = Watchdog.StartThread(DoMeshRequests,
|
||||
m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests,
|
||||
String.Format("MeshWorkerThread{0}", i),
|
||||
ThreadPriority.Normal,
|
||||
false,
|
||||
|
@ -336,21 +332,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
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();
|
||||
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));
|
||||
m_pollservices[agentID] = args;
|
||||
m_capsDict[agentID] = capUrl;
|
||||
|
||||
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
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)
|
||||
{
|
||||
string capUrl;
|
||||
|
|
|
@ -82,24 +82,22 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
|
||||
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
// TODO: Change this to a config option
|
||||
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
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
IConfig config = source.Configs["ClientStack.LindenCaps"];
|
||||
<<<<<<< HEAD
|
||||
|
||||
if (config == null)
|
||||
return;
|
||||
|
||||
/*
|
||||
m_URL = config.GetString("Cap_GetTexture", string.Empty);
|
||||
// Cap doesn't exist
|
||||
if (m_URL != string.Empty)
|
||||
|
@ -107,10 +105,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
m_Enabled = true;
|
||||
m_RedirectURL = config.GetString("GetTextureRedirectURL");
|
||||
}
|
||||
=======
|
||||
if (config != null)
|
||||
m_Url = config.GetString("Cap_GetTexture", "localhost");
|
||||
>>>>>>> avn/ubitvar
|
||||
*/
|
||||
m_Url = config.GetString("Cap_GetTexture", "localhost");
|
||||
}
|
||||
|
||||
public void AddRegion(Scene s)
|
||||
|
@ -142,7 +138,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
for (uint i = 0; i < 2; i++)
|
||||
{
|
||||
m_workerThreads[i] = Watchdog.StartThread(DoTextureRequests,
|
||||
m_workerThreads[i] = WorkManager.StartThread(DoTextureRequests,
|
||||
String.Format("TextureWorkerThread{0}", i),
|
||||
ThreadPriority.Normal,
|
||||
false,
|
||||
|
@ -237,12 +233,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public PollServiceTextureEventArgs(UUID pId, Scene scene) :
|
||||
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;
|
||||
// x is request id, y is userid
|
||||
HasEvents = (x, y) =>
|
||||
|
@ -312,7 +302,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
return response;
|
||||
};
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
public void Process(aPollRequest requestinfo)
|
||||
|
@ -402,11 +391,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
}
|
||||
IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>();
|
||||
if (handler != null)
|
||||
<<<<<<< HEAD
|
||||
handler.RegisterExternalUserCapsHandler(agentID,caps,"GetTexture", m_URL);
|
||||
=======
|
||||
handler.RegisterExternalUserCapsHandler(agentID, caps, "GetTexture", capUrl);
|
||||
>>>>>>> avn/ubitvar
|
||||
else
|
||||
caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
||||
m_pollservices[agentID] = args;
|
||||
|
@ -422,7 +407,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
{
|
||||
PollServiceTextureEventArgs args;
|
||||
|
||||
MainServer.Instance.RemoveHTTPHandler("", m_URL);
|
||||
MainServer.Instance.RemoveHTTPHandler("", m_Url);
|
||||
m_capsDict.Remove(agentID);
|
||||
|
||||
if (m_pollservices.TryGetValue(agentID, out args))
|
||||
|
|
|
@ -157,11 +157,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
m_features["MeshXferEnabled"] = true;
|
||||
|
||||
m_features["PhysicsMaterialsEnabled"] = true;
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
OSDMap typesMap = new OSDMap();
|
||||
typesMap["convex"] = true;
|
||||
typesMap["none"] = true;
|
||||
|
@ -169,7 +165,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
m_features["PhysicsShapeTypes"] = typesMap;
|
||||
|
||||
// Extra information for viewers that want to use it
|
||||
<<<<<<< HEAD
|
||||
// TODO: Take these out of here into their respective modules, like map-server-url
|
||||
OSDMap extrasMap;
|
||||
if(m_features.ContainsKey("OpenSimExtras"))
|
||||
|
@ -179,15 +174,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
else
|
||||
extrasMap = new OSDMap();
|
||||
|
||||
=======
|
||||
|
||||
OSDMap extrasMap = new OSDMap();
|
||||
|
||||
extrasMap["AvatarSkeleton"] = true;
|
||||
extrasMap["AnimationSet"] = true;
|
||||
|
||||
// TODO: Take these out of here into their respective modules, like map-server-url
|
||||
>>>>>>> avn/ubitvar
|
||||
if (m_SearchURL != string.Empty)
|
||||
extrasMap["search-server-url"] = m_SearchURL;
|
||||
if (!string.IsNullOrEmpty(m_DestinationGuideURL))
|
||||
|
@ -199,13 +189,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
if (m_GridName != string.Empty)
|
||||
extrasMap["GridName"] = m_GridName;
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (extrasMap.Count > 0)
|
||||
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
|
||||
{
|
||||
/*
|
||||
[TestFixture]
|
||||
public class WebFetchInvDescModuleTests : OpenSimTestCase
|
||||
{
|
||||
|
@ -156,4 +157,5 @@ namespace OpenSim.Region.ClientStack.Linden.Caps.Tests
|
|||
Assert.That((int)folderOsd["descendents"], Is.EqualTo(16));
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -66,16 +66,19 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
private bool m_persistBakedTextures;
|
||||
|
||||
private IBakedTextureModule m_BakedTextureModule;
|
||||
|
||||
private IBakedTextureModule m_BakedTextureModule;
|
||||
private string m_URL;
|
||||
|
||||
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"];
|
||||
if (appearanceConfig != null)
|
||||
m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void AddRegion(Scene s)
|
||||
|
@ -91,13 +94,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
s.EventManager.OnRemovePresence -= DeRegisterPresence;
|
||||
m_BakedTextureModule = null;
|
||||
m_scene = null;
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
=======
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
|
||||
|
||||
public void RegionLoaded(Scene s)
|
||||
{
|
||||
|
@ -109,173 +106,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
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)
|
||||
|
@ -441,25 +271,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
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));
|
||||
if (m_URL == "localhost")
|
||||
{
|
||||
|
@ -480,7 +291,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
{
|
||||
caps.RegisterHandler("UploadBakedTexture", m_URL);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,11 +64,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>
|
||||
/// Control whether requests will be processed asynchronously.
|
||||
|
|
|
@ -723,11 +723,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if (!m_packetHandlers.ContainsKey(packetType))
|
||||
{
|
||||
m_packetHandlers.Add(
|
||||
<<<<<<< HEAD
|
||||
packetType, new PacketProcessor() { method = handler, Async = doAsync, InEngine = inEngine });
|
||||
=======
|
||||
packetType, new PacketProcessor() { method = handler, Async = doAsync });
|
||||
>>>>>>> avn/ubitvar
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
@ -1228,15 +1224,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// <param name="map">heightmap</param>
|
||||
public virtual void SendLayerData(float[] map)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
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
|
||||
// and it improves user experience just so much!
|
||||
// DoSendLayerData(map);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1250,18 +1242,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
try
|
||||
{
|
||||
// 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 x = 0; x < 16; x++)
|
||||
|
@ -1269,7 +1250,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
SendLayerData(x, y, map);
|
||||
}
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
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.
|
||||
// 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,
|
||||
|
@ -1393,29 +1305,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
|
||||
/// <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.
|
||||
/// 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.
|
||||
|
@ -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)
|
||||
{
|
||||
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2490,15 +2349,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
if (agentid == AgentId)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
ActiveGroupId = activegroupid;
|
||||
ActiveGroupName = groupname;
|
||||
ActiveGroupPowers = grouppowers;
|
||||
=======
|
||||
m_activeGroupID = activegroupid;
|
||||
m_activeGroupName = groupname;
|
||||
m_activeGroupPowers = grouppowers;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate);
|
||||
|
@ -3888,15 +3741,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
avp.Sender.IsTrial = false;
|
||||
avp.Sender.ID = agentID;
|
||||
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
|
||||
<<<<<<< HEAD
|
||||
avp.AppearanceHover = new AvatarAppearancePacket.AppearanceHoverBlock[0];
|
||||
=======
|
||||
|
||||
// this need be use in future
|
||||
// avp.AppearanceData[0].AppearanceVersion = 0;
|
||||
// avp.AppearanceData[0].CofVersion = 0;
|
||||
// this need be use in future ?
|
||||
// avp.AppearanceData[0].AppearanceVersion = 0;
|
||||
// avp.AppearanceData[0].CofVersion = 0;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
||||
OutPacket(avp, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
||||
}
|
||||
|
@ -4014,22 +3864,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// </summary>
|
||||
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate))
|
||||
{
|
||||
ImprovedTerseObjectUpdatePacket packet
|
||||
= (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.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f);
|
||||
|
@ -4037,6 +3875,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false);
|
||||
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
|
||||
{
|
||||
//double priority = m_prioritizer.GetUpdatePriority(this, entity);
|
||||
|
@ -4385,15 +4232,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
OutPacket(packet, ThrottleOutPacketType.Task, true);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[LLCLIENTVIEW]: Sent {0} updates in ProcessEntityUpdates() for {1} {2} in {3}",
|
||||
// updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name);
|
||||
//
|
||||
#endregion Packet Sending
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
public void ReprioritizeUpdates()
|
||||
|
@ -5360,11 +5203,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
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;
|
||||
rotation = presence.Rotation;
|
||||
angularVelocity = presence.AngularVelocity;
|
||||
|
@ -5373,7 +5211,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
attachPoint = 0;
|
||||
// m_log.DebugFormat(
|
||||
// "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// attachPoint = presence.State; // Core: commented
|
||||
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);
|
||||
|
||||
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 acceleration = new Vector3(0, 0, 0);
|
||||
|
@ -5596,11 +5415,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
//update.JointType = 0;
|
||||
update.Material = data.Material;
|
||||
update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
/*
|
||||
>>>>>>> avn/ubitvar
|
||||
if (data.ParentGroup.IsAttachment)
|
||||
{
|
||||
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.
|
||||
update.State = data.ParentGroup.RootPart.Shape.State;
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
if (data.ParentGroup.IsAttachment)
|
||||
{
|
||||
|
@ -9365,11 +9180,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if ((locX >= m_scene.RegionInfo.WorldLocX)
|
||||
&& (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX))
|
||||
&& (locY >= m_scene.RegionInfo.WorldLocY)
|
||||
<<<<<<< HEAD
|
||||
&& (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.Position.X += locX - m_scene.RegionInfo.WorldLocX;
|
||||
|
@ -12285,7 +12096,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// <param name="packet"></param>
|
||||
/// <returns></returns>
|
||||
// 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;
|
||||
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;
|
||||
if (handlerCachedTextureRequest != null)
|
||||
{
|
||||
|
@ -12368,7 +12159,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
|
||||
return true;
|
||||
}*/
|
||||
}
|
||||
*/
|
||||
|
||||
protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
|
||||
{
|
||||
|
@ -12408,21 +12200,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
for (int i = 0; i < maxWearablesLoop; i++)
|
||||
{
|
||||
int idx = cachedtex.WearableData[i].TextureIndex;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
||||
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
||||
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)
|
||||
{
|
||||
cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
|
||||
cacheHits++;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -12432,29 +12216,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
else
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
// Cached textures not available
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
for (int i = 0; i < maxWearablesLoop; i++)
|
||||
{
|
||||
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
|
||||
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
m_log.DebugFormat("texture cached: hits {0}", cacheHits);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
cachedresp.Header.Zerocoded = true;
|
||||
OutPacket(cachedresp, ThrottleOutPacketType.Task);
|
||||
|
||||
|
|
|
@ -96,9 +96,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
set
|
||||
{
|
||||
m_throttleDebugLevel = value;
|
||||
/*
|
||||
m_throttleClient.DebugLevel = m_throttleDebugLevel;
|
||||
foreach (TokenBucket tb in m_throttleCategories)
|
||||
tb.DebugLevel = m_throttleDebugLevel;
|
||||
*/
|
||||
}
|
||||
}
|
||||
private int m_throttleDebugLevel;
|
||||
|
@ -250,22 +252,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if (maxRTO != 0)
|
||||
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;
|
||||
float m_burst = rates.ClientMaxRate * m_burstTime;
|
||||
|
||||
// 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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// Create an array of token buckets for this clients different throttle categories
|
||||
m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT];
|
||||
|
||||
|
@ -278,19 +270,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
|
||||
|
||||
// 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>();
|
||||
// Initialize the token buckets that control the throttling for each category
|
||||
m_throttleCategories[i] = new TokenBucket(m_throttleClient, rates.GetRate(type), m_burst);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
// 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.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].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;
|
||||
}
|
||||
|
||||
|
@ -460,13 +436,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
int texture = (int)(BitConverter.ToSingle(adjData, pos) * scale); pos += 4;
|
||||
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,
|
||||
// otherwise a throttle could become permanently clogged
|
||||
|
@ -486,32 +456,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// the task queue (e.g. object updates)
|
||||
task = task + (int)(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;
|
||||
|
||||
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}",
|
||||
// AgentID, resend, land, wind, cloud, task, texture, asset, total);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// Update the token buckets with new throttle values
|
||||
if (m_throttleClient.AdaptiveEnabled)
|
||||
if (ThrottleDebugLevel > 0)
|
||||
{
|
||||
long total = resend + land + wind + cloud + task + texture + asset;
|
||||
m_throttleClient.TargetDripRate = total;
|
||||
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);
|
||||
}
|
||||
|
||||
TokenBucket bucket;
|
||||
|
@ -887,20 +841,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// signature</param>
|
||||
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;
|
||||
QueueEmpty callback = OnQueueEmpty;
|
||||
=======
|
||||
ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o;
|
||||
QueueEmpty callback = OnQueueEmpty;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (callback != null)
|
||||
{
|
||||
|
|
|
@ -473,17 +473,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
#endregion BinaryStats
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 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
|
||||
Throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps * 10e-3f);
|
||||
ThrottleRates = new ThrottleRates(configSource);
|
||||
|
||||
Random rnd = new Random(Util.EnvironmentTickCount());
|
||||
|
@ -784,151 +774,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if (UsePools)
|
||||
EnablePoolStats();
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
LLUDPServerCommands commands = new LLUDPServerCommands(MainConsole.Instance, this);
|
||||
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)
|
||||
|
@ -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
|
||||
// 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.
|
||||
<<<<<<< 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;
|
||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
SendPacketFinal(outgoingPacket);
|
||||
return true;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// }
|
||||
=======
|
||||
|
||||
return false;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
#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
|
||||
IClientAPI client = null;
|
||||
if (!m_scene.TryGetClient(endPoint, out client) || !(client is LLClientView))
|
||||
if (!Scene.TryGetClient(endPoint, out client) || !(client is LLClientView))
|
||||
{
|
||||
// UseCircuitCode handling
|
||||
if (packet.Type == PacketType.UseCircuitCode)
|
||||
|
@ -1473,12 +1301,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if (m_pendingCache.Contains(endPoint))
|
||||
return;
|
||||
|
||||
<<<<<<< HEAD
|
||||
Util.FireAndForget(HandleUseCircuitCode, array, "LLUDPServer.HandleUseCircuitCode");
|
||||
=======
|
||||
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
|
||||
// buffer.
|
||||
|
@ -1507,14 +1331,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// Send ack straight away to let the viewer know that we got it.
|
||||
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
|
||||
// buffer.
|
||||
object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet };
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
Util.FireAndForget(HandleCompleteMovementIntoRegion, array);
|
||||
|
||||
|
@ -1524,12 +1343,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
|
||||
// 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))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
//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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1652,28 +1466,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length);
|
||||
#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
|
||||
|
||||
|
@ -1853,7 +1648,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
AuthenticateResponse 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
|
||||
client
|
||||
|
@ -1868,7 +1663,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// an existing child agent, and there is no circuit data
|
||||
if (client != null && aCircuit == null)
|
||||
{
|
||||
m_scene.CloseAgent(client.AgentId, true);
|
||||
Scene.CloseAgent(client.AgentId, true);
|
||||
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.
|
||||
if (client != null)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
AgentCircuitData aCircuit = Scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
bool tp = (aCircuit.teleportFlags > 0);
|
||||
// Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
|
||||
if (!tp && !client.SceneAgent.SentInitialDataToClient)
|
||||
client.SceneAgent.SendInitialDataToClient();
|
||||
if (!tp)
|
||||
client.SceneAgent.SendInitialDataToMe();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1923,17 +1714,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// Don't create clients for unauthorized requesters.
|
||||
m_log.WarnFormat(
|
||||
"[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, m_scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint);
|
||||
|
||||
lock (m_pendingCache)
|
||||
m_pendingCache.Remove(endPoint);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
|
||||
// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
|
||||
|
@ -2127,24 +1914,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
if (!Scene.TryGetClient(agentID, out client))
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
||||
=======
|
||||
createNew = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (client.SceneAgent == null)
|
||||
{
|
||||
m_scene.CloseAgent(agentID, true);
|
||||
Scene.CloseAgent(agentID, true);
|
||||
createNew = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (createNew)
|
||||
{
|
||||
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, m_throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
||||
>>>>>>> avn/ubitvar
|
||||
LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO);
|
||||
|
||||
|
||||
client = new LLClientView(Scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode);
|
||||
client.OnLogout += LogoutHandler;
|
||||
|
@ -2174,29 +1958,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
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)
|
||||
{
|
||||
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, m_scene.Name);
|
||||
>>>>>>> avn/ubitvar
|
||||
client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, Scene.Name);
|
||||
|
||||
if (!client.SceneAgent.IsChildAgent)
|
||||
client.Kick("Simulator logged you out due to connection timeout.");
|
||||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
Scene.CloseAgent(client.AgentId, true);
|
||||
=======
|
||||
if (!m_scene.CloseAgent(client.AgentId, true))
|
||||
if (!Scene.CloseAgent(client.AgentId, true))
|
||||
client.Close(true,true);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void IncomingPacketHandler()
|
||||
|
@ -2209,7 +1983,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
while (IsRunningInbound)
|
||||
{
|
||||
m_scene.ThreadAlive(1);
|
||||
Scene.ThreadAlive(1);
|
||||
try
|
||||
{
|
||||
IncomingPacket incomingPacket = null;
|
||||
|
@ -2261,7 +2035,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
while (base.IsRunningOutbound)
|
||||
{
|
||||
m_scene.ThreadAlive(2);
|
||||
Scene.ThreadAlive(2);
|
||||
try
|
||||
{
|
||||
m_packetSent = false;
|
||||
|
@ -2524,15 +2298,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
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
|
||||
// {
|
||||
|
@ -2540,7 +2305,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}",
|
||||
// packet.Type, client.Name, m_scene.RegionInfo.RegionName);
|
||||
// }
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
IncomingPacketsProcessed++;
|
||||
}
|
||||
|
|
|
@ -224,7 +224,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
||||
cdl.AddRow("Adaptive throttles", m_udpServer.ThrottleRates.AdaptiveThrottlesEnabled);
|
||||
|
||||
long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate;
|
||||
long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate;
|
||||
cdl.AddRow(
|
||||
"Max scene throttle",
|
||||
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);
|
||||
ConsoleDisplayList cdl = new ConsoleDisplayList();
|
||||
|
||||
long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate;
|
||||
long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate;
|
||||
cdl.AddRow(
|
||||
"max-scene-throttle",
|
||||
maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset");
|
||||
|
|
|
@ -35,6 +35,7 @@ using OpenSim.Tests.Common;
|
|||
|
||||
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||
{
|
||||
/*
|
||||
[TestFixture]
|
||||
public class ThrottleTests : OpenSimTestCase
|
||||
{
|
||||
|
@ -57,16 +58,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
[Test]
|
||||
public void TestSetRequestDripRate()
|
||||
{
|
||||
|
||||
TestHelpers.InMethod();
|
||||
|
||||
TokenBucket tb = new TokenBucket("tb", null, 5000, 0);
|
||||
TokenBucket tb = new TokenBucket(null, 5000f,10000f);
|
||||
AssertRates(tb, 5000, 0, 5000, 0);
|
||||
|
||||
tb.RequestedDripRate = 4000;
|
||||
tb.RequestedDripRate = 4000f;
|
||||
AssertRates(tb, 4000, 0, 4000, 0);
|
||||
|
||||
tb.RequestedDripRate = 6000;
|
||||
AssertRates(tb, 6000, 0, 6000, 0);
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -74,7 +77,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
TokenBucket tb = new TokenBucket("tb", null, 5000, 10000);
|
||||
TokenBucket tb = new TokenBucket(null, 5000,15000);
|
||||
AssertRates(tb, 5000, 0, 5000, 10000);
|
||||
|
||||
tb.RequestedDripRate = 4000;
|
||||
|
@ -92,9 +95,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
TokenBucket tbParent = new TokenBucket("tbParent", null, 0, 0);
|
||||
TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000, 0);
|
||||
TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000, 0);
|
||||
TokenBucket tbParent = new TokenBucket("tbParent", null, 0);
|
||||
TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000);
|
||||
TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000);
|
||||
|
||||
AssertRates(tbParent, 8000, 8000, 8000, 0);
|
||||
AssertRates(tbChild1, 3000, 0, 3000, 0);
|
||||
|
@ -113,6 +116,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
AssertRates(tbParent, 6000, 8000, 6000, 0);
|
||||
AssertRates(tbChild1, 3000, 0, 6000 / 8 * 3, 0);
|
||||
AssertRates(tbChild2, 5000, 0, 6000 / 8 * 5, 0);
|
||||
|
||||
}
|
||||
|
||||
private void AssertRates(
|
||||
|
@ -424,4 +428,5 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
udpClient.SetThrottles(throttles);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -42,24 +42,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public class TokenBucket
|
||||
{
|
||||
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 Int32 m_identifier;
|
||||
|
||||
protected const float m_timeScale = 1e-3f;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>
|
||||
/// This is the number of m_minimumDripRate bytes
|
||||
|
@ -72,11 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
protected const Int32 m_minimumDripRate = LLUDPServer.MTU;
|
||||
=======
|
||||
protected const float m_minimumDripRate = 1400;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>Time of the last drip, in system ticks</summary>
|
||||
protected Int32 m_lastDrip;
|
||||
|
@ -90,27 +74,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// <summary>
|
||||
/// Map of children buckets and their requested maximum burst rate
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
protected Dictionary<TokenBucket,Int64> m_children = new Dictionary<TokenBucket,Int64>();
|
||||
=======
|
||||
|
||||
protected Dictionary<TokenBucket, float> m_children = new Dictionary<TokenBucket, float>();
|
||||
|
||||
#region Properties
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>
|
||||
/// The parent bucket of this bucket, or null if this bucket has no
|
||||
/// parent. The parent bucket will limit the aggregate bandwidth of all
|
||||
/// of its children buckets
|
||||
/// </summary>
|
||||
public TokenBucket Parent { get; protected set; }
|
||||
|
||||
protected TokenBucket m_parent;
|
||||
public TokenBucket Parent
|
||||
{
|
||||
get { return m_parent; }
|
||||
set { m_parent = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// This is the maximum number
|
||||
/// of tokens that can accumulate in the bucket at any one time. This
|
||||
/// also sets the total request for leaf nodes
|
||||
/// </summary>
|
||||
protected float m_burst;
|
||||
//not in use
|
||||
public float MaxDripRate { get; set; }
|
||||
|
||||
public float RequestedBurst
|
||||
{
|
||||
get { return m_burst; }
|
||||
|
@ -143,63 +131,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// Can never be above MaxDripRate.
|
||||
/// Tokens are added to the bucket at any time
|
||||
/// <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>
|
||||
protected float m_dripRate;
|
||||
|
||||
public virtual float RequestedDripRate
|
||||
{
|
||||
get { return (m_dripRate == 0 ? m_totalDripRequest : m_dripRate); }
|
||||
|
@ -212,7 +146,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
}
|
||||
}
|
||||
|
||||
public virtual float DripRate
|
||||
public virtual float DripRate
|
||||
{
|
||||
get {
|
||||
float rate = Math.Min(RequestedDripRate,TotalDripRequest);
|
||||
|
@ -220,28 +154,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
return rate;
|
||||
|
||||
rate *= m_parent.DripRateModifier();
|
||||
>>>>>>> avn/ubitvar
|
||||
if (rate < m_minimumDripRate)
|
||||
rate = m_minimumDripRate;
|
||||
else if (MaxDripRate > 0 && rate > MaxDripRate)
|
||||
rate = MaxDripRate;
|
||||
|
||||
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>
|
||||
/// The current total of the requested maximum burst rates of children buckets.
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
public Int64 TotalDripRequest { get; protected set; }
|
||||
=======
|
||||
protected float m_totalDripRequest;
|
||||
public float TotalDripRequest
|
||||
{
|
||||
|
@ -252,7 +174,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
#endregion Properties
|
||||
|
||||
#region Constructor
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
|
@ -260,36 +182,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// <param name="identifier">Identifier for this token bucket</param>
|
||||
/// <param name="parent">Parent bucket if this is a child bucket, or
|
||||
/// 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
|
||||
/// zero if this bucket has no maximum capacity</param>
|
||||
/// <param name="dripRate">Rate that the bucket fills, in bytes per
|
||||
/// second. If zero, the bucket always remains full</param>
|
||||
public TokenBucket(TokenBucket parent, float dripRate, float MaxBurst)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
Identifier = identifier;
|
||||
m_counter++;
|
||||
|
||||
Parent = parent;
|
||||
<<<<<<< HEAD
|
||||
RequestedDripRate = requestedDripRate;
|
||||
MaxDripRate = maxDripRate;
|
||||
m_lastDrip = Util.EnvironmentTickCount();
|
||||
=======
|
||||
RequestedDripRate = dripRate;
|
||||
RequestedBurst = MaxBurst;
|
||||
// TotalDripRequest = dripRate; // this will be overwritten when a child node registers
|
||||
// MaxBurst = (Int64)((double)dripRate * m_quantumsPerBurst);
|
||||
m_lastDrip = Util.EnvironmentTickCount() + 100000;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
#endregion Constructor
|
||||
|
||||
/// <summary>
|
||||
/// Compute a modifier for the MaxBurst rate. This is 1.0, meaning
|
||||
/// no modification if the requested bandwidth is less than the
|
||||
|
@ -299,20 +209,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// </summary>
|
||||
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;
|
||||
return driprate >= TotalDripRequest ? 1.0f : driprate / TotalDripRequest;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -335,29 +233,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
m_children[child] = request;
|
||||
|
||||
<<<<<<< HEAD
|
||||
TotalDripRequest = 0;
|
||||
foreach (KeyValuePair<TokenBucket, Int64> cref in m_children)
|
||||
TotalDripRequest += cref.Value;
|
||||
=======
|
||||
m_totalDripRequest = 0;
|
||||
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
||||
m_totalDripRequest += cref.Value;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
// Pass the new values up to the parent
|
||||
if (Parent != null)
|
||||
{
|
||||
Int64 effectiveDripRate;
|
||||
|
||||
if (RequestedDripRate > 0)
|
||||
effectiveDripRate = Math.Min(RequestedDripRate, TotalDripRequest);
|
||||
else
|
||||
effectiveDripRate = TotalDripRequest;
|
||||
|
||||
Parent.RegisterRequest(this, effectiveDripRate);
|
||||
}
|
||||
if (m_parent != null)
|
||||
m_parent.RegisterRequest(this, Math.Min(RequestedDripRate, TotalDripRequest));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -370,15 +253,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
m_children.Remove(child);
|
||||
|
||||
<<<<<<< HEAD
|
||||
TotalDripRequest = 0;
|
||||
foreach (KeyValuePair<TokenBucket, Int64> cref in m_children)
|
||||
TotalDripRequest += cref.Value;
|
||||
=======
|
||||
m_totalDripRequest = 0;
|
||||
foreach (KeyValuePair<TokenBucket, float> cref in m_children)
|
||||
m_totalDripRequest += cref.Value;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
// Pass the new values up to the parent
|
||||
|
@ -427,7 +304,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// with no drip rate...
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -453,17 +330,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public bool AdaptiveEnabled { get; set; }
|
||||
|
||||
/// <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
|
||||
/// packet per second.
|
||||
/// </summary>
|
||||
|
@ -479,13 +345,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public float MaxDripRate
|
||||
{
|
||||
get { return (m_maxDripRate == 0 ? m_totalDripRequest : m_maxDripRate); }
|
||||
set
|
||||
set
|
||||
{
|
||||
m_maxDripRate = (value == 0 ? m_totalDripRequest : Math.Max(value, m_minimumFlow));
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
protected Int64 m_targetDripRate;
|
||||
|
||||
private bool m_enabled = false;
|
||||
|
||||
// <summary>
|
||||
// Adjust drip rate in response to network conditions.
|
||||
|
@ -493,109 +359,50 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public virtual float AdjustedDripRate
|
||||
{
|
||||
get { return m_dripRate; }
|
||||
<<<<<<< HEAD
|
||||
set
|
||||
set
|
||||
{
|
||||
m_dripRate = OpenSim.Framework.Util.Clamp<Int64>(value, m_minimumFlow, TargetDripRate);
|
||||
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);
|
||||
m_dripRate = OpenSim.Framework.Util.Clamp<float>(value, m_minimumFlow, MaxDripRate);
|
||||
|
||||
if (m_parent != null)
|
||||
m_parent.RegisterRequest(this,m_dripRate);
|
||||
>>>>>>> avn/ubitvar
|
||||
m_parent.RegisterRequest(this, m_dripRate);
|
||||
}
|
||||
}
|
||||
|
||||
/// <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>
|
||||
public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate,float maxBurst, bool enabled)
|
||||
: base(parent, maxDripRate,maxBurst)
|
||||
public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate, float maxBurst, bool enabled)
|
||||
: base(parent, maxDripRate, maxBurst)
|
||||
{
|
||||
m_enabled = enabled;
|
||||
|
||||
|
||||
MaxDripRate = maxDripRate;
|
||||
|
||||
if (enabled)
|
||||
AdjustedDripRate = m_maxDripRate * .5f;
|
||||
else
|
||||
AdjustedDripRate = m_maxDripRate;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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>
|
||||
/// </summary>
|
||||
public void ExpirePackets(Int32 packets)
|
||||
public void ExpirePackets(Int32 count)
|
||||
{
|
||||
if (AdaptiveEnabled)
|
||||
{
|
||||
if (DebugLevel > 0)
|
||||
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));
|
||||
}
|
||||
// m_log.WarnFormat("[ADAPTIVEBUCKET] drop {0} by {1} expired packets",AdjustedDripRate,count);
|
||||
if (m_enabled)
|
||||
AdjustedDripRate = (Int64)(AdjustedDripRate / Math.Pow(2, count));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reliable packets acked by the client adjust the drip rate up.
|
||||
/// <param name="packets">Number of packets successfully acknowledged</param>
|
||||
/// </summary>
|
||||
public void AcknowledgePackets(Int32 packets)
|
||||
// <summary>
|
||||
//
|
||||
// </summary>
|
||||
public void AcknowledgePackets(Int32 count)
|
||||
{
|
||||
if (AdaptiveEnabled)
|
||||
AdjustedDripRate = AdjustedDripRate + packets * LLUDPServer.MTU;
|
||||
}
|
||||
|
||||
/// <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;
|
||||
if (m_enabled)
|
||||
AdjustedDripRate = AdjustedDripRate + count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -141,11 +141,6 @@ namespace OpenSim.Region.ClientStack
|
|||
PhysicsPluginManager physicsPluginManager;
|
||||
physicsPluginManager = new PhysicsPluginManager();
|
||||
physicsPluginManager.LoadPluginsFromAssemblies("Physics");
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
return physicsPluginManager.GetPhysicsScene(engine, meshEngine, config, osSceneIdentifier, regionExtent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -455,8 +455,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
|
|||
m_transactions.RemoveXferUploader(m_transactionID);
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
private void ValidateAssets()
|
||||
{
|
||||
if (m_asset.Type == (sbyte)CustomAssetType.AnimationSet)
|
||||
|
@ -599,6 +598,5 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
|
|||
|
||||
return result;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
|
|
@ -406,25 +406,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
foreach (SceneObjectGroup so in attachments)
|
||||
{
|
||||
|
@ -477,18 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
if (!Enabled)
|
||||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -229,7 +229,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
private void SendAppearance(ScenePresence sp)
|
||||
{
|
||||
// Send the appearance to everyone in the scene
|
||||
sp.SendAppearanceToAllOtherClients();
|
||||
sp.SendAppearanceToAllOtherAgents();
|
||||
|
||||
// Send animations back to the avatar as well
|
||||
sp.Animator.SendAnimPack();
|
||||
|
@ -460,7 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
{
|
||||
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;
|
||||
if (wearableCache == null)
|
||||
|
@ -577,15 +571,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
if (wearableCacheValid)
|
||||
m_log.Debug("[ValidateBakedCache] have valid local cache");
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
bool checkExternal = false;
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
|
||||
return false;
|
||||
}
|
||||
=======
|
||||
if (!wearableCacheValid)
|
||||
{
|
||||
// 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;
|
||||
|
||||
|
|
|
@ -132,7 +132,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
for (byte i = 0; i < visualParams.Length; i++)
|
||||
visualParams[i] = i;
|
||||
|
||||
<<<<<<< HEAD
|
||||
Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10));
|
||||
uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes);
|
||||
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
||||
|
@ -145,12 +144,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, null);
|
||||
|
||||
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]
|
||||
|
@ -188,11 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex);
|
||||
eyesFace.TextureID = eyesTextureId;
|
||||
|
||||
<<<<<<< HEAD
|
||||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, null);
|
||||
=======
|
||||
afm.SetAppearance(sp, bakedTextureEntry, visualParams, new WearableCacheItem[0]);
|
||||
>>>>>>> avn/ubitvar
|
||||
afm.SaveBakedTextures(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)
|
||||
{
|
||||
if (m_URL == String.Empty)
|
||||
|
|
|
@ -214,13 +214,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
|||
UUID destination = c.Destination;
|
||||
Vector3 fromPos = c.Position;
|
||||
Vector3 regionPos = new Vector3(scene.RegionInfo.WorldLocX, scene.RegionInfo.WorldLocY, 0);
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
bool checkParcelHide = false;
|
||||
UUID sourceParcelID = UUID.Zero;
|
||||
Vector3 hidePos = fromPos;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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);
|
||||
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)
|
||||
{
|
||||
((Scene)c.Scene).ForEachRootClient
|
||||
|
@ -419,7 +395,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
|||
(c.Scene as Scene).EventManager.TriggerOnChatToClients(
|
||||
fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -183,15 +183,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
|||
try
|
||||
{
|
||||
ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||
<<<<<<< HEAD
|
||||
|
||||
if (obj == null)
|
||||
return;
|
||||
|
||||
=======
|
||||
if (obj == null)
|
||||
return;
|
||||
>>>>>>> avn/ubitvar
|
||||
if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0
|
||||
|| avatar.Scene.RegionInfo.RegionSettings.AllowDamage)
|
||||
{
|
||||
|
|
|
@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
SendGridInstantMessageViaXMLRPC(im, result);
|
||||
}
|
||||
|
||||
public void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result)
|
||||
public virtual void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result)
|
||||
{
|
||||
UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage;
|
||||
|
||||
|
@ -445,14 +445,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
return resp;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
/// <summary>
|
||||
/// delegate for sending a grid instant message asynchronously
|
||||
/// </summary>
|
||||
public delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result);
|
||||
=======
|
||||
private delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
private class GIM {
|
||||
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)
|
||||
{
|
||||
GridInstantMessageDelegate d = (GridInstantMessageDelegate)iar.AsyncState;
|
||||
d.EndInvoke(iar);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Internal SendGridInstantMessage over XMLRPC method.
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
/// <remarks>
|
||||
/// This is called from within a dedicated thread.
|
||||
/// </remarks>
|
||||
private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result)
|
||||
=======
|
||||
|
||||
/// <param name="prevRegionHandle">
|
||||
/// Pass in 0 the first time this method is called. It will be called recursively with the last
|
||||
/// regionhandle tried
|
||||
/// </param>
|
||||
private void SendGridInstantMessageViaXMLRPCAsyncMain(GridInstantMessage im, MessageResultNotification result)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
GIM gim;
|
||||
do {
|
||||
|
@ -525,87 +513,124 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
}
|
||||
} while (gim != null);
|
||||
}
|
||||
|
||||
private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result, UUID prevRegionID)
|
||||
{
|
||||
|
||||
UUID toAgentID = new UUID(im.toAgentID);
|
||||
PresenceInfo upd = null;
|
||||
UUID regionID;
|
||||
bool needToLookupAgent;
|
||||
bool lookupAgent = false;
|
||||
|
||||
lock (m_UserRegionMap)
|
||||
needToLookupAgent = !m_UserRegionMap.TryGetValue(toAgentID, out regionID);
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (needToLookupAgent)
|
||||
if (m_UserRegionMap.ContainsKey(toAgentID))
|
||||
{
|
||||
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() });
|
||||
upd = new PresenceInfo();
|
||||
upd.RegionID = m_UserRegionMap[toAgentID];
|
||||
|
||||
UUID foundRegionID = UUID.Zero;
|
||||
|
||||
if (presences != null)
|
||||
// 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)
|
||||
{
|
||||
foreach (PresenceInfo p in presences)
|
||||
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() });
|
||||
if (presences != null && presences.Length > 0)
|
||||
{
|
||||
foreach (PresenceInfo p in presences)
|
||||
{
|
||||
if (p.RegionID != UUID.Zero)
|
||||
{
|
||||
if (p.RegionID != UUID.Zero)
|
||||
{
|
||||
foundRegionID = p.RegionID;
|
||||
break;
|
||||
}
|
||||
upd = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If not found or the found region is the same as the last lookup, then message is undeliverable
|
||||
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)
|
||||
if (upd != null)
|
||||
{
|
||||
m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", regionID);
|
||||
break;
|
||||
// check if we've tried this before..
|
||||
// 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)
|
||||
{
|
||||
GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero,
|
||||
upd.RegionID);
|
||||
if (reginfo != null)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
lock (m_UserRegionMap)
|
||||
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)
|
||||
{
|
||||
m_UserRegionMap[toAgentID] = regionID;
|
||||
// IM delivery successful, so store the Agent's location in our local cache.
|
||||
lock (m_UserRegionMap)
|
||||
{
|
||||
if (m_UserRegionMap.ContainsKey(toAgentID))
|
||||
{
|
||||
m_UserRegionMap[toAgentID] = upd.RegionID;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_UserRegionMap.Add(toAgentID, upd.RegionID);
|
||||
}
|
||||
}
|
||||
result(true);
|
||||
}
|
||||
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
|
||||
|
||||
// This is recursive!!!!!
|
||||
SendGridInstantMessageViaXMLRPCAsync(im, result,
|
||||
upd.RegionID);
|
||||
}
|
||||
result(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// If we reach this point in the first iteration of the while, then we may have unsuccessfully tried
|
||||
// to use a locally cached region ID. All subsequent attempts need to lookup agent details from
|
||||
// the presence service.
|
||||
needToLookupAgent = true;
|
||||
else
|
||||
{
|
||||
m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", upd.RegionID);
|
||||
HandleUndeliverableMessage(im, result);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleUndeliverableMessage(im, result);
|
||||
}
|
||||
|
||||
// If we reached this point then the message was not deliverable. Remove the bad cache entry and
|
||||
// signal the delivery failure.
|
||||
lock (m_UserRegionMap)
|
||||
m_UserRegionMap.Remove(toAgentID);
|
||||
|
||||
// m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
|
||||
HandleUndeliverableMessage(im, result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -709,6 +734,5 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
gim["message_key"] = m_MessageKey;
|
||||
return gim;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -238,7 +238,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
return;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (!m_ForwardOfflineGroupMessages)
|
||||
{
|
||||
if (im.dialog == (byte)InstantMessageDialog.GroupNotice ||
|
||||
|
@ -246,9 +245,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
return;
|
||||
}
|
||||
|
||||
bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
|
||||
"POST", m_RestURL+"/SaveMessage/", im, 10000);
|
||||
=======
|
||||
Scene scene = FindScene(new UUID(im.fromAgentID));
|
||||
if (scene == null)
|
||||
scene = m_SceneList[0];
|
||||
|
@ -256,7 +252,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
|
|||
SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>(
|
||||
"POST", m_RestURL+"/SaveMessage/?scope=" +
|
||||
scene.RegionInfo.ScopeID.ToString(), im);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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",
|
||||
folderID, new UUID(im.toAgentID));
|
||||
|
||||
<<<<<<< HEAD
|
||||
InventoryFolderBase folderCopy
|
||||
= scene.GiveInventoryFolder(client, receipientID, client.AgentId, folderID, UUID.Zero);
|
||||
=======
|
||||
InventoryFolderBase folderCopy
|
||||
= scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero);
|
||||
>>>>>>> avn/ubitvar
|
||||
= scene.GiveInventoryFolder(client, recipientID, client.AgentId, folderID, UUID.Zero);
|
||||
|
||||
if (folderCopy == null)
|
||||
{
|
||||
|
@ -475,7 +470,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
|||
/// <param name="im"></param>
|
||||
private void OnGridInstantMessage(GridInstantMessage im)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
// Check if it's a type of message that we should handle
|
||||
if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered)
|
||||
|| (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}",
|
||||
(InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID);
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
// Check if this is ours to handle
|
||||
//
|
||||
Scene scene = FindClientScene(new UUID(im.toAgentID));
|
||||
|
|
|
@ -869,7 +869,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
|||
}
|
||||
#endregion Notes
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
#region User Preferences
|
||||
/// <summary>
|
||||
/// Updates the user preferences.
|
||||
|
@ -933,8 +933,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
|||
}
|
||||
#endregion User Preferences
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
#region Avatar Properties
|
||||
/// <summary>
|
||||
/// Update the avatars interests .
|
||||
|
@ -1401,8 +1399,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
|||
return null;
|
||||
}
|
||||
#endregion Util
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
#region Web Util
|
||||
/// <summary>
|
||||
|
@ -1580,6 +1576,5 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
|||
return true;
|
||||
}
|
||||
#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
|
||||
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);
|
||||
}
|
||||
|
||||
public void Add(ulong pRegionHandle, UUID pAgentID, double newTime, double extendTime)
|
||||
{
|
||||
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_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(extendTime), TimeSpan.FromSeconds(extendTime));
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
// Remove the agent from the region's banned list
|
||||
public void Remove(ulong pRegionHandle, UUID pAgentID)
|
||||
{
|
||||
|
@ -183,6 +176,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BannedRegionCache m_bannedRegionCache = new BannedRegionCache();
|
||||
|
||||
private IEventQueue m_eqModule;
|
||||
|
@ -222,7 +216,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
{
|
||||
string transferVersionName = "SIMULATION";
|
||||
float maxTransferVersion = 0.3f;
|
||||
<<<<<<< HEAD
|
||||
|
||||
IConfig hypergridConfig = source.Configs["Hypergrid"];
|
||||
if (hypergridConfig != null)
|
||||
|
@ -235,8 +228,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (m_GatekeeperURI != string.Empty && !m_GatekeeperURI.EndsWith("/"))
|
||||
m_GatekeeperURI += '/';
|
||||
}
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
IConfig transferConfig = source.Configs["EntityTransfer"];
|
||||
if (transferConfig != null)
|
||||
|
@ -515,11 +506,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
// TODO: Check other Scene HeightField
|
||||
posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y];
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
posZLimit += localHalfAVHeight + 0.1f;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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);
|
||||
|
||||
MapBlockData block = new MapBlockData();
|
||||
<<<<<<< HEAD
|
||||
block.X = (ushort)regX;
|
||||
block.Y = (ushort)regY;
|
||||
block.Access = (byte)SimAccess.Down;
|
||||
=======
|
||||
block.X = (ushort)(regX);
|
||||
block.Y = (ushort)(regY);
|
||||
block.Access = (byte)SimAccess.Down; // == not there
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||
blocks.Add(block);
|
||||
|
@ -765,13 +747,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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;
|
||||
|
||||
// Let's do DNS resolution only once in this process, please!
|
||||
|
@ -794,11 +769,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
string version;
|
||||
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
||||
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, out version, out reason))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
sp.ControllingClient.SendTeleportFailed(reason);
|
||||
|
||||
|
@ -860,12 +831,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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;
|
||||
|
||||
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
||||
|
@ -880,7 +845,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
||||
|
||||
if (OutSideViewRange)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[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);
|
||||
|
||||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
else
|
||||
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);
|
||||
|
||||
// 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)
|
||||
{
|
||||
|
@ -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
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (NeedsClosing(sp.Scene.DefaultDrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
|
||||
=======
|
||||
if (OutSideViewRange)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||
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.
|
||||
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,
|
||||
// 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.
|
||||
|
@ -1333,11 +1245,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
sp.MakeChildAgent(destinationHandle);
|
||||
|
||||
// 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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||
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
|
||||
// incoming agent. The implication is that, if 'false', we have to create the
|
||||
// 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,
|
||||
int oldsizeX, int oldsizeY, int newsizeX, int newsizeY)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
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,
|
||||
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
/*
|
||||
protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
||||
uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg)
|
||||
|
@ -1499,7 +1400,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||
}
|
||||
*/
|
||||
>>>>>>> avn/ubitvar
|
||||
#endregion
|
||||
|
||||
#region Landmark Teleport
|
||||
|
@ -1580,82 +1480,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
#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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
reason = 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;
|
||||
ulong destinyHandle = destiny.RegionHandle;
|
||||
|
@ -1672,7 +1500,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
|
||||
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);
|
||||
return false;
|
||||
|
@ -1735,7 +1563,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
|
||||
string homeURI = scene.GetAgentHomeURI(agentID);
|
||||
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
|
||||
m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
|
||||
|
@ -1747,7 +1577,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// The destination region just doesn't exist
|
||||
failureReason = "Cannot cross into non-existent region";
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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}",
|
||||
|
@ -1766,8 +1595,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
public bool Cross(ScenePresence agent, bool isFlying)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
agent.IsInTransit = true;
|
||||
CrossAsyncDelegate d = CrossAsync;
|
||||
d.BeginInvoke(agent, isFlying, CrossCompleted, d);
|
||||
|
@ -1793,19 +1620,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
{
|
||||
uint x;
|
||||
uint y;
|
||||
>>>>>>> avn/ubitvar
|
||||
Vector3 newpos;
|
||||
string version;
|
||||
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;
|
||||
|
||||
GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos,
|
||||
|
@ -1815,23 +1633,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (failureReason != String.Empty)
|
||||
agent.ControllingClient.SendAlertMessage(failureReason);
|
||||
return agent;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
// agent.IsInTransit = true;
|
||||
|
||||
<<<<<<< HEAD
|
||||
Scene.EventManager.TriggerCrossAgentToNewRegion(agent, isFlying, neighbourRegion);
|
||||
|
||||
return true;
|
||||
=======
|
||||
CrossAgentToNewRegionAsync(agent, newpos, neighbourRegion, isFlying, version);
|
||||
agent.IsInTransit = false;
|
||||
return agent;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
|
||||
public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY,
|
||||
Vector3 position,
|
||||
Scene initiatingScene);
|
||||
|
@ -1958,10 +1768,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
{
|
||||
AgentData cAgent = new AgentData();
|
||||
agent.CopyTo(cAgent);
|
||||
<<<<<<< HEAD
|
||||
cAgent.Position = pos;
|
||||
|
||||
=======
|
||||
|
||||
// agent.Appearance.WearableCacheItems = null;
|
||||
|
||||
|
@ -1969,7 +1775,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
cAgent.ChildrenCapSeeds = agent.KnownRegions;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
if (isFlying)
|
||||
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
|
||||
|
||||
|
@ -2048,25 +1853,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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
|
||||
if (version == "Unknown" || version == string.Empty)
|
||||
{
|
||||
|
@ -2075,12 +1861,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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!
|
||||
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,
|
||||
// but not sure yet what the side effects would be.
|
||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY);
|
||||
|
||||
|
@ -2177,24 +1956,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
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 = null;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (sp.Scene.CapsModule != null)
|
||||
{
|
||||
|
@ -2278,11 +2042,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
if (m_regionInfo != null)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
neighbours = GetNeighbours(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||
=======
|
||||
neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2531,127 +2291,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
#endregion // NotFoundLocationCache class
|
||||
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
|
||||
|
||||
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)
|
||||
{
|
||||
m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py);
|
||||
>>>>>>> avn/ubitvar
|
||||
GridRegion ret = null;
|
||||
const double fudge = 2.0;
|
||||
|
||||
|
@ -2765,13 +2403,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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)
|
||||
{
|
||||
Scene scene = sp.Scene;
|
||||
|
@ -2779,17 +2410,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath);
|
||||
|
||||
string reason = String.Empty;
|
||||
|
||||
<<<<<<< HEAD
|
||||
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
|
||||
bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, out reason);
|
||||
|
||||
if (regionAccepted)
|
||||
{
|
||||
|
@ -2848,10 +2474,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y);
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
swCorner.X = Scene.RegionInfo.RegionLocX - 1;
|
||||
swCorner.Y = Scene.RegionInfo.RegionLocY - 1;
|
||||
neCorner.X = Scene.RegionInfo.RegionLocX + extent.X;
|
||||
|
@ -2865,11 +2487,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
/// <param name="pRegionLocX"></param>
|
||||
/// <param name="pRegionLocY"></param>
|
||||
/// <returns></returns>
|
||||
<<<<<<< HEAD
|
||||
protected List<GridRegion> GetNeighbours(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
||||
=======
|
||||
protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
Scene pScene = avatar.Scene;
|
||||
RegionInfo m_regionInfo = pScene.RegionInfo;
|
||||
|
@ -2880,22 +2498,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// view to include everything in the megaregion
|
||||
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;
|
||||
|
||||
// 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
|
||||
= avatar.Scene.GridService.GetRegionRange(
|
||||
m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2934,24 +2534,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
(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).
|
||||
neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID );
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
return neighbours;
|
||||
}
|
||||
#endregion
|
||||
|
@ -3036,23 +2621,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (scene == null)
|
||||
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.
|
||||
Vector3 oldGroupPosition = grp.RootPart.GroupPosition;
|
||||
|
||||
|
|
|
@ -434,14 +434,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// 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)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
|
|
|
@ -207,17 +207,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
{
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
string suffix = string.Empty, prefix = string.Empty;
|
||||
string strdata = GenerateLandmark(presence, out prefix, out suffix);
|
||||
|
@ -229,8 +219,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
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, invType, nextOwnerMask, creationDate,transactionID);
|
||||
remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID,
|
||||
name, description, 0, callbackID, asset.FullID, asset.Type, invType, nextOwnerMask, creationDate);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -420,26 +410,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
{
|
||||
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.SetForce(Vector3.Zero);
|
||||
|
@ -480,7 +450,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
|
||||
objectGroup.AbsolutePosition = inventoryStoredPosition;
|
||||
objectGroup.RootPart.RotationOffset = inventoryStoredRotation;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// Make sure all bits but the ones we want are clear
|
||||
// on take.
|
||||
|
@ -626,6 +595,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
IClientAPI remoteClient)
|
||||
{
|
||||
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
|
||||
// are modify. This allows renaming an object that contains no
|
||||
// mod items.
|
||||
|
|
|
@ -336,8 +336,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
|
|||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
@ -433,7 +431,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
|
|||
}
|
||||
}
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
#region IUserManagement
|
||||
|
||||
public UUID GetUserIdByName(string name)
|
||||
|
|
|
@ -358,9 +358,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
||||
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
m_outboundUrlFilter = new OutboundUrlFilter("Script HTTP request module", config);
|
||||
=======
|
||||
int maxThreads = 15;
|
||||
|
||||
IConfig httpConfig = config.Configs["HttpRequestModule"];
|
||||
|
@ -368,7 +367,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
{
|
||||
maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
||||
|
||||
|
@ -532,16 +530,12 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
|
||||
try
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
Request = (HttpWebRequest)WebRequest.Create(Url);
|
||||
Request.AllowAutoRedirect = false;
|
||||
=======
|
||||
Request = (HttpWebRequest) WebRequest.Create(Url);
|
||||
|
||||
//This works around some buggy HTTP Servers like Lighttpd
|
||||
Request.ServicePoint.Expect100Continue = false;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
Request.Method = HttpMethod;
|
||||
Request.ContentType = HttpMIMEType;
|
||||
|
||||
|
@ -646,7 +640,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
{
|
||||
using (Stream responseStream = webRsp.GetResponseStream())
|
||||
{
|
||||
ResponseBody = responseStream.GetStreamString();
|
||||
using (StreamReader reader = new StreamReader(responseStream))
|
||||
ResponseBody = reader.ReadToEnd();
|
||||
}
|
||||
}
|
||||
catch
|
||||
|
@ -676,7 +671,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
resStream.Close();
|
||||
if (response != null)
|
||||
response.Close();
|
||||
<<<<<<< HEAD
|
||||
|
||||
// We need to resubmit
|
||||
if (
|
||||
|
@ -724,8 +718,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
{
|
||||
_finished = true;
|
||||
}
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
if (ResponseBody == null)
|
||||
|
|
|
@ -380,28 +380,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
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)
|
||||
{
|
||||
// Channel 0 goes to viewer ONLY
|
||||
// Channel 0 goes to viewer ONLY
|
||||
m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, target, false, false);
|
||||
return true;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
List<SceneObjectGroup> attachments = sp.GetAttachments();
|
||||
|
||||
|
|
|
@ -53,11 +53,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
/// </remarks>
|
||||
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MapImageServiceModule")]
|
||||
<<<<<<< HEAD
|
||||
|
||||
public class MapImageServiceModule : IMapImageUploadModule, ISharedRegionModule
|
||||
=======
|
||||
public class MapImageServiceModule : ISharedRegionModule, IMapImageUploadModule
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
@ -97,13 +94,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
if (config == null)
|
||||
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"));
|
||||
>>>>>>> avn/ubitvar
|
||||
if (refreshminutes < 0)
|
||||
{
|
||||
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.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}",
|
||||
>>>>>>> avn/ubitvar
|
||||
m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}",
|
||||
refreshminutes, service);
|
||||
}
|
||||
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
|
||||
// v1 service and not generate map tiles twice as was previous behavior
|
||||
//scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); };
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
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 (mapTile.Width == Constants.RegionSize && mapTile.Height == Constants.RegionSize)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
ConvertAndUploadMaptile(mapTile,
|
||||
ConvertAndUploadMaptile(scene, mapTile,
|
||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
||||
scene.RegionInfo.RegionName);
|
||||
=======
|
||||
ConvertAndUploadMaptile(mapTile, scene,
|
||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
|
||||
scene.RegionInfo.RegionName);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -263,17 +234,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
(int)Constants.RegionSize, (int)Constants.RegionSize);
|
||||
using (Bitmap subMapTile = mapTile.Clone(rect, mapTile.PixelFormat))
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
ConvertAndUploadMaptile(subMapTile,
|
||||
ConvertAndUploadMaptile(scene, subMapTile,
|
||||
scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize),
|
||||
scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize),
|
||||
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>
|
||||
public void UploadMapTile(IScene scene)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
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
|
||||
IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>();
|
||||
if (tileGenerator == null)
|
||||
|
@ -300,23 +261,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
|
||||
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
|
||||
// is no static map tile.
|
||||
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;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
using (MemoryStream stream = new MemoryStream())
|
||||
{
|
||||
tileImage.Save(stream, ImageFormat.Jpeg);
|
||||
|
@ -339,11 +282,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
if (jpgData != Utils.EmptyBytes)
|
||||
{
|
||||
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))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_log.DebugFormat("{0} Unable to upload tile image for {1} at {2}-{3}: {4}", LogHeader,
|
||||
regionName, locX, locY, reason);
|
||||
|
@ -351,11 +290,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage
|
|||
}
|
||||
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, scene.RegionInfo.RegionName);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -269,11 +269,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
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, out string version, out string reason)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
reason = "Communications failure";
|
||||
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);
|
||||
=======
|
||||
|
||||
// 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");
|
||||
|
|
|
@ -206,11 +206,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
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, out string version, out string reason)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
reason = "Communications failure";
|
||||
version = "Unknown";
|
||||
|
@ -219,22 +216,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
return false;
|
||||
|
||||
// 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, out version, out reason))
|
||||
return true;
|
||||
>>>>>>> avn/ubitvar
|
||||
return true;
|
||||
|
||||
// else do the remote thing
|
||||
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, out version, out reason);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -162,13 +162,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_rootScene = scene;
|
||||
|
||||
|
@ -177,11 +171,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
m_defaultUser = (UUID)options["default-user"];
|
||||
m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString());
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
else
|
||||
=======
|
||||
else
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
||||
}
|
||||
|
@ -200,10 +190,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
}
|
||||
|
||||
m_errorMessage = String.Empty;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
m_merge = options.ContainsKey("merge");
|
||||
m_forceTerrain = options.ContainsKey("force-terrain");
|
||||
m_forceParcels = options.ContainsKey("force-parcels");
|
||||
|
@ -212,34 +199,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
m_requestId = requestId;
|
||||
m_displacement = options.ContainsKey("displacement") ? (Vector3)options["displacement"] : Vector3.Zero;
|
||||
m_rotation = options.ContainsKey("rotation") ? (float)options["rotation"] : 0f;
|
||||
<<<<<<< HEAD
|
||||
m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"]
|
||||
: 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)
|
||||
m_validUserUuids[UUID.Zero] = false;
|
||||
m_validGroupUuids[UUID.Zero] = false;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>();
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
m_rootScene = scene;
|
||||
m_loadPath = null;
|
||||
|
@ -249,11 +220,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
m_requestId = requestId;
|
||||
|
||||
m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
// Zero can never be a valid user id
|
||||
m_validUserUuids[UUID.Zero] = false;
|
||||
|
||||
|
@ -327,24 +294,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
if ((successfulAssetRestores + failedAssetRestores) % 250 == 0)
|
||||
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 ((!m_merge || m_forceTerrain) && filePath.StartsWith(ArchiveConstants.TERRAINS_PATH))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
LoadTerrain(scene, filePath, data);
|
||||
}
|
||||
else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
|
||||
{
|
||||
LoadRegionSettings(scene, filePath, data, dearchivedScenes);
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
@ -565,10 +523,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
bool isTelehub = (sceneObject.UUID == oldTelehubUUID) && (oldTelehubUUID != UUID.Zero);
|
||||
|
||||
// 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);
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (scene.AddRestoredSceneObject(sceneObject, true, false))
|
||||
{
|
||||
|
@ -649,8 +599,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
// being no copy/no mod for everyone
|
||||
lock (part.TaskInventory)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
// And zap any troublesome sit target information
|
||||
part.SitTargetOrientation = new Quaternion(0, 0, 0, 1);
|
||||
part.SitTargetPosition = new Vector3(0, 0, 0);
|
||||
|
@ -659,7 +607,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
// Not doing so results in inventory items
|
||||
// being no copy/no mod for everyone
|
||||
part.TaskInventory.LockItemsForRead(true);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
TaskInventoryDictionary inv = part.TaskInventory;
|
||||
foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv)
|
||||
{
|
||||
|
@ -680,18 +628,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
if (!ResolveGroupUuid(kvp.Value.GroupID))
|
||||
kvp.Value.GroupID = UUID.Zero;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
part.TaskInventory.LockItemsForRead(false);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
/// <summary>
|
||||
/// Load serialized parcels.
|
||||
/// </summary>
|
||||
|
@ -712,11 +654,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
parcel.AABBMin += parcelDisp;
|
||||
parcel.AABBMax += parcelDisp;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// Validate User and Group UUID's
|
||||
|
||||
if (!ResolveGroupUuid(parcel.GroupID))
|
||||
|
@ -731,26 +669,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
}
|
||||
else
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner;
|
||||
=======
|
||||
parcel.OwnerID = m_defaultUser;
|
||||
parcel.GroupID = UUID.Zero;
|
||||
>>>>>>> avn/ubitvar
|
||||
parcel.IsGroupOwned = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ResolveUserUuid(scene, parcel.OwnerID))
|
||||
<<<<<<< HEAD
|
||||
parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner;
|
||||
=======
|
||||
parcel.OwnerID = m_defaultUser;
|
||||
|
||||
if (!ResolveGroupUuid(parcel.GroupID))
|
||||
parcel.GroupID = UUID.Zero;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
List<LandAccessEntry> accessList = new List<LandAccessEntry>();
|
||||
|
@ -879,10 +809,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
if (data == null)
|
||||
return false;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
||||
|
||||
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)
|
||||
{
|
||||
ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
using (MemoryStream ms = new MemoryStream(data))
|
||||
{
|
||||
if (m_displacement != Vector3.Zero || m_rotation != 0f)
|
||||
|
|
|
@ -111,19 +111,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
String defaultUser = "";
|
||||
float rotation = 0f;
|
||||
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();
|
||||
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("displacement=", delegate(string v)
|
||||
{
|
||||
>>>>>>> avn/ubitvar
|
||||
try
|
||||
{
|
||||
displacement = v == null ? Vector3.Zero : Vector3.Parse(v);
|
||||
|
@ -163,12 +150,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
// Convert to radians for internals
|
||||
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)
|
||||
{
|
||||
>>>>>>> avn/ubitvar
|
||||
try
|
||||
{
|
||||
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>();
|
||||
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)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
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>();
|
||||
DearchiveRegion(loadStream, Guid.Empty, archiveOptions);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options)
|
||||
{
|
||||
new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion();
|
||||
|
|
|
@ -68,6 +68,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
|||
public event ChangeDelegate OnEstateInfoChange;
|
||||
public event MessageDelegate OnEstateMessage;
|
||||
|
||||
private int m_delayCount = 0;
|
||||
|
||||
#region Region Module interface
|
||||
|
||||
public string Name { get { return "EstateManagementModule"; } }
|
||||
|
@ -146,6 +148,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
|||
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;
|
||||
|
@ -198,6 +204,14 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
|||
change(Scene.RegionInfo.RegionID);
|
||||
}
|
||||
|
||||
protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
ChangeDelegate change = OnRegionInfoChange;
|
||||
|
||||
if (change != null)
|
||||
change(Scene.RegionInfo.RegionID);
|
||||
}
|
||||
|
||||
public void TriggerRegionInfoChange()
|
||||
{
|
||||
m_regionChangeTimer.Stop();
|
||||
|
@ -1491,68 +1505,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
|||
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()
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
RegionFlags flags = RegionFlags.None;
|
||||
|
||||
|
|
|
@ -69,11 +69,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
/// <summary>
|
||||
/// Minimum land unit size in region co-ordinates.
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
|
||||
public const int LandUnit = 4;
|
||||
=======
|
||||
public const int landUnit = 4;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
private static readonly string remoteParcelRequestPath = "0009/";
|
||||
|
||||
|
@ -106,17 +103,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
// caches ExtendedLandData
|
||||
private Cache parcelInfoCache;
|
||||
<<<<<<< HEAD
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions.
|
||||
/// </summary>
|
||||
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
|
||||
private bool shouldLimitParcelLayerInfoToViewDistance { get; set; }
|
||||
|
@ -132,7 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
shouldLimitParcelLayerInfoToViewDistance = true;
|
||||
parcelLayerViewDistance = 128;
|
||||
IConfig landManagementConfig = source.Configs["LandManagement"];
|
||||
|
@ -140,24 +131,16 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
shouldLimitParcelLayerInfoToViewDistance = landManagementConfig.GetBoolean("LimitParcelLayerUpdateDistance", shouldLimitParcelLayerInfoToViewDistance);
|
||||
parcelLayerViewDistance = landManagementConfig.GetInt("ParcelLayerViewDistance", parcelLayerViewDistance);
|
||||
=======
|
||||
IConfig cnf = source.Configs["LandManagement"];
|
||||
if (cnf != null)
|
||||
{
|
||||
DefaultGodParcelGroup = new UUID(cnf.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString()));
|
||||
DefaultGodParcelName = cnf.GetString("DefaultAdministratorParcelName", "Default Parcel");
|
||||
>>>>>>> avn/ubitvar
|
||||
DefaultGodParcelGroup = new UUID(landManagementConfig.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString()));
|
||||
DefaultGodParcelName = landManagementConfig.GetString("DefaultAdministratorParcelName", "Default Parcel");
|
||||
}
|
||||
}
|
||||
|
||||
public void AddRegion(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];
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
landChannel = new LandChannel(scene, this);
|
||||
|
||||
parcelInfoCache = new Cache();
|
||||
|
@ -299,11 +282,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
m_landList.Clear();
|
||||
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];
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -313,16 +293,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
/// <returns>The parcel created.</returns>
|
||||
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);
|
||||
|
||||
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0,
|
||||
(int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY));
|
||||
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)
|
||||
{
|
||||
<<<<<<< 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)
|
||||
return;
|
||||
|
||||
ILandObject over = GetLandObjectClipedXY(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (over != null)
|
||||
{
|
||||
|
@ -621,28 +590,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
new_land.LandData.LocalID = newLandLocalID;
|
||||
|
||||
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))
|
||||
{
|
||||
// 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})",
|
||||
<<<<<<< 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));
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
// If other land objects still believe that they occupy any parts of the same space,
|
||||
// then do not allow the add to proceed.
|
||||
for (int x = 0; x < landBitmap.GetLength(0); x++)
|
||||
<<<<<<< HEAD
|
||||
{
|
||||
for (int y = 0; y < landBitmap.GetLength(1); y++)
|
||||
{
|
||||
|
@ -650,40 +608,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
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++)
|
||||
=======
|
||||
>>>>>>> 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];
|
||||
|
@ -712,7 +636,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
|
||||
// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
m_landIDList[x, y] = newLandLocalID;
|
||||
}
|
||||
}
|
||||
|
@ -829,33 +752,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
/// <returns>Land object at the point supplied</returns>
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -875,45 +771,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
avy = 0;
|
||||
else if (avy >= m_scene.RegionInfo.RegionSizeY)
|
||||
avy = (int)Constants.RegionSize - 1;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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
|
||||
{
|
||||
if (m_landList.ContainsKey(m_landIDList[x, y]))
|
||||
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]];
|
||||
return m_landList[m_landIDList[avx / LandUnit, avy / LandUnit]];
|
||||
}
|
||||
catch (IndexOutOfRangeException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Public entry.
|
||||
|
@ -923,38 +792,15 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
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)
|
||||
{
|
||||
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
|
||||
// they happen every time at border crossings
|
||||
if (returnNullIfLandObjectOutsideBounds)
|
||||
return null;
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -968,7 +814,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
return null;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
return m_landList[m_landIDList[x / 4, y / 4]];
|
||||
|
@ -987,19 +832,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
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
|
||||
|
||||
#region Parcel Modification
|
||||
|
@ -1169,19 +1001,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
//Now add the new land object
|
||||
ILandObject result = AddLandObject(newLand);
|
||||
<<<<<<< HEAD
|
||||
|
||||
if (result != null)
|
||||
{
|
||||
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
||||
result.SendLandUpdateToAvatarsOverMe();
|
||||
}
|
||||
=======
|
||||
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
||||
result.SendLandUpdateToAvatarsOverMe();
|
||||
startLandObject.SendLandUpdateToAvatarsOverMe();
|
||||
m_scene.ForEachClient(SendParcelOverlay);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1263,15 +1088,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
#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>
|
||||
/// Send the parcel overlay blocks to the client. We send the overlay packets
|
||||
/// 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="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>
|
||||
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)
|
||||
return;
|
||||
|
@ -1295,149 +1111,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
byte[] byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
||||
int byteArrayCount = 0;
|
||||
int sequenceID = 0;
|
||||
<<<<<<< HEAD
|
||||
|
||||
int xLow = 0;
|
||||
int xHigh = (int)m_scene.RegionInfo.RegionSizeX;
|
||||
int yLow = 0;
|
||||
int yHigh = (int)m_scene.RegionInfo.RegionSizeY;
|
||||
|
||||
if (shouldLimitParcelLayerInfoToViewDistance)
|
||||
// Layer data is in LandUnit (4m) chunks
|
||||
for (int y = 0; y < m_scene.RegionInfo.RegionSizeY; y += LandUnit)
|
||||
{
|
||||
// Compute view distance around the given point
|
||||
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)
|
||||
=======
|
||||
for (int x = 0; x < m_scene.RegionInfo.RegionSizeX; x += LandUnit)
|
||||
{
|
||||
byte tempByte = 0; //This represents the byte for the current 4x4
|
||||
|
||||
// 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)
|
||||
if (currentParcelBlock != null)
|
||||
{
|
||||
<<<<<<< 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
|
||||
|
||||
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
|
||||
if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId)
|
||||
{
|
||||
|
@ -1525,10 +1210,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
if (byteArrayCount > 0)
|
||||
{
|
||||
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,
|
||||
|
@ -1569,10 +1251,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
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);
|
||||
}
|
||||
|
||||
|
@ -1612,7 +1290,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
avatar.currentParcelUUID = parcelID; // force parcel flags review
|
||||
});
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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++)
|
||||
IncomingLandObjectFromStorage(data[i]);
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 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
|
||||
// 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++)
|
||||
=======
|
||||
// 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_landList.Count == 1)
|
||||
{
|
||||
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}",
|
||||
>>>>>>> avn/ubitvar
|
||||
LogHeader, x, y, m_scene.Name);
|
||||
|
||||
int onlyParcelID = 0;
|
||||
|
@ -1872,19 +1531,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
else if (m_landList.Count > 1)
|
||||
{
|
||||
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}",
|
||||
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);
|
||||
=======
|
||||
"{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
|
||||
newLand.SetLandBitmap(CreateBitmapForID(0));
|
||||
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.
|
||||
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",
|
||||
>>>>>>> avn/ubitvar
|
||||
LogHeader, m_scene.Name);
|
||||
}
|
||||
}
|
||||
|
@ -1910,13 +1557,9 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
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);
|
||||
new_land.LandData = data.Copy();
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
new_land.SetLandBitmapFromByteArray();
|
||||
AddLandObject(new_land);
|
||||
// new_land.SendLandUpdateToAvatarsOverMe();
|
||||
|
@ -2568,17 +2211,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
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(
|
||||
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
||||
|
@ -2588,27 +2220,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
"AABBMin",
|
||||
"AABBMax",
|
||||
"Owner");
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
lock (m_landList)
|
||||
{
|
||||
foreach (ILandObject lo in m_landList.Values)
|
||||
{
|
||||
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(
|
||||
"{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n",
|
||||
|
@ -2636,11 +2253,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
else
|
||||
{
|
||||
ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
report.Append(cdt.ToString());
|
||||
}
|
||||
|
||||
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 string LogHeader = "[LAND OBJECT]";
|
||||
<<<<<<< HEAD
|
||||
|
||||
private readonly int landUnit = 4;
|
||||
|
||||
private int m_lastSeqId = 0;
|
||||
|
||||
=======
|
||||
|
||||
private readonly int landUnit = 4;
|
||||
|
||||
private int m_lastSeqId = 0;
|
||||
private int m_expiryCounter = 0;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
protected Scene m_scene;
|
||||
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||
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 TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds
|
||||
|
||||
<<<<<<< HEAD
|
||||
public bool[,] LandBitmap { get; set; }
|
||||
=======
|
||||
private bool[,] m_landBitmap;
|
||||
public bool[,] LandBitmap
|
||||
{
|
||||
get { return m_landBitmap; }
|
||||
set { m_landBitmap = value; }
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -87,9 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
return free;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
public LandData LandData { get; set; }
|
||||
=======
|
||||
protected LandData m_landData;
|
||||
public LandData LandData
|
||||
{
|
||||
|
@ -97,7 +82,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
set { m_landData = value; }
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
public IPrimCounts PrimCounts { get; set; }
|
||||
|
||||
|
@ -225,12 +209,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
else
|
||||
{
|
||||
// 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
|
||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||
* (long)m_scene.RegionInfo.RegionSettings.ObjectBonus
|
||||
|
@ -252,7 +230,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
int parcelMax = (int)((long)LandData.Area
|
||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||
/ 65536L);
|
||||
>>>>>>> avn/ubitvar
|
||||
return parcelMax;
|
||||
}
|
||||
}
|
||||
|
@ -266,15 +243,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
else
|
||||
{
|
||||
//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
|
||||
* (long)m_scene.RegionInfo.ObjectCapacity
|
||||
/ (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);
|
||||
>>>>>>> avn/ubitvar
|
||||
return simMax;
|
||||
}
|
||||
}
|
||||
|
@ -439,12 +411,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
uint preserve = LandData.Flags & ~allowedDelta;
|
||||
newData.Flags = preserve | (args.ParcelFlags & allowedDelta);
|
||||
<<<<<<< HEAD
|
||||
|
||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||
SendLandUpdateToAvatarsOverMe(snap_selection);
|
||||
}
|
||||
=======
|
||||
|
||||
uint curdelta = LandData.Flags ^ newData.Flags;
|
||||
curdelta &= (uint)(ParcelFlags.SoundLocal);
|
||||
|
@ -456,7 +422,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
return true;
|
||||
}
|
||||
return false;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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>
|
||||
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_y = Int32.MaxValue;
|
||||
int max_x = Int32.MinValue;
|
||||
int max_y = Int32.MinValue;
|
||||
>>>>>>> avn/ubitvar
|
||||
int tempArea = 0;
|
||||
int x, y;
|
||||
for (x = 0; x < LandBitmap.GetLength(0); x++)
|
||||
|
@ -825,12 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
{
|
||||
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)
|
||||
min_x = x;
|
||||
if (min_y > y)
|
||||
|
@ -839,7 +792,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
max_x = x;
|
||||
if (max_y < y)
|
||||
max_y = y;
|
||||
>>>>>>> avn/ubitvar
|
||||
tempArea += landUnit * landUnit; //16sqm peice of land
|
||||
}
|
||||
}
|
||||
|
@ -847,27 +799,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
int tx = min_x * landUnit;
|
||||
if (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;
|
||||
if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
|
||||
htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
|
||||
|
@ -904,7 +835,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
LandData.AABBMax
|
||||
= new Vector3(
|
||||
(float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
LandData.Area = tempArea;
|
||||
}
|
||||
|
@ -920,10 +850,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
public void SetLandBitmap(bool[,] bitmap)
|
||||
{
|
||||
LandBitmap = bitmap;
|
||||
<<<<<<< HEAD
|
||||
// m_log.DebugFormat("{0} SetLandBitmap. BitmapSize=<{1},{2}>", LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
ForceUpdateLandInfo();
|
||||
}
|
||||
|
||||
|
@ -1024,16 +950,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
private byte[] ConvertLandBitmapToBytes()
|
||||
{
|
||||
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 i, byteNum = 0;
|
||||
int mask = 1;
|
||||
i = 0;
|
||||
>>>>>>> avn/ubitvar
|
||||
for (int y = 0; y < LandBitmap.GetLength(1); y++)
|
||||
{
|
||||
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));
|
||||
=======
|
||||
*/
|
||||
>>>>>>> avn/ubitvar
|
||||
return tempConvertArr;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,7 +104,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
|||
|
||||
terrainRenderer.Initialise(m_scene, m_config);
|
||||
|
||||
<<<<<<< HEAD
|
||||
mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height,
|
||||
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
|
||||
//long t = System.Environment.TickCount;
|
||||
|
@ -113,17 +112,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
|||
//}
|
||||
//t = System.Environment.TickCount - 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)
|
||||
{
|
||||
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,
|
||||
// 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) {
|
||||
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);
|
||||
else
|
||||
return (float)hm[x, y];
|
||||
|
@ -291,14 +285,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
|||
|
||||
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)
|
||||
{
|
||||
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])
|
||||
{
|
||||
double noise = TerrainUtil.PerlinNoise2D((double) x / map.Width, (double) y / map.Height, 8, 1.0);
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
map[x, y] += noise * strength;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,15 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
#endregion
|
||||
|
||||
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
|
||||
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<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects =
|
||||
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 ITerrainChannel m_channel;
|
||||
|
@ -112,7 +93,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
private Scene m_scene;
|
||||
private volatile bool m_tainted;
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
private String m_InitialTerrain = "pinhead-island";
|
||||
|
||||
// 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 int updateCount; // number of patches that need to be sent
|
||||
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)
|
||||
{
|
||||
updated = new bool[terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize];
|
||||
updateCount = 0;
|
||||
Presence = pPresence;
|
||||
<<<<<<< HEAD
|
||||
Terrain = terrData;
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
// Initially, send all patches to the client
|
||||
SetAll(true);
|
||||
}
|
||||
|
@ -147,26 +120,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
{
|
||||
return (updateCount > 0);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
public void SetByXY(int x, int y, bool state)
|
||||
{
|
||||
this.SetByPatch(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, state);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
public bool GetByPatch(int patchX, int patchY)
|
||||
{
|
||||
return updated[patchX, patchY];
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
public void SetByPatch(int patchX, int patchY, bool state)
|
||||
{
|
||||
bool prevState = updated[patchX, patchY];
|
||||
|
@ -176,24 +140,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
updateCount--;
|
||||
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)
|
||||
{
|
||||
updateCount = 0;
|
||||
for (int xx = 0; xx < updated.GetLength(0); xx++)
|
||||
for (int yy = 0; yy < updated.GetLength(1); yy++)
|
||||
>>>>>>> avn/ubitvar
|
||||
updated[xx, yy] = state;
|
||||
if (state)
|
||||
updateCount = updated.GetLength(0) * updated.GetLength(1);
|
||||
}
|
||||
|
||||
// Logically OR's the terrain data's patch taint map into this client's update map.
|
||||
public void SetAll(TerrainData terrData)
|
||||
{
|
||||
|
@ -206,15 +163,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
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 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.
|
||||
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.RegionSizeZ);
|
||||
m_scene.Heightmap = m_channel;
|
||||
<<<<<<< HEAD
|
||||
UpdateRevertMap();
|
||||
=======
|
||||
|
||||
UpdateBakedMap();
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
else
|
||||
{
|
||||
m_channel = m_scene.Heightmap;
|
||||
<<<<<<< HEAD
|
||||
UpdateRevertMap();
|
||||
=======
|
||||
UpdateBakedMap();
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
m_scene.RegisterModuleInterface<ITerrainModule>(this);
|
||||
|
@ -296,11 +241,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed;
|
||||
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
||||
m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick;
|
||||
<<<<<<< HEAD
|
||||
m_scene.EventManager.OnFrame += EventManager_OnFrame;
|
||||
=======
|
||||
m_scene.EventManager.OnTerrainCheckUpdates += EventManager_TerrainCheckUpdates;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
InstallDefaultEffects();
|
||||
|
@ -339,11 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
// remove the commands
|
||||
m_scene.UnregisterModuleCommander(m_commander.Name);
|
||||
// remove the event-handlers
|
||||
<<<<<<< HEAD
|
||||
m_scene.EventManager.OnFrame -= EventManager_OnFrame;
|
||||
=======
|
||||
|
||||
m_scene.EventManager.OnTerrainCheckUpdates -= EventManager_TerrainCheckUpdates;
|
||||
>>>>>>> avn/ubitvar
|
||||
m_scene.EventManager.OnTerrainTick -= EventManager_OnTerrainTick;
|
||||
m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole;
|
||||
m_scene.EventManager.OnClientClosed -= EventManager_OnClientClosed;
|
||||
|
@ -490,11 +428,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
{
|
||||
ITerrainChannel channel = loader.Value.LoadStream(stream);
|
||||
m_channel.Merge(channel, displacement, radianRotation, rotationDisplacement);
|
||||
<<<<<<< HEAD
|
||||
UpdateRevertMap();
|
||||
=======
|
||||
UpdateBakedMap();
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
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.
|
||||
// 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 ()
|
||||
{
|
||||
lock (m_perClientPatchUpdates)
|
||||
{
|
||||
// Set the flags for all clients so the tainted patches will be sent out
|
||||
foreach (PatchUpdates pups in m_perClientPatchUpdates.Values)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
pups.SetAll(m_scene.Heightmap.GetTerrainData());
|
||||
}
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
}
|
||||
|
||||
// ITerrainModule.PushTerrain()
|
||||
|
@ -615,38 +538,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
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
|
||||
|
||||
private void LoadPlugins()
|
||||
|
@ -750,6 +643,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
||||
|
||||
// Terrain Modifier operations
|
||||
/*
|
||||
m_modifyOperations["min"] = new MinModifier(this);
|
||||
m_modifyOperations["max"] = new MaxModifier(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["smooth"] = new SmoothModifier(this);
|
||||
m_modifyOperations["noise"] = new NoiseModifier(this);
|
||||
|
||||
*/
|
||||
// Filesystem load/save loaders
|
||||
m_loaders[".r32"] = new RAW32();
|
||||
m_loaders[".f32"] = m_loaders[".r32"];
|
||||
|
@ -778,24 +672,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
/// </summary>
|
||||
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_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked);
|
||||
m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -822,13 +701,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
{
|
||||
ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY,
|
||||
fileWidth, fileHeight,
|
||||
<<<<<<< HEAD
|
||||
(int)m_scene.RegionInfo.RegionSizeX,
|
||||
(int)m_scene.RegionInfo.RegionSizeY);
|
||||
=======
|
||||
(int) m_scene.RegionInfo.RegionSizeX,
|
||||
(int) m_scene.RegionInfo.RegionSizeY);
|
||||
>>>>>>> avn/ubitvar
|
||||
m_scene.Heightmap = channel;
|
||||
m_channel = channel;
|
||||
UpdateBakedMap();
|
||||
|
@ -894,27 +768,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
}
|
||||
|
||||
/// <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
|
||||
/// updates for all the presences.
|
||||
/// 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.
|
||||
/// </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()
|
||||
{
|
||||
// this needs fixing
|
||||
|
@ -926,7 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
||||
{
|
||||
if (terrData.IsTaintedAt(x, y,true))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
// Found a patch that was modified. Push this flag into the clients.
|
||||
SendToClients(terrData, x, y);
|
||||
|
@ -944,10 +801,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
m_scene.EventManager.TriggerTerrainTainted();
|
||||
m_tainted = true;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1016,14 +869,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
presence.ControllingClient.OnLandUndo -= client_OnLandUndo;
|
||||
presence.ControllingClient.OnUnackedTerrain -= client_OnUnackedTerrain;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
lock(m_perClientPatchUpdates)
|
||||
m_perClientPatchUpdates.Remove(client);
|
||||
}
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
lock (m_perClientPatchUpdates)
|
||||
m_perClientPatchUpdates.Remove(client);
|
||||
}
|
||||
|
@ -1038,21 +883,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
TerrainData terrData = m_channel.GetTerrainData();
|
||||
|
||||
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 y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize)
|
||||
{
|
||||
if (terrData.IsTaintedAt(x, y, false /* clearOnTest */))
|
||||
{
|
||||
>>>>>>> avn/ubitvar
|
||||
// If we should respect the estate settings then
|
||||
// fixup and height deltas that don't respect them.
|
||||
// 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;
|
||||
|
||||
// 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
|
||||
for (int x = xStart; x < xStart + Constants.TerrainPatchSize; x++)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
for(int y = yStart; y < yStart + Constants.TerrainPatchSize; y++)
|
||||
{
|
||||
float requestedHeight = terrData[x, y];
|
||||
<<<<<<< HEAD
|
||||
float bakedHeight = (float)m_revert[x, y];
|
||||
=======
|
||||
float bakedHeight = (float)m_baked[x, y];
|
||||
>>>>>>> avn/ubitvar
|
||||
float requestedDelta = requestedHeight - bakedHeight;
|
||||
|
||||
if (requestedDelta > maxDelta)
|
||||
|
@ -1111,19 +938,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
|
||||
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>
|
||||
|
@ -1133,175 +947,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
/// <param name="x">The patch corner to send</param>
|
||||
/// <param name="y">The patch corner to send</param>
|
||||
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.
|
||||
lock (m_perClientPatchUpdates)
|
||||
|
@ -1475,7 +1120,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
}
|
||||
}
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
@ -1499,24 +1143,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
int zx = (int)(west + 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;
|
||||
if (startX < 0)
|
||||
startX = 0;
|
||||
|
@ -1542,25 +1168,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
{
|
||||
allowMask[x, y] = true;
|
||||
allowed = true;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
}
|
||||
if (allowed)
|
||||
{
|
||||
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_channel, allowMask, west, south, height, size, seconds,
|
||||
startX, endX, startY, endY);
|
||||
|
||||
//block changes outside estate limits
|
||||
>>>>>>> avn/ubitvar
|
||||
if (!god)
|
||||
EnforceEstateLimits();
|
||||
}
|
||||
|
@ -1577,22 +1195,42 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
bool[,] fillArea = new bool[m_channel.Width, m_channel.Height];
|
||||
fillArea.Initialize();
|
||||
|
||||
int x;
|
||||
for(x = 0; x < m_channel.Width; x++)
|
||||
int startX = (int)west;
|
||||
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 = 0; y < m_channel.Height; y++)
|
||||
for (y = startY; y <= endY; y++)
|
||||
{
|
||||
if (x < east && x > west)
|
||||
if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0)))
|
||||
{
|
||||
if (y < north && y > south)
|
||||
{
|
||||
if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0)))
|
||||
{
|
||||
fillArea[x, y] = true;
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
fillArea[x, y] = true;
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1600,15 +1238,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
if (allowed)
|
||||
{
|
||||
StoreUndoState();
|
||||
<<<<<<< HEAD
|
||||
m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size);
|
||||
|
||||
//revert changes outside estate limits
|
||||
=======
|
||||
m_floodeffects[(StandardTerrainEffects) action].FloodEffect(m_channel, fillArea, size);
|
||||
m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size,
|
||||
startX, endX, startY, endY);
|
||||
|
||||
//block changes outside estate limits
|
||||
>>>>>>> avn/ubitvar
|
||||
if (!god)
|
||||
EnforceEstateLimits();
|
||||
}
|
||||
|
@ -1641,52 +1274,22 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
|
||||
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
|
||||
|
||||
private void InterfaceLoadFile(Object[] args)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
LoadFromFile((string)args[0]);
|
||||
=======
|
||||
LoadFromFile((string) args[0]);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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],
|
||||
(int) args[1],
|
||||
(int) args[2],
|
||||
(int) args[3],
|
||||
(int) args[4]);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void InterfaceSaveFile(Object[] args)
|
||||
|
@ -1711,15 +1314,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
private void InterfaceRevertTerrain(Object[] args)
|
||||
{
|
||||
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 (y = 0; y < m_channel.Height; 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"))
|
||||
{
|
||||
<<<<<<< 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 y = 0; y < m_channel.Height / 2; y++)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
double height = m_channel[x, 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"))
|
||||
{
|
||||
<<<<<<< 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 x = 0; x < m_channel.Width / 2; x++)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
double height = m_channel[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];
|
||||
|
||||
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 (y = 0; y < m_channel.Height; y++)
|
||||
m_channel[x, y] += val;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void InterfaceMultiplyTerrain(Object[] args)
|
||||
{
|
||||
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];
|
||||
|
||||
for (x = 0; x < m_channel.Width; x++)
|
||||
for (y = 0; y < m_channel.Height; y++)
|
||||
m_channel[x, y] *= val;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void InterfaceLowerTerrain(Object[] args)
|
||||
{
|
||||
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];
|
||||
|
||||
for (x = 0; x < m_channel.Width; x++)
|
||||
for (y = 0; y < m_channel.Height; y++)
|
||||
m_channel[x, y] -= val;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
public void InterfaceFillTerrain(Object[] args)
|
||||
|
@ -1885,26 +1452,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
int x, y;
|
||||
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 (y = 0; y < m_channel.Height; y++)
|
||||
m_channel[x, y] = val;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void InterfaceMinTerrain(Object[] args)
|
||||
{
|
||||
int x, y;
|
||||
<<<<<<< HEAD
|
||||
for(x = 0; x < m_channel.Width; x++)
|
||||
=======
|
||||
double val = (double)args[0];
|
||||
for (x = 0; x < m_channel.Width; x++)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
for(y = 0; y < m_channel.Height; y++)
|
||||
{
|
||||
|
@ -1916,19 +1473,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
private void InterfaceMaxTerrain(Object[] args)
|
||||
{
|
||||
int x, y;
|
||||
<<<<<<< HEAD
|
||||
for(x = 0; x < m_channel.Width; x++)
|
||||
=======
|
||||
double val = (double)args[0];
|
||||
for (x = 0; x < m_channel.Width; x++)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
for(y = 0; y < m_channel.Height; y++)
|
||||
{
|
||||
m_channel[x, y] = Math.Min(val, m_channel[x, y]);
|
||||
}
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
|
||||
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];
|
||||
|
||||
Console.WriteLine("Terrain height at {0} is {1}", point, height);
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
private void InterfaceShowDebugStats(Object[] args)
|
||||
|
@ -2157,6 +1707,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
|
||||
public void ModifyCommand(string module, string[] cmd)
|
||||
{
|
||||
/*
|
||||
string result;
|
||||
Scene scene = SceneManager.Instance.CurrentScene;
|
||||
if ((scene != null) && (scene != m_scene))
|
||||
|
@ -2196,6 +1747,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
|||
{
|
||||
MainConsole.Instance.Output(result);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -60,12 +60,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests
|
|||
TerrainChannel map = new TerrainChannel((int)Constants.RegionSize, (int)Constants.RegionSize);
|
||||
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,
|
||||
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[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).");
|
||||
|
@ -84,12 +80,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests
|
|||
}
|
||||
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,
|
||||
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 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).");
|
||||
|
|
|
@ -79,13 +79,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
/// <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.
|
||||
/// </remarks>
|
||||
<<<<<<< HEAD
|
||||
|
||||
public static Bitmap Splat(ITerrainChannel terrain,
|
||||
UUID[] textureIDs, float[] startHeights, float[] heightRanges,
|
||||
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(startHeights.Length == 4);
|
||||
|
@ -133,8 +130,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
asset = assetService.Get(textureIDs[i].ToString());
|
||||
if (asset != null)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID);
|
||||
// m_log.DebugFormat(
|
||||
// "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID);
|
||||
|
||||
try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); }
|
||||
catch (Exception ex)
|
||||
|
@ -144,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
}
|
||||
|
||||
if (detailTexture[i] != null)
|
||||
{
|
||||
{
|
||||
// Make sure this texture is the correct size, otherwise resize
|
||||
if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256)
|
||||
{
|
||||
|
@ -199,74 +196,12 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
using (SolidBrush brush = new SolidBrush(DEFAULT_TERRAIN_COLOR[i]))
|
||||
gfx.FillRectangle(brush, 0, 0, 256, 256);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256)
|
||||
{
|
||||
detailTexture[i] = ResizeBitmap(detailTexture[i], 256, 256);
|
||||
}
|
||||
}
|
||||
}
|
||||
<<<<<<< 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -286,7 +221,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
{
|
||||
for (int x = 0; x < 256; x++)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
float height = (float)terrain[x * xFactor, y * yFactor];
|
||||
|
||||
float pctX = (float)x / 255f;
|
||||
|
@ -328,58 +262,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
if (Single.IsNaN(layer))
|
||||
layer = 0f;
|
||||
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();
|
||||
return result;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
public static Bitmap SplatSimple(float[] heightmap)
|
||||
{
|
||||
const float BASE_HSV_H = 93f / 360f;
|
||||
|
|
|
@ -156,13 +156,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
|
||||
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
|
||||
if ((DateTime.Now - lastImageTime).TotalSeconds < 3600)
|
||||
{
|
||||
|
@ -179,16 +172,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
Vector3 camPos = new Vector3(
|
||||
m_scene.RegionInfo.RegionSizeX / 2 - 0.5f,
|
||||
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f,
|
||||
>>>>>>> avn/ubitvar
|
||||
221.7025033688163f);
|
||||
// Viewport viewing down onto the region
|
||||
Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f,
|
||||
(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);
|
||||
|
||||
Bitmap tile = CreateMapTile(viewport, false);
|
||||
|
@ -199,7 +186,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
lastImageTime = DateTime.Now;
|
||||
return (Bitmap)lastImage.Clone();
|
||||
*/
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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,
|
||||
waterHeight,
|
||||
m_scene.RegionInfo.RegionSizeY / 2 - 0.5f);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR));
|
||||
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]);
|
||||
obj.addVertex(new warp_Vertex(pos,
|
||||
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));
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -424,12 +400,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
warp_Texture texture;
|
||||
using (
|
||||
Bitmap image
|
||||
<<<<<<< HEAD
|
||||
= TerrainSplat.Splat(terrain, textureIDs, startHeights, heightRanges,
|
||||
=======
|
||||
= TerrainSplat.Splat(
|
||||
terrain, textureIDs, startHeights, heightRanges,
|
||||
>>>>>>> avn/ubitvar
|
||||
new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain))
|
||||
{
|
||||
texture = new warp_Texture(image);
|
||||
|
@ -711,12 +683,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||
if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4))
|
||||
=======
|
||||
Util.FireAndForget(x =>
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||
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
|
||||
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
|
||||
// because the UI is very confusing
|
||||
// while we don't fix the hard-coded urls
|
||||
|
@ -311,7 +238,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
||||
}
|
||||
});
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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 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 Queue<MapRequestState> requests = new Queue<MapRequestState>();
|
||||
|
||||
|
@ -82,7 +76,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
|
||||
private IMapImageGenerator m_mapImageGenerator;
|
||||
private IMapImageUploadModule m_mapImageServiceModule;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
protected Scene m_scene;
|
||||
private List<MapBlockData> cachedMapBlocks = new List<MapBlockData>();
|
||||
|
@ -154,14 +147,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
if (!m_Enabled)
|
||||
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_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
|
||||
// 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)
|
||||
//{
|
||||
// ScenePresence avatarPresence = null;
|
||||
|
@ -373,7 +308,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
// }
|
||||
// }
|
||||
//}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
|
||||
mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse());
|
||||
|
@ -459,7 +393,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
ThreadPriority.BelowNormal,
|
||||
true,
|
||||
true);
|
||||
Watchdog.StartThread(
|
||||
WorkManager.StartThread(
|
||||
MapBlockSendThread,
|
||||
string.Format("MapBlockSendThread ({0})", m_scene.RegionInfo.RegionName),
|
||||
ThreadPriority.BelowNormal,
|
||||
|
@ -516,12 +450,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
uint xstart = 0;
|
||||
uint ystart = 0;
|
||||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
if (itemtype == (int)GridItemType.AgentLocations) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots)
|
||||
{
|
||||
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
|
||||
{
|
||||
|
@ -531,22 +461,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
mapItemReply mapitem = new mapItemReply();
|
||||
if (m_scene.GetRootAgentCount() <= 1)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
mapitem = new mapItemReply(
|
||||
xstart + 1,
|
||||
ystart + 1,
|
||||
UUID.Zero,
|
||||
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
||||
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);
|
||||
}
|
||||
else
|
||||
|
@ -556,22 +476,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
// Don't send a green dot for yourself
|
||||
if (sp.UUID != remoteClient.AgentId)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
mapitem = new mapItemReply(
|
||||
xstart + (uint)sp.AbsolutePosition.X,
|
||||
ystart + (uint)sp.AbsolutePosition.Y,
|
||||
UUID.Zero,
|
||||
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
@ -615,8 +525,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
Vector3 max = parcel.AABBMax;
|
||||
float x = (min.X+max.X)/2;
|
||||
float y = (min.Y+max.Y)/2;
|
||||
|
||||
<<<<<<< HEAD
|
||||
mapitem = new mapItemReply(
|
||||
xstart + (uint)x,
|
||||
ystart + (uint)y,
|
||||
|
@ -625,16 +533,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
parcel.Area,
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -659,7 +557,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject);
|
||||
if (sog != null)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
mapitem = new mapItemReply(
|
||||
xstart + (uint)sog.AbsolutePosition.X,
|
||||
ystart + (uint)sog.AbsolutePosition.Y,
|
||||
|
@ -668,15 +565,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
0, // color (not used)
|
||||
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);
|
||||
|
||||
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
|
||||
|
@ -763,126 +651,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
{
|
||||
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();
|
||||
requests.Enqueue(state);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1228,11 +999,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
/// <param name="maxY"></param>
|
||||
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);
|
||||
/* 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
|
||||
{
|
||||
List<MapBlockData> response = new List<MapBlockData>();
|
||||
|
@ -1241,34 +1009,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
// on an unloaded square.
|
||||
// But make sure: Look whether the one we requested is in there
|
||||
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)maxX),
|
||||
(int)Util.RegionToWorldLoc((uint)minY),
|
||||
(int)Util.RegionToWorldLoc((uint)maxY) );
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
if (regions != null)
|
||||
{
|
||||
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) &&
|
||||
r.RegionLocY == Util.RegionToWorldLoc((uint)minY))
|
||||
{
|
||||
|
@ -1281,7 +1030,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
MapBlockFromGridRegion(block, r, flag);
|
||||
response.Add(block);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1373,19 +1121,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
List<MapBlockData> allBlocks = new List<MapBlockData>();
|
||||
List<MapBlockData> mapBlocks = new List<MapBlockData>();
|
||||
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,
|
||||
maxX * (int)Constants.RegionSize,
|
||||
minY * (int)Constants.RegionSize,
|
||||
|
@ -1407,7 +1142,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
mapBlocks.Add(block);
|
||||
remoteClient.SendMapBlock(mapBlocks, flag & 0xffff);
|
||||
return allBlocks;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
foreach (GridRegion r in regions)
|
||||
|
@ -1438,15 +1172,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
MapBlockData block = new MapBlockData();
|
||||
|
||||
block.Access = r.Access;
|
||||
switch (flag & 0xffff)
|
||||
{
|
||||
|
@ -1461,14 +1188,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
break;
|
||||
}
|
||||
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.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
|
||||
block.SizeX = (ushort)r.RegionSizeX;
|
||||
|
@ -1508,45 +1227,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
blocks.Add(block);
|
||||
}
|
||||
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)
|
||||
{
|
||||
Hashtable reply = new Hashtable();
|
||||
|
@ -1681,7 +1363,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
|
||||
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());
|
||||
|
||||
if (texAsset != null)
|
||||
|
@ -1752,13 +1435,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
uint xstart = 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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
// Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots)
|
||||
|
||||
|
@ -1878,7 +1555,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
return;
|
||||
|
||||
m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name);
|
||||
<<<<<<< HEAD
|
||||
|
||||
using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile())
|
||||
{
|
||||
|
@ -1894,23 +1570,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
{
|
||||
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
|
||||
{
|
||||
data = OpenJPEG.EncodeFromImage(mapbmp, true);
|
||||
|
@ -2027,11 +1686,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
int regionSizeX = (int)m_scene.RegionInfo.RegionSizeX;
|
||||
int regionSizeY = (int)m_scene.RegionInfo.RegionSizeY;
|
||||
|
||||
<<<<<<< HEAD
|
||||
int landTileSize = LandManagementModule.LandUnit;
|
||||
=======
|
||||
int landTileSize = LandManagementModule.landUnit;
|
||||
>>>>>>> avn/ubitvar
|
||||
int regionLandTilesX = regionSizeX / landTileSize;
|
||||
int regionLandTilesY = regionSizeY / landTileSize;
|
||||
|
||||
|
@ -2054,10 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
{
|
||||
using (SolidBrush transparent = new SolidBrush(background))
|
||||
g.FillRectangle(transparent, 0, 0, regionSizeX, regionSizeY);
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
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)))
|
||||
{
|
||||
<<<<<<< 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 y = 0; y < regionLandTilesY ; y++)
|
||||
|
@ -2101,7 +1741,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
x * landTileSize,
|
||||
regionSizeX - landTileSize - (y * landTileSize),
|
||||
landTileSize,
|
||||
>>>>>>> avn/ubitvar
|
||||
landTileSize);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -402,7 +402,6 @@ namespace OpenSim.Region.DataSnapshot
|
|||
string url = services[i].Trim();
|
||||
using (RestClient cli = new RestClient(url))
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
cli.AddQueryParameter("service", serviceName);
|
||||
cli.AddQueryParameter("host", m_hostname);
|
||||
cli.AddQueryParameter("port", m_listener_port);
|
||||
|
@ -436,30 +435,7 @@ namespace OpenSim.Region.DataSnapshot
|
|||
// string responseStr = Util.UTF8.GetString(response);
|
||||
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
|
||||
|
||||
|
|
|
@ -35,7 +35,9 @@ namespace OpenSim.Services.Interfaces
|
|||
public interface IBakedTextureModule
|
||||
{
|
||||
WearableCacheItem[] Get(UUID id);
|
||||
|
||||
void Store(UUID id);
|
||||
void Store(UUID id, WearableCacheItem[] WearableCache);
|
||||
void UpdateMeshAvatar(UUID id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,15 +93,9 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
|
||||
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 GetObjectDestination(SceneObjectGroup grp, Vector3 targetPosition, out Vector3 newpos);
|
||||
bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason);
|
||||
>>>>>>> avn/ubitvar
|
||||
void Cross(SceneObjectGroup sog, Vector3 position, bool silent);
|
||||
bool CrossPrimGroupIntoNewRegion(GridRegion destination, Vector3 newPosition, SceneObjectGroup grp, bool silent);
|
||||
|
||||
|
|
|
@ -58,8 +58,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
public interface IHttpRequestModule
|
||||
{
|
||||
UUID MakeHttpRequest(string url, string parameters, string body);
|
||||
<<<<<<< HEAD
|
||||
|
||||
/// <summary>
|
||||
/// Starts the http request.
|
||||
/// </summary>
|
||||
|
@ -86,12 +84,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// Stop and remove all http requests for the given script.
|
||||
/// </summary>
|
||||
/// <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);
|
||||
>>>>>>> avn/ubitvar
|
||||
IServiceRequest GetNextCompletedRequest();
|
||||
void RemoveCompletedRequest(UUID id);
|
||||
}
|
||||
|
|
|
@ -25,24 +25,14 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
<<<<<<< HEAD
|
||||
using System.Drawing;
|
||||
using OpenSim.Framework;
|
||||
=======
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using System.Drawing;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
public interface IMapImageUploadModule
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
void UploadMapTile(IScene scene, Bitmap mapTile);
|
||||
}
|
||||
}
|
||||
=======
|
||||
/// <summary>
|
||||
/// Upload a new maptile
|
||||
/// </summary>
|
||||
|
@ -50,4 +40,3 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
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="options">
|
||||
/// Dictionary of options.
|
||||
<<<<<<< HEAD
|
||||
/// </param>
|
||||
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;
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
using System.IO;
|
||||
using OpenSim.Framework;
|
||||
>>>>>>> avn/ubitvar
|
||||
using OpenMetaverse;
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
|
@ -55,12 +52,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// </summary>
|
||||
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>
|
||||
/// Load a terrain from a stream.
|
||||
/// </summary>
|
||||
|
@ -69,7 +60,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// </param>
|
||||
/// <param name="stream"></param>
|
||||
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, Vector3 displacement,
|
||||
float radianRotation, Vector2 rotationDisplacement, Stream stream);
|
||||
|
|
|
@ -37,10 +37,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// </summary>
|
||||
void GenerateMaptile();
|
||||
List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag);
|
||||
<<<<<<< HEAD
|
||||
MapBlockData MapBlockFromGridRegion(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_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)
|
||||
{
|
||||
Vector3 grppos = grp.AbsolutePosition;
|
||||
|
@ -390,7 +371,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
k.Position += offset;
|
||||
m_frames[i] = k;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
if (m_running)
|
||||
|
@ -708,29 +688,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
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)
|
||||
{
|
||||
GetNextList();
|
||||
|
@ -738,17 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_frames.Count == 0)
|
||||
{
|
||||
Done();
|
||||
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]);
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
m_group.Scene.EventManager.TriggerMovingEndEvent(m_group.RootPart.LocalId);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -792,21 +739,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal;
|
||||
bool lastStep = m_currentFrame.TimeMS <= tickDuration;
|
||||
|
||||
Vector3 positionThisStep = m_currentFrame.StartPosition + (m_currentFrame.Position.Value - m_currentFrame.StartPosition) * completed;
|
||||
Vector3 motionThisStep = positionThisStep - m_group.AbsolutePosition;
|
||||
Vector3 v = (Vector3)m_currentFrame.Position - 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;
|
||||
|
||||
if (Vector3.Mag(motionThisFrame) >= 0.05f)
|
||||
>>>>>>> avn/ubitvar
|
||||
update = true;
|
||||
|
||||
//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);
|
||||
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
|
||||
* float angle = 0;
|
||||
|
||||
|
@ -893,9 +793,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|| Math.Abs(step.Y - current.Y) > 0.001f
|
||||
|| Math.Abs(step.Z - current.Z) > 0.001f)
|
||||
// assuming w is a dependente var
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
// m_group.UpdateGroupRotationR(step);
|
||||
// m_group.UpdateGroupRotationR(step);
|
||||
m_group.RootPart.RotationOffset = step;
|
||||
|
||||
//m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2);
|
||||
|
@ -922,22 +821,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
SceneObjectGroup tmp = m_group;
|
||||
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())
|
||||
{
|
||||
BinaryFormatter fmt = new BinaryFormatter();
|
||||
if (!m_selected && tmp != null)
|
||||
m_serializedPosition = tmp.AbsolutePosition;
|
||||
fmt.Serialize(ms, this);
|
||||
m_group = tmp;
|
||||
if (m_running && !m_waitingCrossing)
|
||||
if (!timerWasStopped && m_running && !m_waitingCrossing)
|
||||
StartTimer();
|
||||
|
||||
return ms.ToArray();
|
||||
|
|
|
@ -487,7 +487,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
|
||||
|
||||
XmlTextReader reader;
|
||||
XmlReader reader;
|
||||
|
||||
private int XRint()
|
||||
{
|
||||
|
@ -524,7 +524,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public static bool EReadProcessors(
|
||||
Dictionary<string, Action> processors,
|
||||
XmlTextReader xtr)
|
||||
XmlReader xtr)
|
||||
{
|
||||
bool errors = false;
|
||||
|
||||
|
@ -564,14 +564,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public string ToXml2()
|
||||
{
|
||||
MemoryStream ms = new MemoryStream(512);
|
||||
UTF8Encoding enc = new UTF8Encoding();
|
||||
XmlTextWriter xwriter = new XmlTextWriter(ms, enc);
|
||||
ToXml2(xwriter);
|
||||
xwriter.Flush();
|
||||
string s = ms.GetStreamString();
|
||||
xwriter.Close();
|
||||
return s;
|
||||
using (StringWriter sw = new StringWriter())
|
||||
{
|
||||
using (XmlTextWriter xwriter = new XmlTextWriter(sw))
|
||||
{
|
||||
ToXml2(xwriter);
|
||||
}
|
||||
|
||||
return sw.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public static SOPVehicle FromXml2(string text)
|
||||
|
@ -598,7 +599,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return v;
|
||||
}
|
||||
|
||||
public static SOPVehicle FromXml2(XmlTextReader reader)
|
||||
public static SOPVehicle FromXml2(XmlReader reader)
|
||||
{
|
||||
SOPVehicle vehicle = new SOPVehicle();
|
||||
|
||||
|
@ -611,7 +612,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return vehicle;
|
||||
}
|
||||
|
||||
private void FromXml2(XmlTextReader _reader, out bool errors)
|
||||
private void FromXml2(XmlReader _reader, out bool errors)
|
||||
{
|
||||
errors = false;
|
||||
reader = _reader;
|
||||
|
|
|
@ -881,14 +881,22 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (newName == String.Empty)
|
||||
newName = item.Name;
|
||||
=======
|
||||
if (newName == null) newName = item.Name;
|
||||
|
||||
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
|
||||
|| (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>
|
||||
/// Create a new asset data structure.
|
||||
|
@ -982,31 +997,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public void CreateNewInventoryItem(
|
||||
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
||||
string name, string description, uint flags, uint callbackID,
|
||||
<<<<<<< HEAD
|
||||
UUID assetID, sbyte assetType, sbyte invType, uint nextOwnerMask, int creationDate)
|
||||
{
|
||||
CreateNewInventoryItem(
|
||||
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,
|
||||
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>
|
||||
|
@ -1030,14 +1026,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="creationDate">Unix timestamp at which this item was created.</param>
|
||||
private void CreateNewInventoryItem(
|
||||
IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID,
|
||||
<<<<<<< HEAD
|
||||
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,
|
||||
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();
|
||||
item.Owner = remoteClient.AgentId;
|
||||
|
@ -1058,17 +1049,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
item.BasePermissions = baseMask;
|
||||
item.CreationDate = creationDate;
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (AddInventoryItem(item, assetUpload))
|
||||
=======
|
||||
// special AnimationSet case
|
||||
if (item.InvType == (int)CustomInventoryType.AnimationSet)
|
||||
AnimationSet.enforceItemPermitions(item,true);
|
||||
|
||||
if (AddInventoryItem(item))
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
remoteClient.SendInventoryItemCreateUpdate(item, transationID, callbackID);
|
||||
remoteClient.SendInventoryItemCreateUpdate(item, callbackID);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1284,7 +1271,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||
if (taskItem.InvType == (int)InventoryType.Object)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
// Bake the new base permissions from folded permissions
|
||||
// The folded perms are in the lowest 3 bits of the current perms
|
||||
// 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;
|
||||
// Newly given items cannot be "locked" on rez. Make sure by
|
||||
// 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;
|
||||
|
@ -1577,12 +1556,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
|
||||
ScenePresence avatar;
|
||||
IClientAPI remoteClient = null;
|
||||
if (TryGetScenePresence(destID, out avatar))
|
||||
remoteClient = avatar.ControllingClient;
|
||||
=======
|
||||
// ????
|
||||
SceneObjectPart destPart = GetSceneObjectPart(destID);
|
||||
if (destPart != null) // Move into a prim
|
||||
{
|
||||
|
@ -1590,7 +1569,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
MoveTaskInventoryItem(destID, host, itemID);
|
||||
return destID; // Prim folder ID == prim ID
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
// /????
|
||||
|
||||
InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID);
|
||||
|
||||
|
@ -2156,14 +2135,16 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
List<uint> deleteIDs = new List<uint>();
|
||||
List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>();
|
||||
List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>();
|
||||
|
||||
// Start with true for both, then remove the flags if objects
|
||||
// that we can't derez are part of the selection
|
||||
bool permissionToTake = true;
|
||||
bool permissionToTakeCopy = true;
|
||||
bool permissionToDelete = true;
|
||||
|
||||
foreach (uint localID in localIDs)
|
||||
{
|
||||
// Start with true for both, then remove the flags if objects
|
||||
// that we can't derez are part of the selection
|
||||
bool permissionToTake = true;
|
||||
bool permissionToTakeCopy = true;
|
||||
bool permissionToDelete = true;
|
||||
|
||||
|
||||
// Invalid id
|
||||
SceneObjectPart part = GetSceneObjectPart(localID);
|
||||
|
@ -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)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
foreach (SceneObjectGroup g in deleteGroups)
|
||||
deleteIDs.Remove(g.LocalId);
|
||||
|
||||
m_asyncSceneObjectDeleter.DeleteToInventory(
|
||||
action, destinationID, deleteGroups, remoteClient,
|
||||
<<<<<<< HEAD
|
||||
permissionToDelete && canDelete);
|
||||
}
|
||||
else if (permissionToDelete && canDelete)
|
||||
=======
|
||||
true);
|
||||
}
|
||||
if (takeGroups.Count > 0)
|
||||
|
@ -2317,7 +2286,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
false);
|
||||
}
|
||||
if (deleteIDs.Count > 0)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
foreach (SceneObjectGroup g in deleteGroups)
|
||||
DeleteSceneObject(g, true);
|
||||
|
@ -2361,7 +2329,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
item.AssetType = asset.Type;
|
||||
item.InvType = (int)InventoryType.Object;
|
||||
|
||||
InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.Object);
|
||||
InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, FolderType.Object);
|
||||
if (folder != null)
|
||||
item.Folder = folder.ID;
|
||||
else // oopsies
|
||||
|
@ -2435,34 +2403,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData));
|
||||
|
||||
<<<<<<< HEAD
|
||||
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))
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
|
||||
{
|
||||
reader.Read();
|
||||
|
@ -2481,7 +2425,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Util.LogFailedXML("[AGENT INVENTORY]:", xmlData);
|
||||
g = null;
|
||||
}
|
||||
|
||||
|
||||
if (g != null)
|
||||
{
|
||||
objlist.Add(g);
|
||||
|
@ -2492,7 +2436,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
XmlDocument doc = new XmlDocument();
|
||||
doc.LoadXml(xmlData);
|
||||
XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject");
|
||||
|
@ -2526,28 +2470,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
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)
|
||||
|
|
|
@ -551,7 +551,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
try
|
||||
{
|
||||
SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems);
|
||||
|
@ -562,10 +561,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
string.Format(
|
||||
"[AGENT INVENTORY]: Error in SendInventoryAsync() for {0} with folder ID {1}. Exception ", e));
|
||||
}
|
||||
=======
|
||||
Thread.Sleep(20);
|
||||
SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
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/
|
||||
* 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.
|
||||
/// </param>
|
||||
/// <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
|
||||
|
||||
|
@ -635,603 +634,3 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
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;
|
||||
}
|
||||
*/
|
||||
parentGroup.AdjustChildPrimPermissions();
|
||||
parentGroup.AdjustChildPrimPermissions(false);
|
||||
parentGroup.HasGroupChanged = true;
|
||||
parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true);
|
||||
parentGroup.ScheduleGroupForFullUpdate();
|
||||
|
@ -2066,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// return unless the root is deleted. This will remove them
|
||||
// from the database. They will be rewritten immediately,
|
||||
// minus the rows for the unlinked child prims.
|
||||
g.AdjustChildPrimPermissions();
|
||||
g.AdjustChildPrimPermissions(false);
|
||||
m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID);
|
||||
g.TriggerScriptChangedEvent(Changed.LINK);
|
||||
g.HasGroupChanged = true; // Persist
|
||||
|
@ -2154,13 +2154,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_parentScene.Permissions.CanDuplicateObject(
|
||||
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);
|
||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (original.OwnerID != AgentID)
|
||||
{
|
||||
|
@ -2197,63 +2192,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
// 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
|
||||
// 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;
|
||||
|
||||
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;
|
||||
|
||||
|
|
|
@ -266,15 +266,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
for (int i = 0; i < parts.Length; 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)
|
||||
ownerMask &= part.BaseMask;
|
||||
else
|
||||
ownerMask &= part.OwnerMask;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
perms &= part.Inventory.MaskEffectivePermissions();
|
||||
}
|
||||
|
||||
|
|
|
@ -122,17 +122,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// since the group's last persistent backup
|
||||
/// </summary>
|
||||
private bool m_hasGroupChanged = false;
|
||||
<<<<<<< HEAD
|
||||
private long timeFirstChanged;
|
||||
private long timeLastChanged;
|
||||
=======
|
||||
private long timeFirstChanged = 0;
|
||||
private long timeLastChanged = 0;
|
||||
private long m_maxPersistTime = 0;
|
||||
private long m_minPersistTime = 0;
|
||||
// private Random m_rand;
|
||||
private List<ScenePresence> m_linkedAvatars = new List<ScenePresence>();
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// is deleted, because we delete groups by searching for prims by their SceneGroupID.
|
||||
/// </summary>
|
||||
<<<<<<< HEAD
|
||||
public bool GroupContainsForeignPrims
|
||||
{
|
||||
private set
|
||||
|
@ -218,9 +212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
get { return m_groupContainsForeignPrims; }
|
||||
}
|
||||
|
||||
=======
|
||||
public bool HasGroupChangedDueToDelink { get; set; }
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
private bool isTimeToPersist()
|
||||
{
|
||||
|
@ -350,7 +342,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
get { return RootPart.VolumeDetectActive; }
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
private Vector3 lastPhysGroupPos;
|
||||
private Quaternion lastPhysGroupRot;
|
||||
|
||||
|
@ -358,9 +349,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Is this entity set to be saved in persistent storage?
|
||||
/// </summary>
|
||||
public bool Backup { get; private set; }
|
||||
=======
|
||||
|
||||
private bool m_isBackedUp;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
public bool IsBackedUp
|
||||
{
|
||||
|
@ -570,146 +560,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
&& !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)
|
||||
{
|
||||
inTransit = true;
|
||||
SOGCrossDelegate d = CrossAsync;
|
||||
d.BeginInvoke(this, val, CrossAsyncCompleted, d);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -1200,7 +1055,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// 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.
|
||||
/// </remarks>
|
||||
protected internal List<ScenePresence> m_sittingAvatars = new List<ScenePresence>();
|
||||
protected internal List<UUID> m_sittingAvatars = new List<UUID>();
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -1311,14 +1166,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </summary>
|
||||
public virtual void AttachToBackup()
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (CanBeBackedUp)
|
||||
=======
|
||||
if (IsAttachment) return;
|
||||
m_scene.SceneGraph.FireAttachToBackup(this);
|
||||
|
||||
if (InSceneBackup)
|
||||
>>>>>>> avn/ubitvar
|
||||
// if (InSceneBackup)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID);
|
||||
|
@ -1431,21 +1282,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <returns></returns>
|
||||
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;
|
||||
maxY = float.MinValue;
|
||||
maxZ = float.MinValue;
|
||||
minX = float.MaxValue;
|
||||
minY = float.MaxValue;
|
||||
minZ = float.MaxValue;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
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>
|
||||
/// Add the avatar to this linkset (avatar is sat).
|
||||
/// </summary>
|
||||
|
@ -1893,7 +1724,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public List<ScenePresence> GetLinkedAvatars()
|
||||
{
|
||||
return m_linkedAvatars;
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2197,14 +2027,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (Scene != null)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (!sp.IsChildAgent && sp.ParentID == part.LocalId)
|
||||
sp.StandUp();
|
||||
|
||||
if (!silent)
|
||||
=======
|
||||
Scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
|
||||
>>>>>>> avn/ubitvar
|
||||
{
|
||||
if (avatar.ParentID == LocalId)
|
||||
avatar.StandUp();
|
||||
|
@ -2504,16 +2327,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <returns></returns>
|
||||
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;
|
||||
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
||||
dupe.m_isBackedUp = false;
|
||||
|
@ -2525,7 +2338,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
dupe.m_linkedAvatars = new List<ScenePresence>();
|
||||
dupe.m_sittingAvatars = new List<UUID>();
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
||||
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
||||
|
||||
|
@ -2700,12 +2512,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
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
|
||||
public void moveToTarget(Vector3 target, float tau)
|
||||
>>>>>>> avn/ubitvar
|
||||
public void MoveToTarget(Vector3 target, float tau)
|
||||
{
|
||||
if (IsAttachment)
|
||||
{
|
||||
|
@ -2732,21 +2540,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (IsAttachment)
|
||||
{
|
||||
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)
|
||||
{
|
||||
avatar.ResetMoveToTarget();
|
||||
|
@ -2786,7 +2580,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
rootpart.PhysActor.APIDDamping = damping;
|
||||
rootpart.PhysActor.APIDActive = true;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3484,18 +3277,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
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
|
||||
// (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;
|
||||
|
||||
objectGroup.HasGroupChangedDueToDelink = true;
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (sendEvents)
|
||||
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
||||
|
@ -3521,13 +3301,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="objectGroup"></param>
|
||||
public virtual void DetachFromBackup()
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (Backup && Scene != null)
|
||||
=======
|
||||
if (m_scene != null)
|
||||
m_scene.SceneGraph.FireDetachFromBackup(this);
|
||||
if (m_isBackedUp && Scene != null)
|
||||
>>>>>>> avn/ubitvar
|
||||
m_scene.EventManager.OnBackup -= ProcessBackup;
|
||||
|
||||
Backup = false;
|
||||
|
@ -3973,9 +3749,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF);
|
||||
|
||||
<<<<<<< HEAD
|
||||
AdjustChildPrimPermissions(Scene.Permissions.IsGod(AgentID));
|
||||
=======
|
||||
bool god = Scene.Permissions.IsGod(AgentID);
|
||||
|
||||
if (field == 1 && god)
|
||||
|
@ -3986,8 +3759,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
});
|
||||
}
|
||||
|
||||
AdjustChildPrimPermissions();
|
||||
>>>>>>> avn/ubitvar
|
||||
AdjustChildPrimPermissions(false);
|
||||
|
||||
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.
|
||||
/// </remarks>
|
||||
/// <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)
|
||||
return new List<ScenePresence>(m_sittingAvatars);
|
||||
return new List<UUID>(m_sittingAvatars);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -1046,39 +1046,22 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
set
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
if (Util.IsNanOrInfinity(value))
|
||||
m_angularVelocity = Vector3.Zero;
|
||||
else
|
||||
m_angularVelocity = value;
|
||||
|
||||
PhysicsActor actor = PhysActor;
|
||||
if ((actor != null) && actor.IsPhysical)
|
||||
actor.RotationalVelocity = m_angularVelocity;
|
||||
=======
|
||||
m_angularVelocity = value;
|
||||
PhysicsActor actor = PhysActor;
|
||||
if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE)
|
||||
{
|
||||
actor.RotationalVelocity = m_angularVelocity;
|
||||
}
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary></summary>
|
||||
public Vector3 Acceleration
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
get { return m_acceleration; }
|
||||
set
|
||||
{
|
||||
if (Util.IsNanOrInfinity(value))
|
||||
m_acceleration = Vector3.Zero;
|
||||
else
|
||||
m_acceleration = value;
|
||||
}
|
||||
=======
|
||||
get
|
||||
{
|
||||
PhysicsActor actor = PhysActor;
|
||||
|
@ -1088,9 +1071,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
return m_acceleration;
|
||||
}
|
||||
|
||||
set { m_acceleration = value; }
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
set
|
||||
{
|
||||
if (Util.IsNanOrInfinity(value))
|
||||
m_acceleration = Vector3.Zero;
|
||||
else
|
||||
m_acceleration = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string Description { get; set; }
|
||||
|
@ -1431,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <value>
|
||||
/// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene.
|
||||
/// </value>
|
||||
private HashSet<ScenePresence> m_sittingAvatars;
|
||||
private HashSet<UUID> m_sittingAvatars;
|
||||
|
||||
public virtual UUID RegionID
|
||||
{
|
||||
|
@ -1932,7 +1920,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
byte[] data;
|
||||
|
||||
if (pTexAnim.Flags == Primitive.TextureAnimMode.ANIM_OFF)
|
||||
|
@ -1944,13 +1931,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
data = new byte[16];
|
||||
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
|
||||
// it the crappy way. See the above function :(
|
||||
|
||||
|
@ -1962,17 +1942,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos);
|
||||
Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4);
|
||||
Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8);
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
=======
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
m_TextureAnimation = data;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TextureAnimation = Utils.EmptyBytes;
|
||||
|
||||
}
|
||||
m_TextureAnimation = data;
|
||||
}
|
||||
|
||||
public void AdjustSoundGain(double volume)
|
||||
|
@ -2240,7 +2212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Array.Copy(Shape.ExtraParams, extraP, extraP.Length);
|
||||
dupe.Shape.ExtraParams = extraP;
|
||||
|
||||
dupe.m_sittingAvatars = new HashSet<ScenePresence>();
|
||||
dupe.m_sittingAvatars = new HashSet<UUID>();
|
||||
|
||||
// safeguard actual copy is done in sog.copy
|
||||
dupe.KeyframeMotion = null;
|
||||
|
@ -2829,7 +2801,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
CollidingMessage = CreateColliderArgs(this, colliders);
|
||||
|
||||
if (CollidingMessage.Colliders.Count > 0)
|
||||
DoNotify(notify, LocalId, CollidingMessage);
|
||||
notify(LocalId, CollidingMessage);
|
||||
|
||||
if (PassCollisions)
|
||||
sendToRoot = true;
|
||||
|
@ -2843,7 +2815,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
CollidingMessage = CreateColliderArgs(ParentGroup.RootPart, colliders);
|
||||
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());
|
||||
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 (!PassCollisions)
|
||||
|
@ -2898,7 +2841,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot)
|
||||
{
|
||||
notify(ParentGroup.RootPart.LocalId, LandCollidingMessage);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3046,12 +2988,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (pa != null)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
Vector3 newpos = pa.Position;
|
||||
=======
|
||||
Vector3 newpos = new Vector3(pa.Position.GetBytes(), 0);
|
||||
|
||||
>>>>>>> avn/ubitvar
|
||||
if (!ParentGroup.Scene.PositionIsInCurrentRegion(newpos))
|
||||
{
|
||||
// Setting position outside current region will start region crossing
|
||||
|
@ -3996,14 +3933,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
|
||||
public void StopMoveToTarget()
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
ParentGroup.StopMoveToTarget();
|
||||
=======
|
||||
ParentGroup.stopMoveToTarget();
|
||||
|
||||
// ParentGroup.ScheduleGroupForTerseUpdate();
|
||||
//ParentGroup.ScheduleGroupForFullUpdate();
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
|
||||
public void StoreUndoState(ObjectChangeType change)
|
||||
|
@ -4665,8 +4595,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
|
||||
public void ClonePermissions(SceneObjectPart source)
|
||||
{
|
||||
bool update = false;
|
||||
|
||||
uint prevOwnerMask = OwnerMask;
|
||||
uint prevGroupMask = GroupMask;
|
||||
uint prevEveryoneMask = EveryoneMask;
|
||||
|
@ -4851,12 +4779,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
}
|
||||
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.
|
||||
/* moved into DoPhysicsPropertyUpdate
|
||||
if(VolumeDetectActive)
|
||||
|
@ -4864,7 +4787,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
else
|
||||
pa.SetVolumeDetect(0);
|
||||
*/
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
if (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.
|
||||
/// </returns>
|
||||
/// <param name='avatarId'></param>
|
||||
protected internal bool AddSittingAvatar(ScenePresence sp)
|
||||
protected internal bool AddSittingAvatar(UUID id)
|
||||
{
|
||||
lock (ParentGroup.m_sittingAvatars)
|
||||
{
|
||||
if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
|
||||
SitTargetAvatar = sp.UUID;
|
||||
SitTargetAvatar = id;
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -5650,22 +5572,22 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
/// true if the avatar was present and removed, false if it was not present.
|
||||
/// </returns>
|
||||
/// <param name='avatarId'></param>
|
||||
protected internal bool RemoveSittingAvatar(ScenePresence sp)
|
||||
protected internal bool RemoveSittingAvatar(UUID id)
|
||||
{
|
||||
lock (ParentGroup.m_sittingAvatars)
|
||||
{
|
||||
if (SitTargetAvatar == sp.UUID)
|
||||
if (SitTargetAvatar == id)
|
||||
SitTargetAvatar = UUID.Zero;
|
||||
|
||||
if (m_sittingAvatars == null)
|
||||
return false;
|
||||
|
||||
if (m_sittingAvatars.Remove(sp))
|
||||
if (m_sittingAvatars.Remove(id))
|
||||
{
|
||||
if (m_sittingAvatars.Count == 0)
|
||||
m_sittingAvatars = null;
|
||||
|
||||
ParentGroup.m_sittingAvatars.Remove(sp);
|
||||
ParentGroup.m_sittingAvatars.Remove(id);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -5679,14 +5601,14 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
/// </summary>
|
||||
/// <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>
|
||||
public HashSet<ScenePresence> GetSittingAvatars()
|
||||
public HashSet<UUID> GetSittingAvatars()
|
||||
{
|
||||
lock (ParentGroup.m_sittingAvatars)
|
||||
{
|
||||
if (m_sittingAvatars == null)
|
||||
return null;
|
||||
else
|
||||
return new HashSet<ScenePresence>(m_sittingAvatars);
|
||||
return new HashSet<UUID>(m_sittingAvatars);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -892,16 +892,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
offsetHeight = 0;
|
||||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
|
||||
for (int i = 0; i < objlist.Count; i++)
|
||||
{
|
||||
|
@ -1068,12 +1060,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_items.LockItemsForRead(false);
|
||||
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);
|
||||
>>>>>>> avn/ubitvar
|
||||
}
|
||||
m_items.LockItemsForWrite(true);
|
||||
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