diff options
author | UbitUmarov | 2019-03-18 18:03:22 +0000 |
---|---|---|
committer | UbitUmarov | 2019-03-18 18:03:22 +0000 |
commit | 84187975bdfc4a877fb1f6a2c193d8227d3c258a (patch) | |
tree | 6d4f5e62371691a38a2011a87bfd20916581801b /OpenSim | |
parent | stop sending some useless small packets (diff) | |
download | opensim-SC-84187975bdfc4a877fb1f6a2c193d8227d3c258a.zip opensim-SC-84187975bdfc4a877fb1f6a2c193d8227d3c258a.tar.gz opensim-SC-84187975bdfc4a877fb1f6a2c193d8227d3c258a.tar.bz2 opensim-SC-84187975bdfc4a877fb1f6a2c193d8227d3c258a.tar.xz |
lludp AgentMovementComplete enconding
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 64 |
1 files changed, 36 insertions, 28 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 39e2d39..ab5790c 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -332,7 +332,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
332 | private readonly UUID m_secureSessionId; | 332 | private readonly UUID m_secureSessionId; |
333 | protected readonly UUID m_agentId; | 333 | protected readonly UUID m_agentId; |
334 | private readonly uint m_circuitCode; | 334 | private readonly uint m_circuitCode; |
335 | private readonly byte[] m_channelVersion = Utils.EmptyBytes; | 335 | private readonly byte[] m_regionChannelVersion = Utils.EmptyBytes; |
336 | private readonly IGroupsModule m_GroupsModule; | 336 | private readonly IGroupsModule m_GroupsModule; |
337 | 337 | ||
338 | // private int m_cachedTextureSerial; | 338 | // private int m_cachedTextureSerial; |
@@ -531,7 +531,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
531 | m_assetService = m_scene.RequestModuleInterface<IAssetService>(); | 531 | m_assetService = m_scene.RequestModuleInterface<IAssetService>(); |
532 | m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); | 532 | m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); |
533 | ImageManager = new LLImageManager(this, m_assetService, Scene.RequestModuleInterface<IJ2KDecoder>()); | 533 | ImageManager = new LLImageManager(this, m_assetService, Scene.RequestModuleInterface<IJ2KDecoder>()); |
534 | m_channelVersion = Util.StringToBytes256(scene.GetSimulatorVersion()); | 534 | m_regionChannelVersion = Util.StringToBytes1024(scene.GetSimulatorVersion()); |
535 | m_agentId = agentId; | 535 | m_agentId = agentId; |
536 | m_sessionId = sessionId; | 536 | m_sessionId = sessionId; |
537 | m_secureSessionId = sessionInfo.LoginInfo.SecureSession; | 537 | m_secureSessionId = sessionInfo.LoginInfo.SecureSession; |
@@ -865,32 +865,55 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
865 | OutPacket(handshake, ThrottleOutPacketType.Unknown); | 865 | OutPacket(handshake, ThrottleOutPacketType.Unknown); |
866 | } | 866 | } |
867 | 867 | ||
868 | static private readonly byte[] AgentMovementCompleteHeader = new byte[] { | ||
869 | Helpers.MSG_RELIABLE, | ||
870 | 0, 0, 0, 0, // sequence number | ||
871 | 0, // extra | ||
872 | 0xff, 0xff, 0, 250 // ID 250 (low frequency bigendian) | ||
873 | }; | ||
868 | 874 | ||
869 | public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) | 875 | public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) |
870 | { | 876 | { |
877 | // reset agent update args | ||
871 | m_thisAgentUpdateArgs.CameraAtAxis.X = float.MinValue; | 878 | m_thisAgentUpdateArgs.CameraAtAxis.X = float.MinValue; |
872 | m_thisAgentUpdateArgs.lastUpdateTS = 0; | 879 | m_thisAgentUpdateArgs.lastUpdateTS = 0; |
873 | m_thisAgentUpdateArgs.ControlFlags = 0; | 880 | m_thisAgentUpdateArgs.ControlFlags = 0; |
874 | 881 | ||
875 | AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete); | 882 | UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint); |
876 | mov.SimData.ChannelVersion = m_channelVersion; | 883 | byte[] data = buf.Data; |
877 | mov.AgentData.SessionID = m_sessionId; | 884 | |
878 | mov.AgentData.AgentID = AgentId; | 885 | //setup header |
879 | mov.Data.RegionHandle = regInfo.RegionHandle; | 886 | Buffer.BlockCopy(AgentMovementCompleteHeader, 0, data, 0, 10); |
880 | mov.Data.Timestamp = (uint)Util.UnixTimeSinceEpoch(); | 887 | |
888 | //AgentData block | ||
889 | AgentId.ToBytes(data, 10); // 26 | ||
890 | SessionId.ToBytes(data, 26); // 42 | ||
881 | 891 | ||
892 | //Data block | ||
882 | if ((pos.X == 0) && (pos.Y == 0) && (pos.Z == 0)) | 893 | if ((pos.X == 0) && (pos.Y == 0) && (pos.Z == 0)) |
894 | m_startpos.ToBytes(data, 42); //54 | ||
895 | else | ||
896 | pos.ToBytes(data, 42); //54 | ||
897 | look.ToBytes(data, 54); // 66 | ||
898 | Utils.UInt64ToBytesSafepos(regInfo.RegionHandle, data, 66); // 74 | ||
899 | Utils.UIntToBytesSafepos((uint)Util.UnixTimeSinceEpoch(), data, 74); //78 | ||
900 | |||
901 | //SimData | ||
902 | int len = m_regionChannelVersion.Length; | ||
903 | if(len == 0) | ||
883 | { | 904 | { |
884 | mov.Data.Position = m_startpos; | 905 | data[78] = 0; |
906 | data[79] = 0; | ||
885 | } | 907 | } |
886 | else | 908 | else |
887 | { | 909 | { |
888 | mov.Data.Position = pos; | 910 | data[78] = (byte)len; |
911 | data[79] = (byte)(len >> 8); | ||
912 | Buffer.BlockCopy(m_regionChannelVersion, 0, data, 80, len); | ||
889 | } | 913 | } |
890 | mov.Data.LookAt = look; | ||
891 | 914 | ||
892 | // Hack to get this out immediately and skip the throttles | 915 | buf.DataLength = 80 + len; |
893 | OutPacket(mov, ThrottleOutPacketType.Unknown); | 916 | m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false); |
894 | } | 917 | } |
895 | 918 | ||
896 | public void SendChatMessage( | 919 | public void SendChatMessage( |
@@ -4265,20 +4288,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4265 | /// </summary> | 4288 | /// </summary> |
4266 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) | 4289 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) |
4267 | { | 4290 | { |
4268 | /* | ||
4269 | if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate)) | ||
4270 | { | ||
4271 | ImprovedTerseObjectUpdatePacket packet | ||
4272 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); | ||
4273 | |||
4274 | packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | ||
4275 | packet.RegionData.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f); | ||
4276 | packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||
4277 | packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false); | ||
4278 | OutPacket(packet, ThrottleOutPacketType.Unknown, true); | ||
4279 | return; | ||
4280 | } | ||
4281 | */ | ||
4282 | if (entity is SceneObjectPart) | 4291 | if (entity is SceneObjectPart) |
4283 | { | 4292 | { |
4284 | SceneObjectPart p = (SceneObjectPart)entity; | 4293 | SceneObjectPart p = (SceneObjectPart)entity; |
@@ -4297,7 +4306,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4297 | } | 4306 | } |
4298 | } | 4307 | } |
4299 | 4308 | ||
4300 | //double priority = m_prioritizer.GetUpdatePriority(this, entity); | ||
4301 | uint priority = m_prioritizer.GetUpdatePriority(this, entity); | 4309 | uint priority = m_prioritizer.GetUpdatePriority(this, entity); |
4302 | 4310 | ||
4303 | lock (m_entityUpdates.SyncRoot) | 4311 | lock (m_entityUpdates.SyncRoot) |