lludp SimStats encoding

0.9.1.0-post-fixes
UbitUmarov 2019-03-19 08:52:14 +00:00
parent 132d8be9cc
commit 71361f61f4
1 changed files with 37 additions and 12 deletions

View File

@ -5412,21 +5412,46 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), ThrottleOutPacketType.Unknown); OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), ThrottleOutPacketType.Unknown);
} }
static private readonly byte[] SimStatsHeader = new byte[] {
0,
0, 0, 0, 0, // sequence number
0, // extra
0xff, 0xff, 0, 140 // ID 140 (low frequency bigendian)
};
public void SendSimStats(SimStats stats) public void SendSimStats(SimStats stats)
{ {
stats.StatsBlock[15].StatValue /= 1024; // UnAckedBytes are in KB UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
SimStatsPacket pack = new SimStatsPacket(); byte[] data = buf.Data;
pack.Region = new SimStatsPacket.RegionBlock();
pack.Region.RegionX = stats.RegionX;
pack.Region.RegionY = stats.RegionY;
pack.Region.RegionFlags = stats.RegionFlags;
pack.Region.ObjectCapacity = stats.ObjectCapacity;
//pack.Region = //stats.RegionBlock;
pack.Stat = stats.StatsBlock;
pack.Header.Reliable = false; //setup header
pack.RegionInfo = new SimStatsPacket.RegionInfoBlock[0]; Buffer.BlockCopy(SimStatsHeader, 0, data, 0, 10);
OutPacket(pack, ThrottleOutPacketType.Task);
// Region Block
Utils.UIntToBytesSafepos(stats.RegionX, data, 10);
Utils.UIntToBytesSafepos(stats.RegionY, data, 14);
Utils.UIntToBytesSafepos(stats.RegionFlags, data, 18);
Utils.UIntToBytesSafepos(stats.ObjectCapacity, data, 22); // 26
// stats
data[26] = (byte)stats.StatsBlock.Length;
int pos = 27;
for(int i = 0; i< stats.StatsBlock.Length; ++i)
{
Utils.UIntToBytesSafepos(stats.StatsBlock[i].StatID, data, pos); pos += 4;
Utils.FloatToBytesSafepos(stats.StatsBlock[i].StatValue, data, pos); pos += 4;
}
//no PID
Utils.IntToBytesSafepos(0, data, pos); pos += 4;
// no regioninfo (extended flags)
data[pos++] = 0; // = 1;
//Utils.UInt64ToBytesSafepos(RegionFlagsExtended, data, pos); pos += 8;
buf.DataLength = pos;
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
} }
private class ObjectPropertyUpdate : EntityUpdate private class ObjectPropertyUpdate : EntityUpdate