diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 37fd252..1b72b26 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -1257,6 +1257,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1257 | // UseCircuitCode handling | 1257 | // UseCircuitCode handling |
1258 | if (packet.Type == PacketType.UseCircuitCode) | 1258 | if (packet.Type == PacketType.UseCircuitCode) |
1259 | { | 1259 | { |
1260 | m_log.DebugFormat("[ZZZ]: In the dungeon: UseCircuitCode"); | ||
1260 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the | 1261 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the |
1261 | // buffer. | 1262 | // buffer. |
1262 | object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet }; | 1263 | object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet }; |
@@ -1265,6 +1266,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1265 | 1266 | ||
1266 | return; | 1267 | return; |
1267 | } | 1268 | } |
1269 | else if (packet.Type == PacketType.CompleteAgentMovement) | ||
1270 | { | ||
1271 | // Send ack straight away to let the viewer know that we got it. | ||
1272 | SendAckImmediate(endPoint, packet.Header.Sequence); | ||
1273 | |||
1274 | m_log.DebugFormat("[ZZZ]: In the dungeon: CompleteAgentMovement"); | ||
1275 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the | ||
1276 | // buffer. | ||
1277 | object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet }; | ||
1278 | |||
1279 | Util.FireAndForget(HandleCompleteMovementIntoRegion, array); | ||
1280 | |||
1281 | return; | ||
1282 | } | ||
1268 | 1283 | ||
1269 | // Determine which agent this packet came from | 1284 | // Determine which agent this packet came from |
1270 | IClientAPI client; | 1285 | IClientAPI client; |
@@ -1604,6 +1619,56 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1604 | } | 1619 | } |
1605 | } | 1620 | } |
1606 | 1621 | ||
1622 | private void HandleCompleteMovementIntoRegion(object o) | ||
1623 | { | ||
1624 | IPEndPoint endPoint = null; | ||
1625 | IClientAPI client = null; | ||
1626 | |||
1627 | try | ||
1628 | { | ||
1629 | object[] array = (object[])o; | ||
1630 | endPoint = (IPEndPoint)array[0]; | ||
1631 | CompleteAgentMovementPacket packet = (CompleteAgentMovementPacket)array[1]; | ||
1632 | |||
1633 | // Determine which agent this packet came from | ||
1634 | int count = 10; | ||
1635 | while (!m_scene.TryGetClient(endPoint, out client) && count-- > 0) | ||
1636 | { | ||
1637 | m_log.Debug("[LLUDPSERVER]: Received a CompleteMovementIntoRegion in " + m_scene.RegionInfo.RegionName + " (not ready yet)"); | ||
1638 | Thread.Sleep(200); | ||
1639 | } | ||
1640 | |||
1641 | if (client == null) | ||
1642 | return; | ||
1643 | |||
1644 | IncomingPacket incomingPacket1; | ||
1645 | |||
1646 | // Inbox insertion | ||
1647 | if (UsePools) | ||
1648 | { | ||
1649 | incomingPacket1 = m_incomingPacketPool.GetObject(); | ||
1650 | incomingPacket1.Client = (LLClientView)client; | ||
1651 | incomingPacket1.Packet = packet; | ||
1652 | } | ||
1653 | else | ||
1654 | { | ||
1655 | incomingPacket1 = new IncomingPacket((LLClientView)client, packet); | ||
1656 | } | ||
1657 | |||
1658 | packetInbox.Enqueue(incomingPacket1); | ||
1659 | } | ||
1660 | catch (Exception e) | ||
1661 | { | ||
1662 | m_log.ErrorFormat( | ||
1663 | "[LLUDPSERVER]: CompleteMovementIntoRegion handling from endpoint {0}, client {1} {2} failed. Exception {3}{4}", | ||
1664 | endPoint != null ? endPoint.ToString() : "n/a", | ||
1665 | client != null ? client.Name : "unknown", | ||
1666 | client != null ? client.AgentId.ToString() : "unknown", | ||
1667 | e.Message, | ||
1668 | e.StackTrace); | ||
1669 | } | ||
1670 | } | ||
1671 | |||
1607 | /// <summary> | 1672 | /// <summary> |
1608 | /// Send an ack immediately to the given endpoint. | 1673 | /// Send an ack immediately to the given endpoint. |
1609 | /// </summary> | 1674 | /// </summary> |
@@ -1999,6 +2064,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1999 | Packet packet = incomingPacket.Packet; | 2064 | Packet packet = incomingPacket.Packet; |
2000 | LLClientView client = incomingPacket.Client; | 2065 | LLClientView client = incomingPacket.Client; |
2001 | 2066 | ||
2067 | if (packet is CompleteAgentMovementPacket) | ||
2068 | m_log.DebugFormat("[ZZZ]: Received CompleteAgentMovementPacket"); | ||
2069 | |||
2002 | if (client.IsActive) | 2070 | if (client.IsActive) |
2003 | { | 2071 | { |
2004 | m_currentIncomingClient = client; | 2072 | m_currentIncomingClient = client; |