private void GroupRoleDataHandler(Packet packet, Simulator simulator)
{
GroupRoleDataReplyPacket roles = (GroupRoleDataReplyPacket)packet;
Dictionary<UUID, GroupRole> groupRoleCache = null;
lock (GroupRolesRequests)
{
// If nothing is registered to receive this RequestID drop the data
if (GroupRolesRequests.Contains(roles.GroupData.RequestID))
{
GroupRolesRequests.Remove(roles.GroupData.RequestID);
lock (GroupRolesCaches)
{
if (!GroupRolesCaches.TryGetValue(roles.GroupData.GroupID, out groupRoleCache))
{
groupRoleCache = new Dictionary<UUID, GroupRole>();
GroupRolesCaches[roles.GroupData.GroupID] = groupRoleCache;
}
foreach (GroupRoleDataReplyPacket.RoleDataBlock block in roles.RoleData)
{
GroupRole groupRole = new GroupRole();
groupRole.GroupID = roles.GroupData.GroupID;
groupRole.ID = block.RoleID;
groupRole.Description = Utils.BytesToString(block.Description);
groupRole.Name = Utils.BytesToString(block.Name);
groupRole.Powers = (GroupPowers)block.Powers;
groupRole.Title = Utils.BytesToString(block.Title);
groupRoleCache[block.RoleID] = groupRole;
}
}
}
}
// Check if we've received all the group members that are showing up
if (OnGroupRoles != null && groupRoleCache != null && groupRoleCache.Count >= roles.GroupData.RoleCount)
{
try { OnGroupRoles(groupRoleCache); }
catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
}
}