aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2016-08-04 22:54:29 +0100
committerUbitUmarov2016-08-04 22:54:29 +0100
commita90079bc92217325f1e284a679288df624b721b3 (patch)
tree3a17bbeaaa2f74137f7ce7dbc183384f5df8172f
parentmake sure all new scenepresences have fresh groups information at creation ti... (diff)
downloadopensim-SC_OLD-a90079bc92217325f1e284a679288df624b721b3.zip
opensim-SC_OLD-a90079bc92217325f1e284a679288df624b721b3.tar.gz
opensim-SC_OLD-a90079bc92217325f1e284a679288df624b721b3.tar.bz2
opensim-SC_OLD-a90079bc92217325f1e284a679288df624b721b3.tar.xz
cancel sending group powers on crossings, they are no longer needed.
-rw-r--r--OpenSim/Framework/ChildAgentDataUpdate.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs76
2 files changed, 21 insertions, 78 deletions
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index 74f18bf..61c870e 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -358,7 +358,6 @@ namespace OpenSim.Framework
358 public UUID agentCOF; 358 public UUID agentCOF;
359 public byte CrossingFlags; 359 public byte CrossingFlags;
360 360
361 public AgentGroupData[] Groups;
362 public Dictionary<ulong, string> ChildrenCapSeeds = null; 361 public Dictionary<ulong, string> ChildrenCapSeeds = null;
363 public Animation[] Anims; 362 public Animation[] Anims;
364 public Animation DefaultAnim = null; 363 public Animation DefaultAnim = null;
@@ -436,14 +435,6 @@ namespace OpenSim.Framework
436 if(ActiveGroupTitle != null) 435 if(ActiveGroupTitle != null)
437 args["active_group_title"] = OSD.FromString(ActiveGroupTitle); 436 args["active_group_title"] = OSD.FromString(ActiveGroupTitle);
438 437
439 if ((Groups != null) && (Groups.Length > 0))
440 {
441 OSDArray groups = new OSDArray(Groups.Length);
442 foreach (AgentGroupData agd in Groups)
443 groups.Add(agd.PackUpdateMessage());
444 args["groups"] = groups;
445 }
446
447 if (ChildrenCapSeeds != null && ChildrenCapSeeds.Count > 0) 438 if (ChildrenCapSeeds != null && ChildrenCapSeeds.Count > 0)
448 { 439 {
449 OSDArray childrenSeeds = new OSDArray(ChildrenCapSeeds.Count); 440 OSDArray childrenSeeds = new OSDArray(ChildrenCapSeeds.Count);
@@ -636,20 +627,6 @@ namespace OpenSim.Framework
636 if(args.ContainsKey("active_group_title") && args["active_group_title"] != null) 627 if(args.ContainsKey("active_group_title") && args["active_group_title"] != null)
637 ActiveGroupTitle = args["active_group_title"].AsString(); 628 ActiveGroupTitle = args["active_group_title"].AsString();
638 629
639 if (args.ContainsKey("groups") && (args["groups"] != null) && (args["groups"]).Type == OSDType.Array)
640 {
641 OSDArray groups = (OSDArray)(args["groups"]);
642 Groups = new AgentGroupData[groups.Count];
643 int i = 0;
644 foreach (OSD o in groups)
645 {
646 if (o.Type == OSDType.Map)
647 {
648 Groups[i++] = new AgentGroupData((OSDMap)o);
649 }
650 }
651 }
652
653 if (args.ContainsKey("children_seeds") && (args["children_seeds"] != null) && 630 if (args.ContainsKey("children_seeds") && (args["children_seeds"] != null) &&
654 (args["children_seeds"].Type == OSDType.Array)) 631 (args["children_seeds"].Type == OSDType.Array))
655 { 632 {
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 90b0f38..5c10345 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -568,7 +568,7 @@ namespace OpenSim.Region.Framework.Scenes
568 public string Firstname { get; private set; } 568 public string Firstname { get; private set; }
569 public string Lastname { get; private set; } 569 public string Lastname { get; private set; }
570 570
571 public bool haveGroupInformation; 571 public bool haveGroupUpdate;
572 public bool gotCrossUpdate; 572 public bool gotCrossUpdate;
573 public byte crossingFlags; 573 public byte crossingFlags;
574 574
@@ -1508,7 +1508,7 @@ namespace OpenSim.Region.Framework.Scenes
1508 /// </remarks> 1508 /// </remarks>
1509 public void MakeChildAgent(ulong newRegionHandle) 1509 public void MakeChildAgent(ulong newRegionHandle)
1510 { 1510 {
1511 haveGroupInformation = false; 1511 haveGroupUpdate = false;
1512 gotCrossUpdate = false; 1512 gotCrossUpdate = false;
1513 crossingFlags = 0; 1513 crossingFlags = 0;
1514 m_scene.EventManager.OnRegionHeartbeatEnd -= RegionHeartbeatEnd; 1514 m_scene.EventManager.OnRegionHeartbeatEnd -= RegionHeartbeatEnd;
@@ -1978,9 +1978,8 @@ namespace OpenSim.Region.Framework.Scenes
1978 1978
1979 m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 1979 m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts));
1980 1980
1981 if(!haveGroupInformation && !IsChildAgent && !isNPC) 1981 if(!haveGroupUpdate && !IsChildAgent && !isNPC)
1982 { 1982 {
1983 // oh crap.. lets retry it directly
1984 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); 1983 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
1985 if (gm != null) 1984 if (gm != null)
1986 Grouptitle = gm.GetGroupTitle(m_uuid); 1985 Grouptitle = gm.GetGroupTitle(m_uuid);
@@ -2204,14 +2203,7 @@ namespace OpenSim.Region.Framework.Scenes
2204 m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 2203 m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2205 2204
2206 } 2205 }
2207 if(gotCrossUpdate) 2206
2208 {
2209 // override group info with authorative data
2210 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
2211 if (gm != null)
2212 gm.SendAgentGroupDataUpdate(ControllingClient);
2213 m_log.DebugFormat("[CompleteMovement] delayed groups: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2214 }
2215 } 2207 }
2216 finally 2208 finally
2217 { 2209 {
@@ -2224,7 +2216,7 @@ namespace OpenSim.Region.Framework.Scenes
2224 // m_currentParcelHide = newhide; 2216 // m_currentParcelHide = newhide;
2225 // } 2217 // }
2226 2218
2227 haveGroupInformation = true; 2219 haveGroupUpdate = false;
2228 gotCrossUpdate = false; 2220 gotCrossUpdate = false;
2229 crossingFlags = 0; 2221 crossingFlags = 0;
2230 2222
@@ -4557,24 +4549,12 @@ namespace OpenSim.Region.Framework.Scenes
4557 else 4549 else
4558 cAgent.CrossingFlags = 0; 4550 cAgent.CrossingFlags = 0;
4559 4551
4560 if(isCrossUpdate && haveGroupInformation) 4552 if(isCrossUpdate)
4561 { 4553 {
4562 cAgent.agentCOF = COF; 4554 cAgent.agentCOF = COF;
4563 cAgent.ActiveGroupID = ControllingClient.ActiveGroupId; 4555 cAgent.ActiveGroupID = ControllingClient.ActiveGroupId;
4564 cAgent.ActiveGroupName = ControllingClient.ActiveGroupName; 4556 cAgent.ActiveGroupName = ControllingClient.ActiveGroupName;
4565 cAgent.ActiveGroupTitle = Grouptitle; 4557 cAgent.ActiveGroupTitle = Grouptitle;
4566 Dictionary<UUID, ulong> gpowers = ControllingClient.GetGroupPowers();
4567 if(gpowers.Count >0)
4568 {
4569 cAgent.Groups = new AgentGroupData[gpowers.Count];
4570 int i = 0;
4571 foreach (UUID gid in gpowers.Keys)
4572 {
4573 // WARNING we dont' have AcceptNotices in cache.. sending as true mb no one notices ;)
4574 AgentGroupData agd = new AgentGroupData(gid,gpowers[gid],true);
4575 cAgent.Groups[i++] = agd;
4576 }
4577 }
4578 } 4558 }
4579 } 4559 }
4580 4560
@@ -4671,46 +4651,32 @@ namespace OpenSim.Region.Framework.Scenes
4671 if (Scene.AttachmentsModule != null) 4651 if (Scene.AttachmentsModule != null)
4672 Scene.AttachmentsModule.CopyAttachments(cAgent, this); 4652 Scene.AttachmentsModule.CopyAttachments(cAgent, this);
4673 4653
4674 haveGroupInformation = false; 4654 crossingFlags = cAgent.CrossingFlags;
4655 gotCrossUpdate = (crossingFlags != 0);
4675 4656
4657 haveGroupUpdate = false;
4676 // using this as protocol detection don't want to mess with the numbers for now 4658 // using this as protocol detection don't want to mess with the numbers for now
4677 if(cAgent.ActiveGroupTitle != null) 4659 if(cAgent.ActiveGroupTitle != null)
4678 { 4660 {
4661 haveGroupUpdate = true;
4679 COF = cAgent.agentCOF; 4662 COF = cAgent.agentCOF;
4680 ControllingClient.ActiveGroupId = cAgent.ActiveGroupID; 4663 if(ControllingClient.IsGroupMember(cAgent.ActiveGroupID))
4681 ControllingClient.ActiveGroupName = cAgent.ActiveGroupName;
4682 ControllingClient.ActiveGroupPowers = 0;
4683 Grouptitle = cAgent.ActiveGroupTitle;
4684
4685 if(cAgent.Groups != null && cAgent.Groups.Length > 0)
4686 { 4664 {
4687 int ngroups = cAgent.Groups.Length; 4665 ControllingClient.ActiveGroupId = cAgent.ActiveGroupID;
4688 Dictionary<UUID, ulong> gpowers = new Dictionary<UUID, ulong>(ngroups); 4666 ControllingClient.ActiveGroupName = cAgent.ActiveGroupName;
4689 for(int i = 0 ; i < ngroups; i++) 4667 Grouptitle = cAgent.ActiveGroupTitle;
4690 { 4668 ControllingClient.ActiveGroupPowers =
4691 AgentGroupData agd = cAgent.Groups[i]; 4669 ControllingClient.GetGroupPowers(cAgent.ActiveGroupID);
4692 gpowers[agd.GroupID] = agd.GroupPowers;
4693 }
4694
4695 ControllingClient.SetGroupPowers(gpowers);
4696
4697 if(cAgent.ActiveGroupID == UUID.Zero)
4698 haveGroupInformation = true;
4699 else if(gpowers.ContainsKey(cAgent.ActiveGroupID))
4700 {
4701 ControllingClient.ActiveGroupPowers = gpowers[cAgent.ActiveGroupID];
4702 haveGroupInformation = true;
4703 }
4704 } 4670 }
4705 else if(cAgent.ActiveGroupID == UUID.Zero) 4671 else
4706 { 4672 {
4707 haveGroupInformation = true; 4673 // we got a unknown active group so get what groups thinks about us
4674 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
4675 if (gm != null)
4676 gm.SendAgentGroupDataUpdate(ControllingClient);
4708 } 4677 }
4709 } 4678 }
4710 4679
4711 crossingFlags = cAgent.CrossingFlags;
4712 gotCrossUpdate = (crossingFlags != 0);
4713
4714 lock (m_originRegionIDAccessLock) 4680 lock (m_originRegionIDAccessLock)
4715 m_originRegionID = cAgent.RegionID; 4681 m_originRegionID = cAgent.RegionID;
4716 } 4682 }