dont let time go back

0.9.0-post-fixes
UbitUmarov 2017-06-13 14:09:34 +01:00
parent 9526a96b4f
commit fd8836e493
1 changed files with 31 additions and 7 deletions

View File

@ -8030,19 +8030,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true; return true;
} }
Dictionary<uint, uint> objImageSeqs = null;
double lastobjImageSeqsMS = 0.0;
private bool HandleObjectImage(IClientAPI sender, Packet Pack) private bool HandleObjectImage(IClientAPI sender, Packet Pack)
{ {
ObjectImagePacket imagePack = (ObjectImagePacket)Pack; ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
UpdatePrimTexture handlerUpdatePrimTexture = null; UpdatePrimTexture handlerUpdatePrimTexture = OnUpdatePrimTexture;
if (handlerUpdatePrimTexture == null)
return true;
double now = Util.GetTimeStampMS();
if(objImageSeqs == null)
objImageSeqs = new Dictionary<uint, uint>(16);
else
{
if ( now - lastobjImageSeqsMS > 30000.0)
objImageSeqs.Clear();
}
lastobjImageSeqsMS = now;
uint seq = Pack.Header.Sequence;
uint id;
uint lastseq;
ObjectImagePacket.ObjectDataBlock o;
for (int i = 0; i < imagePack.ObjectData.Length; i++) for (int i = 0; i < imagePack.ObjectData.Length; i++)
{ {
handlerUpdatePrimTexture = OnUpdatePrimTexture; o = imagePack.ObjectData[i];
if (handlerUpdatePrimTexture != null) id = o.ObjectLocalID;
{ if(objImageSeqs.TryGetValue(id, out lastseq))
handlerUpdatePrimTexture(imagePack.ObjectData[i].ObjectLocalID, {
imagePack.ObjectData[i].TextureEntry, this); if(seq <= lastseq)
} continue;
}
objImageSeqs[id] = seq;
handlerUpdatePrimTexture(id, o.TextureEntry, this);
} }
return true; return true;
} }