Merge branch 'avination' into careminster

Conflicts:
	OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
avinationmerge
Melanie 2012-06-29 22:11:49 +01:00
commit 05cf51cbbd
11 changed files with 89 additions and 41 deletions

View File

@ -1330,6 +1330,8 @@ namespace OpenSim.Data.MySQL
/// <param name="row"></param> /// <param name="row"></param>
/// <returns></returns> /// <returns></returns>
private static TaskInventoryItem BuildItem(IDataReader row) private static TaskInventoryItem BuildItem(IDataReader row)
{
try
{ {
TaskInventoryItem taskItem = new TaskInventoryItem(); TaskInventoryItem taskItem = new TaskInventoryItem();
@ -1358,6 +1360,12 @@ namespace OpenSim.Data.MySQL
return taskItem; return taskItem;
} }
catch
{
m_log.ErrorFormat("[MYSQL DB]: Error reading task inventory: itemID was {0}, primID was {1}", row["itemID"].ToString(), row["primID"].ToString());
throw;
}
}
private static RegionSettings BuildRegionSettings(IDataReader row) private static RegionSettings BuildRegionSettings(IDataReader row)
{ {

View File

@ -51,6 +51,7 @@ namespace OpenSim.Framework
protected object m_senderObject; protected object m_senderObject;
protected ChatTypeEnum m_type; protected ChatTypeEnum m_type;
protected UUID m_fromID; protected UUID m_fromID;
protected UUID m_destination = UUID.Zero;
public OSChatMessage() public OSChatMessage()
{ {
@ -131,6 +132,12 @@ namespace OpenSim.Framework
set { m_fromID = value; } set { m_fromID = value; }
} }
public UUID Destination
{
get { return m_destination; }
set { m_destination = value; }
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@ -41,6 +41,7 @@ namespace OpenSim.Framework.Servers.HttpServer
private readonly BaseHttpServer m_server; private readonly BaseHttpServer m_server;
private static Queue m_requests = Queue.Synchronized(new Queue()); private static Queue m_requests = Queue.Synchronized(new Queue());
private static ManualResetEvent m_ev = new ManualResetEvent(false);
private uint m_WorkerThreadCount = 0; private uint m_WorkerThreadCount = 0;
private Thread[] m_workerThreads; private Thread[] m_workerThreads;
private PollServiceWorkerThread[] m_PollServiceWorkerThreads; private PollServiceWorkerThread[] m_PollServiceWorkerThreads;
@ -90,15 +91,17 @@ namespace OpenSim.Framework.Servers.HttpServer
{ {
lock (m_requests) lock (m_requests)
m_requests.Enqueue(req); m_requests.Enqueue(req);
m_ev.Set();
} }
public void ThreadStart() public void ThreadStart()
{ {
while (m_running) while (m_running)
{ {
m_ev.WaitOne(1000);
m_ev.Reset();
Watchdog.UpdateThread(); Watchdog.UpdateThread();
ProcessQueuedRequests(); ProcessQueuedRequests();
Thread.Sleep(1000);
} }
} }

View File

@ -89,9 +89,16 @@ namespace OpenSim.Framework.Servers.HttpServer
continue; continue;
} }
try
{
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
DoHTTPGruntWork(m_server, req, responsedata); DoHTTPGruntWork(m_server, req, responsedata);
} }
catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
{
// Ignore it, no need to reply
}
}
else else
{ {
if ((Environment.TickCount - req.RequestTime) > m_timeout) if ((Environment.TickCount - req.RequestTime) > m_timeout)

View File

@ -199,6 +199,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
UUID fromID = UUID.Zero; UUID fromID = UUID.Zero;
string message = c.Message; string message = c.Message;
IScene scene = c.Scene; IScene scene = c.Scene;
UUID destination = c.Destination;
Vector3 fromPos = c.Position; Vector3 fromPos = c.Position;
Vector3 regionPos = new Vector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, Vector3 regionPos = new Vector3(scene.RegionInfo.RegionLocX * Constants.RegionSize,
scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); scene.RegionInfo.RegionLocY * Constants.RegionSize, 0);
@ -222,6 +223,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
{ {
fromNamePrefix = m_adminPrefix; fromNamePrefix = m_adminPrefix;
} }
destination = UUID.Zero; // Avatars cant "SayTo"
break; break;
case ChatSourceType.Object: case ChatSourceType.Object:
@ -244,9 +246,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
{ {
// This should use ForEachClient, but clients don't have a position. // This should use ForEachClient, but clients don't have a position.
// If camera is moved into client, then camera position can be used // If camera is moved into client, then camera position can be used
// MT: No, it can't, as chat is heard from the avatar position, not
// the camera position.
s.ForEachRootScenePresence( s.ForEachRootScenePresence(
delegate(ScenePresence presence) delegate(ScenePresence presence)
{ {
if (destination != UUID.Zero && presence.UUID != destination)
return;
ILandObject Presencecheck = s.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y); ILandObject Presencecheck = s.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y);
if (Presencecheck != null) if (Presencecheck != null)
{ {
@ -345,8 +351,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
UUID fromAgentID, string fromName, ChatTypeEnum type, UUID fromAgentID, string fromName, ChatTypeEnum type,
string message, ChatSourceType src) string message, ChatSourceType src)
{ {
// don't send stuff to child agents // don't send llRegionSay to child agents. Send normal chat because you
if (presence.IsChildAgent) return false; // can't talk across sim borders if it's not done
if (type == ChatTypeEnum.Broadcast && presence.IsChildAgent) return false;
Vector3 fromRegionPos = fromPos + regionPos; Vector3 fromRegionPos = fromPos + regionPos;
Vector3 toRegionPos = presence.AbsolutePosition + Vector3 toRegionPos = presence.AbsolutePosition +

View File

@ -532,7 +532,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
} }
else else
{ {
m_log.Warn("[HttpRequestHandler]: http-in request failed; no such url: "+urlkey.ToString()); //m_log.Warn("[HttpRequestHandler]: http-in request failed; no such url: "+urlkey.ToString());
return;
} }
//for llGetHttpHeader support we need to store original URI here //for llGetHttpHeader support we need to store original URI here

View File

@ -90,6 +90,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
// private static readonly ILog m_log = // private static readonly ILog m_log =
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private const int DEBUG_CHANNEL = 2147483647;
private ListenerManager m_listenerManager; private ListenerManager m_listenerManager;
private Queue m_pending; private Queue m_pending;
private Queue m_pendingQ; private Queue m_pendingQ;
@ -311,6 +313,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
public bool DeliverMessageTo(UUID target, int channel, Vector3 pos, string name, UUID id, string msg, out string error) public bool DeliverMessageTo(UUID target, int channel, Vector3 pos, string name, UUID id, string msg, out string error)
{ {
error = null; error = null;
if (channel == DEBUG_CHANNEL)
return true;
// Is id an avatar? // Is id an avatar?
ScenePresence sp = m_scene.GetScenePresence(target); ScenePresence sp = m_scene.GetScenePresence(target);
@ -319,7 +325,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
// Send message to avatar // Send message to avatar
if (channel == 0) if (channel == 0)
{ {
m_scene.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, false); // Channel 0 goes to viewer ONLY
m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, false, false, target);
return true;
} }
List<SceneObjectGroup> attachments = sp.GetAttachments(); List<SceneObjectGroup> attachments = sp.GetAttachments();
@ -351,12 +359,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
return true; return true;
} }
// Need to toss an error here SceneObjectPart part = m_scene.GetSceneObjectPart(target);
if (channel == 0) if (part == null) // Not even an object
{ return true; // No error
error = "Cannot use llRegionSayTo to message objects on channel 0";
return false;
}
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
{ {

View File

@ -38,8 +38,8 @@ namespace OpenSim.Region.Framework.Scenes
{ {
public partial class Scene public partial class Scene
{ {
protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, public void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName,
UUID fromID, bool fromAgent, bool broadcast) UUID fromID, bool fromAgent, bool broadcast, UUID destination)
{ {
OSChatMessage args = new OSChatMessage(); OSChatMessage args = new OSChatMessage();
@ -49,6 +49,7 @@ namespace OpenSim.Region.Framework.Scenes
args.Position = fromPos; args.Position = fromPos;
args.SenderUUID = fromID; args.SenderUUID = fromID;
args.Scene = this; args.Scene = this;
args.Destination = destination;
if (fromAgent) if (fromAgent)
{ {
@ -71,6 +72,12 @@ namespace OpenSim.Region.Framework.Scenes
EventManager.TriggerOnChatFromWorld(this, args); EventManager.TriggerOnChatFromWorld(this, args);
} }
protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName,
UUID fromID, bool fromAgent, bool broadcast)
{
SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, broadcast, UUID.Zero);
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@ -12164,9 +12164,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ContactResult result = new ContactResult (); ContactResult result = new ContactResult ();
result.ConsumerID = group.LocalId; result.ConsumerID = group.LocalId;
result.Depth = intersection.distance; // result.Depth = intersection.distance;
result.Normal = intersection.normal; result.Normal = intersection.normal;
result.Pos = intersection.ipoint; result.Pos = intersection.ipoint;
result.Depth = Vector3.Mag(rayStart - result.Pos);
contacts.Add(result); contacts.Add(result);
}); });
@ -12361,7 +12362,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
bool checkPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) == ScriptBaseClass.RC_REJECT_PHYSICAL); bool checkPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) == ScriptBaseClass.RC_REJECT_PHYSICAL);
if (World.SuportsRayCastFiltered()) if (false)// World.SuportsRayCastFiltered())
{ {
if (dist == 0) if (dist == 0)
return list; return list;

View File

@ -671,7 +671,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public static readonly LSLInteger RCERR_UNKNOWN = -1; public static readonly LSLInteger RCERR_UNKNOWN = -1;
public static readonly LSLInteger RCERR_SIM_PERF_LOW = -2; public static readonly LSLInteger RCERR_SIM_PERF_LOW = -2;
public static readonly LSLInteger RCERR_CAST_TIME_EXCEEDED = 3; public static readonly LSLInteger RCERR_CAST_TIME_EXCEEDED = -3;
public const int KFM_MODE = 1; public const int KFM_MODE = 1;
public const int KFM_LOOP = 1; public const int KFM_LOOP = 1;

View File

@ -197,6 +197,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
presence.Velocity.Z); presence.Velocity.Z);
Type = 0x01; // Avatar Type = 0x01; // Avatar
if (presence.PresenceType == PresenceType.Npc)
Type = 0x20;
if (presence.Velocity != Vector3.Zero) if (presence.Velocity != Vector3.Zero)
Type |= 0x02; // Active Type |= 0x02; // Active