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();