diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index aa742eff2b..59d1c69137 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -856,6 +856,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look)
{
+ m_thisAgentUpdateArgs.CameraAtAxis.X = float.MinValue;
+ m_thisAgentUpdateArgs.ControlFlags = uint.MaxValue;
+
AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete);
mov.SimData.ChannelVersion = m_channelVersion;
mov.AgentData.SessionID = m_sessionId;
@@ -5734,7 +5737,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Scene/Avatar
// Threshold for body rotation to be a significant agent update
- private const float QDELTA = 0.000001f;
+ // use the abs of cos
+ private const float QDELTABody = 1.0f - 0.0001f;
+ private const float QDELTAHead = 1.0f - 0.0001f;
// Threshold for camera rotation to be a significant agent update
private const float VDELTA = 0.01f;
@@ -5757,18 +5762,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{
- float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
- //qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
+ float qdelta1 = Math.Abs(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation));
+ //qdelta2 = Math.Abs(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation));
bool movementSignificant =
- (qdelta1 > QDELTA) // significant if body rotation above threshold
- // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
- // || (qdelta2 > QDELTA * 10) // significant if head rotation above threshold
- || (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
+ (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
|| (x.ControlFlags != (byte)AgentManager.ControlFlags.NONE) // significant if user supplying any movement update commands
- || (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
|| (x.Flags != m_thisAgentUpdateArgs.Flags) // significant if Flags changed
|| (x.State != m_thisAgentUpdateArgs.State) // significant if Stats changed
+ || (qdelta1 < QDELTABody) // significant if body rotation above(below cos) threshold
+ // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
+ // || (qdelta2 < QDELTAHead) // significant if head rotation above(below cos) threshold
+ || (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
;
//if (movementSignificant)
//{
@@ -5811,55 +5816,63 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return cameraSignificant;
}
- private bool HandleAgentUpdate(IClientAPI sener, Packet packet)
- {
+ private bool HandleAgentUpdate(IClientAPI sender, Packet packet)
+ {
// We got here, which means that something in agent update was significant
AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet;
AgentUpdatePacket.AgentDataBlock x = agentUpdate.AgentData;
if (x.AgentID != AgentId || x.SessionID != SessionId)
+ {
+ PacketPool.Instance.ReturnPacket(packet);
return false;
+ }
+
+ TotalAgentUpdates++;
- // Before we update the current m_thisAgentUpdateArgs, let's check this again
- // to see what exactly changed
bool movement = CheckAgentMovementUpdateSignificance(x);
bool camera = CheckAgentCameraUpdateSignificance(x);
- m_thisAgentUpdateArgs.AgentID = x.AgentID;
- m_thisAgentUpdateArgs.BodyRotation = x.BodyRotation;
- m_thisAgentUpdateArgs.CameraAtAxis = x.CameraAtAxis;
- m_thisAgentUpdateArgs.CameraCenter = x.CameraCenter;
- m_thisAgentUpdateArgs.CameraLeftAxis = x.CameraLeftAxis;
- m_thisAgentUpdateArgs.CameraUpAxis = x.CameraUpAxis;
- m_thisAgentUpdateArgs.ControlFlags = x.ControlFlags;
- m_thisAgentUpdateArgs.Far = x.Far;
- m_thisAgentUpdateArgs.Flags = x.Flags;
- m_thisAgentUpdateArgs.HeadRotation = x.HeadRotation;
- m_thisAgentUpdateArgs.SessionID = x.SessionID;
- m_thisAgentUpdateArgs.State = x.State;
-
- UpdateAgent handlerAgentUpdate = OnAgentUpdate;
- UpdateAgent handlerPreAgentUpdate = OnPreAgentUpdate;
- UpdateAgent handlerAgentCameraUpdate = OnAgentCameraUpdate;
-
// Was there a significant movement/state change?
if (movement)
{
+ m_thisAgentUpdateArgs.BodyRotation = x.BodyRotation;
+ m_thisAgentUpdateArgs.ControlFlags = x.ControlFlags;
+ m_thisAgentUpdateArgs.Far = x.Far;
+ m_thisAgentUpdateArgs.Flags = x.Flags;
+ m_thisAgentUpdateArgs.HeadRotation = x.HeadRotation;
+// m_thisAgentUpdateArgs.SessionID = x.SessionID;
+ m_thisAgentUpdateArgs.State = x.State;
+
+ UpdateAgent handlerAgentUpdate = OnAgentUpdate;
+ UpdateAgent handlerPreAgentUpdate = OnPreAgentUpdate;
+
if (handlerPreAgentUpdate != null)
OnPreAgentUpdate(this, m_thisAgentUpdateArgs);
if (handlerAgentUpdate != null)
OnAgentUpdate(this, m_thisAgentUpdateArgs);
+
+ handlerAgentUpdate = null;
+ handlerPreAgentUpdate = null;
}
+
// Was there a significant camera(s) change?
if (camera)
+ {
+ m_thisAgentUpdateArgs.CameraAtAxis = x.CameraAtAxis;
+ m_thisAgentUpdateArgs.CameraCenter = x.CameraCenter;
+ m_thisAgentUpdateArgs.CameraLeftAxis = x.CameraLeftAxis;
+ m_thisAgentUpdateArgs.CameraUpAxis = x.CameraUpAxis;
+
+ UpdateAgent handlerAgentCameraUpdate = OnAgentCameraUpdate;
+
if (handlerAgentCameraUpdate != null)
handlerAgentCameraUpdate(this, m_thisAgentUpdateArgs);
- handlerAgentUpdate = null;
- handlerPreAgentUpdate = null;
- handlerAgentCameraUpdate = null;
+ handlerAgentCameraUpdate = null;
+ }
PacketPool.Instance.ReturnPacket(packet);
@@ -6745,8 +6758,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true;
}
- private bool HandleCompleteAgentMovement(IClientAPI sender, Packet Pack)
+ private bool HandleCompleteAgentMovement(IClientAPI sender, Packet Pack)
{
+ m_log.DebugFormat("[LLClientView] HandleCompleteAgentMovement");
+
Action handlerCompleteMovementToRegion = OnCompleteMovementToRegion;
if (handlerCompleteMovementToRegion != null)
{
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 0bb53c4597..fe79f870a9 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -731,7 +731,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
"debug lludp status",
"Return status of LLUDP packet processing.",
HandleStatusCommand);
-
+/* disabled
MainConsole.Instance.Commands.AddCommand(
"Debug",
false,
@@ -739,6 +739,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
"debug lludp toggle agentupdate",
"Toggle whether agentupdate packets are processed or simply discarded.",
HandleAgentUpdateCommand);
+ */
}
private void HandlePacketCommand(string module, string[] args)
@@ -1421,6 +1422,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return;
}
+/*
else if (packet.Type == PacketType.CompleteAgentMovement)
{
// Send ack straight away to let the viewer know that we got it.
@@ -1434,6 +1436,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return;
}
+ */
}
// Determine which agent this packet came from
@@ -1553,24 +1556,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length);
#endregion BinaryStats
- if (packet.Type == PacketType.AgentUpdate)
- {
- if (m_discardAgentUpdates)
- return;
-
- ((LLClientView)client).TotalAgentUpdates++;
-
- 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
#region Ping Check Handling
@@ -1611,11 +1597,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
incomingPacket = new IncomingPacket((LLClientView)client, packet);
}
- if (incomingPacket.Packet.Type == PacketType.AgentUpdate ||
- incomingPacket.Packet.Type == PacketType.ChatFromViewer)
+// if (incomingPacket.Packet.Type == PacketType.AgentUpdate ||
+// incomingPacket.Packet.Type == PacketType.ChatFromViewer)
+ if (incomingPacket.Packet.Type == PacketType.ChatFromViewer)
packetInbox.EnqueueHigh(incomingPacket);
else
packetInbox.EnqueueLow(incomingPacket);
+
}
#region BinaryStats
@@ -1732,7 +1720,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
try
{
- // DateTime startTime = DateTime.Now;
+// DateTime startTime = DateTime.Now;
object[] array = (object[])o;
endPoint = (IPEndPoint)array[0];
UseCircuitCodePacket uccp = (UseCircuitCodePacket)array[1];
@@ -1752,9 +1740,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
uccp.CircuitCode.SessionID,
endPoint,
sessionInfo);
-
+
// Now we know we can handle more data
-// Thread.Sleep(200);
+ Thread.Sleep(200);
// Obtain the pending queue and remove it from the cache
Queue queue = null;
@@ -1765,6 +1753,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
m_log.DebugFormat("[LLUDPSERVER]: Client created but no pending queue present");
return;
+
}
m_pendingCache.Remove(endPoint);
}
@@ -1772,11 +1761,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_log.DebugFormat("[LLUDPSERVER]: Client created, processing pending queue, {0} entries", queue.Count);
// Reinject queued packets
- while(queue.Count > 0)
+ while (queue.Count > 0)
{
UDPPacketBuffer buf = queue.Dequeue();
PacketReceived(buf);
}
+
queue = null;
// Send ack straight away to let the viewer know that the connection is active.
@@ -1802,8 +1792,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
uccp.CircuitCode.ID, m_scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint);
lock (m_pendingCache)
m_pendingCache.Remove(endPoint);
- }
-
+ }
// m_log.DebugFormat(
// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
@@ -1820,8 +1809,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
e.StackTrace);
}
}
-
- private void HandleCompleteMovementIntoRegion(object o)
+/*
+ private void HandleCompleteMovementIntoRegion(object o)
{
IPEndPoint endPoint = null;
IClientAPI client = null;
@@ -1930,6 +1919,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
e.StackTrace);
}
}
+*/
///
/// Send an ack immediately to the given endpoint.
@@ -2067,7 +2057,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_incomingPacketPool.ReturnObject(incomingPacket);
}
}
- catch (Exception ex)
+ catch(Exception ex)
{
m_log.Error("[LLUDPSERVER]: Error in the incoming packet handler loop: " + ex.Message, ex);
}