Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim

This commit is contained in:
Diva Canto
2009-08-17 05:55:38 -07:00
46 changed files with 1738 additions and 372 deletions

View File

@@ -1435,6 +1435,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name="map">heightmap</param>
public virtual void SendLayerData(float[] map)
{
DoSendLayerData((object)map);
ThreadPool.QueueUserWorkItem(DoSendLayerData, map);
}
@@ -1450,16 +1451,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
for (int y = 0; y < 16; y++)
{
// For some terrains, sending more than one terrain patch at once results in a libsecondlife exception
// see http://opensimulator.org/mantis/view.php?id=1662
//for (int x = 0; x < 16; x += 4)
//{
// SendLayerPacket(map, y, x);
// Thread.Sleep(150);
//}
for (int x = 0; x < 16; x++)
for (int x = 0; x < 16; x += 4)
{
SendLayerData(x, y, LLHeightFieldMoronize(map));
SendLayerPacket(LLHeightFieldMoronize(map), y, x);
Thread.Sleep(35);
}
}
@@ -1476,17 +1470,54 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <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;
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);
// }
LayerDataPacket layerpack;
try
{
layerpack = TerrainCompressor.CreateLandPacket(map, patches);
layerpack.Header.Zerocoded = true;
layerpack.Header.Reliable = true;
if (layerpack.Length > 1000) // Oversize packet was created
{
for (int xa = 0 ; xa < 4 ; xa++)
{
// Send oversize packet in individual patches
//
SendLayerData(x+xa, y, map);
}
}
else
{
OutPacket(layerpack, ThrottleOutPacketType.Land);
}
}
catch (OverflowException e)
{
for (int xa = 0 ; xa < 4 ; xa++)
{
// Send oversize packet in individual patches
//
SendLayerData(x+xa, y, map);
}
}
catch (IndexOutOfRangeException e)
{
for (int xa = 0 ; xa < 4 ; xa++)
{
// Bad terrain, send individual chunks
//
SendLayerData(x+xa, y, map);
}
}
}
/// <summary>
/// Sends a specified patch to a client
@@ -1507,6 +1538,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(((map.Length==65536)? map : LLHeightFieldMoronize(map)), patches);
layerpack.Header.Zerocoded = true;
layerpack.Header.Reliable = true;
OutPacket(layerpack, ThrottleOutPacketType.Land);
@@ -1556,7 +1588,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name="windSpeeds">16x16 array of wind speeds</param>
public virtual void SendWindData(Vector2[] windSpeeds)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendWindData), (object)windSpeeds);
DoSendWindData((object)windSpeeds);
// ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendWindData), (object)windSpeeds);
}
/// <summary>

View File

@@ -34,6 +34,7 @@ using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenSim.Framework;
using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock;
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
{