diff --git a/OpenMetaverse/GroupManager.cs b/OpenMetaverse/GroupManager.cs index 10d32cbd..80d69520 100644 --- a/OpenMetaverse/GroupManager.cs +++ b/OpenMetaverse/GroupManager.cs @@ -447,9 +447,12 @@ namespace OpenMetaverse /// /// Callback for the member list of a group /// + /// returned by RequestGroupMembers + /// of the group + /// Total number of members in the group /// A dictionary containing the members of a group - /// where the Key is the group , and the values are the members - public delegate void GroupMembersCallback(Dictionary members); + /// where key is and value is struct + public delegate void GroupMembersCallback(UUID requestID, UUID groupID, int memberCount, Dictionary members); /// /// Callback for the role list of a group @@ -1326,9 +1329,9 @@ namespace OpenMetaverse } // Check if we've received all the group members that are showing up - if (OnGroupMembers != null && groupMemberCache != null && groupMemberCache.Count >= members.GroupData.MemberCount) + if (OnGroupMembers != null && groupMemberCache != null) { - try { OnGroupMembers(groupMemberCache); } + try { OnGroupMembers(members.GroupData.RequestID, members.GroupData.GroupID, members.GroupData.MemberCount, groupMemberCache); } catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } } } diff --git a/Programs/examples/TestClient/TestClient.cs b/Programs/examples/TestClient/TestClient.cs index 5857e1c6..42a45fb5 100644 --- a/Programs/examples/TestClient/TestClient.cs +++ b/Programs/examples/TestClient/TestClient.cs @@ -25,6 +25,7 @@ namespace OpenMetaverse.TestClient public InventoryFolder CurrentDirectory = null; private System.Timers.Timer updateTimer; + private UUID GroupMembersRequestID; /// /// @@ -117,12 +118,15 @@ namespace OpenMetaverse.TestClient { GroupID = p.AgentData.ActiveGroupID; - sim.Client.Groups.RequestGroupMembers(GroupID); + GroupMembersRequestID = sim.Client.Groups.RequestGroupMembers(GroupID); } } - private void GroupMembersHandler(Dictionary members) + private void GroupMembersHandler(UUID requestID, UUID groupID, int memberCount, Dictionary members) { + // Check for partial result, or result we didn't request + if (requestID != GroupMembersRequestID || memberCount > members.Count) return; + GroupMembers = members; } diff --git a/Programs/examples/groupmanager/frmGroupInfo.cs b/Programs/examples/groupmanager/frmGroupInfo.cs index 73af31d7..8ff5f2a9 100644 --- a/Programs/examples/groupmanager/frmGroupInfo.cs +++ b/Programs/examples/groupmanager/frmGroupInfo.cs @@ -212,8 +212,9 @@ namespace groupmanager } } - private void GroupMembersHandler(Dictionary members) + private void GroupMembersHandler(UUID requestID, UUID groupID, int memberCount, Dictionary members) { + if (memberCount > members.Count) return; // Partail result Members = members; UpdateMembers();