diff options
Final part for implementing SendChildAgentDataUpdate with modules. This is the part that uses the modules in Scene and related classes. This commit breaks compatibility of sim-sim SendChildAgentUpdates with older versions of OpenSim.
Diffstat (limited to 'OpenSim/Region/Environment/Scenes')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 41 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | 29 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 22 |
3 files changed, 60 insertions, 32 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 2d0743c..6aa34e4 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -149,6 +149,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
149 | protected IAvatarFactory m_AvatarFactory; | 149 | protected IAvatarFactory m_AvatarFactory; |
150 | protected IConfigSource m_config; | 150 | protected IConfigSource m_config; |
151 | protected IRegionSerialiserModule m_serialiser; | 151 | protected IRegionSerialiserModule m_serialiser; |
152 | protected IInterregionCommsOut m_interregionCommsOut; | ||
153 | protected IInterregionCommsIn m_interregionCommsIn; | ||
152 | 154 | ||
153 | // Central Update Loop | 155 | // Central Update Loop |
154 | 156 | ||
@@ -757,6 +759,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
757 | XferManager = RequestModuleInterface<IXfer>(); | 759 | XferManager = RequestModuleInterface<IXfer>(); |
758 | m_AvatarFactory = RequestModuleInterface<IAvatarFactory>(); | 760 | m_AvatarFactory = RequestModuleInterface<IAvatarFactory>(); |
759 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); | 761 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); |
762 | m_interregionCommsOut = RequestModuleInterface<IInterregionCommsOut>(); | ||
763 | m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>(); | ||
760 | } | 764 | } |
761 | 765 | ||
762 | #endregion | 766 | #endregion |
@@ -896,10 +900,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
896 | { | 900 | { |
897 | m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); | 901 | m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); |
898 | } | 902 | } |
899 | catch (NullReferenceException e) | 903 | //catch (NullReferenceException e) |
900 | { | 904 | //{ |
901 | m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); | 905 | // m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); |
902 | } | 906 | //} |
903 | catch (InvalidOperationException e) | 907 | catch (InvalidOperationException e) |
904 | { | 908 | { |
905 | m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); | 909 | m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); |
@@ -1145,7 +1149,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1145 | RegisterCommsEvents(); | 1149 | RegisterCommsEvents(); |
1146 | 1150 | ||
1147 | // These two 'commands' *must be* next to each other or sim rebooting fails. | 1151 | // These two 'commands' *must be* next to each other or sim rebooting fails. |
1148 | m_sceneGridService.RegisterRegion(RegionInfo); | 1152 | m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo); |
1149 | m_sceneGridService.InformNeighborsThatRegionisUp(RegionInfo); | 1153 | m_sceneGridService.InformNeighborsThatRegionisUp(RegionInfo); |
1150 | 1154 | ||
1151 | Dictionary<string, string> dGridSettings = m_sceneGridService.GetGridSettings(); | 1155 | Dictionary<string, string> dGridSettings = m_sceneGridService.GetGridSettings(); |
@@ -2690,12 +2694,21 @@ namespace OpenSim.Region.Environment.Scenes | |||
2690 | m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing; | 2694 | m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing; |
2691 | m_sceneGridService.OnCloseAgentConnection += CloseConnection; | 2695 | m_sceneGridService.OnCloseAgentConnection += CloseConnection; |
2692 | m_sceneGridService.OnRegionUp += OtherRegionUp; | 2696 | m_sceneGridService.OnRegionUp += OtherRegionUp; |
2693 | m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; | 2697 | //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; |
2694 | m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup; | 2698 | m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup; |
2695 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; | 2699 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; |
2696 | m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; | 2700 | m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; |
2697 | m_sceneGridService.KiPrimitive += SendKillObject; | 2701 | m_sceneGridService.KiPrimitive += SendKillObject; |
2698 | m_sceneGridService.OnGetLandData += GetLandData; | 2702 | m_sceneGridService.OnGetLandData += GetLandData; |
2703 | |||
2704 | if (m_interregionCommsIn != null) | ||
2705 | { | ||
2706 | m_log.Debug("[SCENE]: Registering with InterregionCommsIn"); | ||
2707 | m_interregionCommsIn.OnChildAgentUpdate += IncomingChildAgentDataUpdate; | ||
2708 | } | ||
2709 | else | ||
2710 | m_log.Debug("[SCENE]: Unable to register with InterregionCommsIn"); | ||
2711 | |||
2699 | } | 2712 | } |
2700 | 2713 | ||
2701 | /// <summary> | 2714 | /// <summary> |
@@ -2707,13 +2720,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
2707 | m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; | 2720 | m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; |
2708 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; | 2721 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; |
2709 | m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup; | 2722 | m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup; |
2710 | m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; | 2723 | //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; |
2711 | m_sceneGridService.OnRegionUp -= OtherRegionUp; | 2724 | m_sceneGridService.OnRegionUp -= OtherRegionUp; |
2712 | m_sceneGridService.OnExpectUser -= NewUserConnection; | 2725 | m_sceneGridService.OnExpectUser -= NewUserConnection; |
2713 | m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing; | 2726 | m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing; |
2714 | m_sceneGridService.OnCloseAgentConnection -= CloseConnection; | 2727 | m_sceneGridService.OnCloseAgentConnection -= CloseConnection; |
2715 | m_sceneGridService.OnGetLandData -= GetLandData; | 2728 | m_sceneGridService.OnGetLandData -= GetLandData; |
2716 | 2729 | ||
2730 | if (m_interregionCommsIn != null) | ||
2731 | m_interregionCommsIn.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; | ||
2732 | |||
2717 | m_sceneGridService.Close(); | 2733 | m_sceneGridService.Close(); |
2718 | } | 2734 | } |
2719 | 2735 | ||
@@ -2937,17 +2953,18 @@ namespace OpenSim.Region.Environment.Scenes | |||
2937 | } | 2953 | } |
2938 | } | 2954 | } |
2939 | 2955 | ||
2940 | public virtual bool IncomingChildAgentDataUpdate(ChildAgentDataUpdate cAgentData) | 2956 | public virtual bool IncomingChildAgentDataUpdate(AgentData cAgentData) |
2941 | { | 2957 | { |
2942 | ScenePresence childAgentUpdate = GetScenePresence(new UUID(cAgentData.AgentID)); | 2958 | //Console.WriteLine(" XXX Scene IncomingChildAgentDataUpdate in " + RegionInfo.RegionName); |
2959 | ScenePresence childAgentUpdate = GetScenePresence(cAgentData.AgentID); | ||
2943 | if (childAgentUpdate != null) | 2960 | if (childAgentUpdate != null) |
2944 | { | 2961 | { |
2945 | // I can't imagine *yet* why we would get an update if the agent is a root agent.. | 2962 | // I can't imagine *yet* why we would get an update if the agent is a root agent.. |
2946 | // however to avoid a race condition crossing borders.. | 2963 | // however to avoid a race condition crossing borders.. |
2947 | if (childAgentUpdate.IsChildAgent) | 2964 | if (childAgentUpdate.IsChildAgent) |
2948 | { | 2965 | { |
2949 | uint rRegionX = (uint)(cAgentData.regionHandle >> 40); | 2966 | uint rRegionX = (uint)(cAgentData.RegionHandle >> 40); |
2950 | uint rRegionY = (((uint)(cAgentData.regionHandle)) >> 8); | 2967 | uint rRegionY = (((uint)(cAgentData.RegionHandle)) >> 8); |
2951 | uint tRegionX = RegionInfo.RegionLocX; | 2968 | uint tRegionX = RegionInfo.RegionLocX; |
2952 | uint tRegionY = RegionInfo.RegionLocY; | 2969 | uint tRegionY = RegionInfo.RegionLocY; |
2953 | //Send Data to ScenePresence | 2970 | //Send Data to ScenePresence |
@@ -3131,7 +3148,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
3131 | return m_sceneGridService.CrossToNeighbouringRegion(regionHandle, agentID, position, isFlying); | 3148 | return m_sceneGridService.CrossToNeighbouringRegion(regionHandle, agentID, position, isFlying); |
3132 | } | 3149 | } |
3133 | 3150 | ||
3134 | public void SendOutChildAgentUpdates(ChildAgentDataUpdate cadu, ScenePresence presence) | 3151 | public void SendOutChildAgentUpdates(AgentData cadu, ScenePresence presence) |
3135 | { | 3152 | { |
3136 | m_sceneGridService.SendChildAgentDataUpdate(cadu, presence); | 3153 | m_sceneGridService.SendChildAgentDataUpdate(cadu, presence); |
3137 | } | 3154 | } |
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index 3a16b91..7385725 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | |||
@@ -33,6 +33,7 @@ using System.Threading; | |||
33 | using OpenMetaverse; | 33 | using OpenMetaverse; |
34 | using OpenMetaverse.StructuredData; | 34 | using OpenMetaverse.StructuredData; |
35 | using log4net; | 35 | using log4net; |
36 | using OpenSim.Region.Environment.Interfaces; | ||
36 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
37 | using OpenSim.Framework.Communications; | 38 | using OpenSim.Framework.Communications; |
38 | using OpenSim.Region.Interfaces; | 39 | using OpenSim.Region.Interfaces; |
@@ -49,6 +50,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
49 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
50 | 51 | ||
51 | protected CommunicationsManager m_commsProvider; | 52 | protected CommunicationsManager m_commsProvider; |
53 | protected IInterregionCommsOut m_interregionCommsOut; | ||
52 | protected RegionInfo m_regionInfo; | 54 | protected RegionInfo m_regionInfo; |
53 | 55 | ||
54 | protected RegionCommsListener regionCommsHost; | 56 | protected RegionCommsListener regionCommsHost; |
@@ -87,8 +89,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
87 | /// </summary> | 89 | /// </summary> |
88 | /// <param name="regionInfos"></param> | 90 | /// <param name="regionInfos"></param> |
89 | /// <exception cref="System.Exception">Thrown if region registration fails.</exception> | 91 | /// <exception cref="System.Exception">Thrown if region registration fails.</exception> |
90 | public void RegisterRegion(RegionInfo regionInfos) | 92 | public void RegisterRegion(IInterregionCommsOut comms_out, RegionInfo regionInfos) |
91 | { | 93 | { |
94 | m_interregionCommsOut = comms_out; | ||
95 | |||
92 | m_regionInfo = regionInfos; | 96 | m_regionInfo = regionInfos; |
93 | m_commsProvider.GridService.gdebugRegionName = regionInfos.RegionName; | 97 | m_commsProvider.GridService.gdebugRegionName = regionInfos.RegionName; |
94 | m_commsProvider.InterRegion.rdebugRegionName = regionInfos.RegionName; | 98 | m_commsProvider.InterRegion.rdebugRegionName = regionInfos.RegionName; |
@@ -531,7 +535,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
531 | //bool val = m_commsProvider.InterRegion.RegionUp(new SerializableRegionInfo(region)); | 535 | //bool val = m_commsProvider.InterRegion.RegionUp(new SerializableRegionInfo(region)); |
532 | } | 536 | } |
533 | 537 | ||
534 | public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ulong regionHandle); | 538 | public delegate void SendChildAgentDataUpdateDelegate(AgentData cAgentData, ulong regionHandle); |
535 | 539 | ||
536 | /// <summary> | 540 | /// <summary> |
537 | /// This informs all neighboring regions about the settings of it's child agent. | 541 | /// This informs all neighboring regions about the settings of it's child agent. |
@@ -540,13 +544,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
540 | /// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc. | 544 | /// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc. |
541 | /// | 545 | /// |
542 | /// </summary> | 546 | /// </summary> |
543 | private void SendChildAgentDataUpdateAsync(ChildAgentDataUpdate cAgentData, ulong regionHandle) | 547 | private void SendChildAgentDataUpdateAsync(AgentData cAgentData, ulong regionHandle) |
544 | { | 548 | { |
545 | //m_log.Info("[INTERGRID]: Informing neighbors about my agent in " + presence.Scene.RegionInfo.RegionName); | 549 | m_log.Info("[INTERGRID]: Informing neighbors about my agent in " + m_regionInfo.RegionName); |
546 | //bool regionAccepted = m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData); | 550 | //bool regionAccepted = m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData); |
547 | try | 551 | try |
548 | { | 552 | { |
549 | m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData); | 553 | //m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData); |
554 | m_interregionCommsOut.SendChildAgentUpdate(regionHandle, cAgentData); | ||
550 | } | 555 | } |
551 | catch | 556 | catch |
552 | { | 557 | { |
@@ -570,18 +575,20 @@ namespace OpenSim.Region.Environment.Scenes | |||
570 | icon.EndInvoke(iar); | 575 | icon.EndInvoke(iar); |
571 | } | 576 | } |
572 | 577 | ||
573 | public void SendChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, ScenePresence presence) | 578 | public void SendChildAgentDataUpdate(AgentData cAgentData, ScenePresence presence) |
574 | { | 579 | { |
575 | // This assumes that we know what our neighbors are. | 580 | // This assumes that we know what our neighbors are. |
576 | try | 581 | try |
577 | { | 582 | { |
578 | foreach (ulong regionHandle in presence.KnownChildRegionHandles) | 583 | foreach (ulong regionHandle in presence.KnownChildRegionHandles) |
579 | { | 584 | { |
580 | 585 | if (regionHandle != m_regionInfo.RegionHandle) | |
581 | SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; | 586 | { |
582 | d.BeginInvoke(cAgentData, regionHandle, | 587 | SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; |
583 | SendChildAgentDataUpdateCompleted, | 588 | d.BeginInvoke(cAgentData, regionHandle, |
584 | d); | 589 | SendChildAgentDataUpdateCompleted, |
590 | d); | ||
591 | } | ||
585 | } | 592 | } |
586 | } | 593 | } |
587 | catch (InvalidOperationException) | 594 | catch (InvalidOperationException) |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 8f6872e..41971fc 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -2326,7 +2326,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
2326 | //m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString()); | 2326 | //m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString()); |
2327 | cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier); | 2327 | cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier); |
2328 | cadu.Velocity = new sLLVector3(Velocity); | 2328 | cadu.Velocity = new sLLVector3(Velocity); |
2329 | m_scene.SendOutChildAgentUpdates(cadu,this); | 2329 | |
2330 | AgentData agent = new AgentData(); | ||
2331 | agent.CopyFrom(cadu); | ||
2332 | |||
2333 | m_scene.SendOutChildAgentUpdates(agent, this); | ||
2330 | 2334 | ||
2331 | m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; | 2335 | m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; |
2332 | m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; | 2336 | m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; |
@@ -2571,7 +2575,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
2571 | /// This updates important decision making data about a child agent | 2575 | /// This updates important decision making data about a child agent |
2572 | /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region | 2576 | /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region |
2573 | /// </summary> | 2577 | /// </summary> |
2574 | public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) | 2578 | public void ChildAgentDataUpdate(AgentData cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) |
2575 | { | 2579 | { |
2576 | // | 2580 | // |
2577 | if (!IsChildAgent) | 2581 | if (!IsChildAgent) |
@@ -2580,19 +2584,19 @@ namespace OpenSim.Region.Environment.Scenes | |||
2580 | int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; | 2584 | int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; |
2581 | int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; | 2585 | int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; |
2582 | 2586 | ||
2583 | m_DrawDistance = cAgentData.drawdistance; | 2587 | m_DrawDistance = cAgentData.Far; |
2584 | m_pos = new Vector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); | 2588 | m_pos = new Vector3(cAgentData.Position.X + shiftx, cAgentData.Position.Y + shifty, cAgentData.Position.Z); |
2585 | 2589 | ||
2586 | // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region | 2590 | // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region |
2587 | m_CameraCenter = | 2591 | m_CameraCenter = cAgentData.Center; |
2588 | new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); | 2592 | // new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); |
2589 | 2593 | ||
2590 | 2594 | ||
2591 | m_godlevel = cAgentData.godlevel; | 2595 | m_godlevel = cAgentData.GodLevel; |
2592 | m_avHeight = cAgentData.AVHeight; | 2596 | m_avHeight = cAgentData.Size.Z; |
2593 | //SetHeight(cAgentData.AVHeight); | 2597 | //SetHeight(cAgentData.AVHeight); |
2594 | 2598 | ||
2595 | ControllingClient.SetChildAgentThrottle(cAgentData.throttles); | 2599 | ControllingClient.SetChildAgentThrottle(cAgentData.Throttles); |
2596 | 2600 | ||
2597 | // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. | 2601 | // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. |
2598 | if (m_scene.m_seeIntoRegionFromNeighbor) | 2602 | if (m_scene.m_seeIntoRegionFromNeighbor) |