mirror of
https://github.com/opensim/opensim.git
synced 2026-08-04 08:06:27 +08:00
Pipe Throttle Update Event to EventManager, client --> ScenePresence --> EventManager, so that modules can know when throttles are updated. The event contains no client specific data to preserve the possibility of 'multiple clients' and you must still call ControllingClient.GetThrottlesPacked(f) to see what the throttles actually are once the event fires. Hook EventManager.OnUpdateThrottle to GetTextureModule.
This commit is contained in:
@@ -91,6 +91,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
{
|
||||
m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
|
||||
m_scene.EventManager.OnDeregisterCaps -= DeregisterCaps;
|
||||
m_scene.EventManager.OnThrottleUpdate -= ThrottleUpdate;
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
@@ -101,6 +102,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
m_scene.EventManager.OnRegisterCaps += RegisterCaps;
|
||||
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
||||
m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
|
||||
|
||||
if (m_workerThreads == null)
|
||||
{
|
||||
@@ -118,6 +120,46 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
}
|
||||
}
|
||||
}
|
||||
private int ExtractImageThrottle(byte[] pthrottles)
|
||||
{
|
||||
|
||||
byte[] adjData;
|
||||
int pos = 0;
|
||||
|
||||
if (!BitConverter.IsLittleEndian)
|
||||
{
|
||||
byte[] newData = new byte[7 * 4];
|
||||
Buffer.BlockCopy(pthrottles, 0, newData, 0, 7 * 4);
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
Array.Reverse(newData, i * 4, 4);
|
||||
|
||||
adjData = newData;
|
||||
}
|
||||
else
|
||||
{
|
||||
adjData = pthrottles;
|
||||
}
|
||||
|
||||
// 0.125f converts from bits to bytes
|
||||
//int resend = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
// int land = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
// int wind = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
// int cloud = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
// int task = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
pos = pos + 16;
|
||||
int texture = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
|
||||
//int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
||||
return texture;
|
||||
}
|
||||
|
||||
// Now we know when the throttle is changed by the client in the case of a root agent or by a neighbor region in the case of a child agent.
|
||||
public void ThrottleUpdate(ScenePresence p)
|
||||
{
|
||||
byte[] throttles = p.ControllingClient.GetThrottlesPacked(1);
|
||||
UUID user = p.UUID;
|
||||
int imagethrottle = ExtractImageThrottle(throttles);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
|
||||
@@ -295,6 +295,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
public event MuteListEntryRemove OnRemoveMuteListEntry;
|
||||
public event GodlikeMessage onGodlikeMessage;
|
||||
public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
|
||||
public event GenericCall2 OnUpdateThrottles;
|
||||
|
||||
#endregion Events
|
||||
|
||||
@@ -6729,6 +6730,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
#endregion
|
||||
|
||||
m_udpClient.SetThrottles(atpack.Throttle.Throttles);
|
||||
GenericCall2 handler = OnUpdateThrottles;
|
||||
if (handler != null)
|
||||
{
|
||||
handler();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11870,6 +11876,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
public void SetChildAgentThrottle(byte[] throttles)
|
||||
{
|
||||
m_udpClient.SetThrottles(throttles);
|
||||
GenericCall2 handler = OnUpdateThrottles;
|
||||
if (handler != null)
|
||||
{
|
||||
handler();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user