public EnhancedGroupMember(GroupMember baseMember) { Base = baseMember; if (baseMember.OnlineStatus == "Online") { LastOnline = DateTime.Now; } else if (string.IsNullOrEmpty(baseMember.OnlineStatus) || baseMember.OnlineStatus == "unknown") { LastOnline = DateTime.MinValue; } else { try { LastOnline = Convert.ToDateTime(baseMember.OnlineStatus, Utils.EnUsCulture); } catch (FormatException) { LastOnline = DateTime.MaxValue; } } }
/// <summary>Process an incoming packet and raise the appropriate events</summary> /// <param name="sender">The sender</param> /// <param name="e">The EventArgs object containing the packet data</param> protected void GroupMembersHandler(object sender, PacketReceivedEventArgs e) { Packet packet = e.Packet; GroupMembersReplyPacket members = (GroupMembersReplyPacket)packet; Dictionary<UUID, GroupMember> groupMemberCache = null; lock (GroupMembersRequests) { // If nothing is registered to receive this RequestID drop the data if (GroupMembersRequests.Contains(members.GroupData.RequestID)) { lock (TempGroupMembers.Dictionary) { if (!TempGroupMembers.TryGetValue(members.GroupData.RequestID, out groupMemberCache)) { groupMemberCache = new Dictionary<UUID, GroupMember>(); TempGroupMembers[members.GroupData.RequestID] = groupMemberCache; } foreach (GroupMembersReplyPacket.MemberDataBlock block in members.MemberData) { GroupMember groupMember = new GroupMember(); groupMember.ID = block.AgentID; groupMember.Contribution = block.Contribution; groupMember.IsOwner = block.IsOwner; groupMember.OnlineStatus = Utils.BytesToString(block.OnlineStatus); groupMember.Powers = (GroupPowers)block.AgentPowers; groupMember.Title = Utils.BytesToString(block.Title); groupMemberCache[block.AgentID] = groupMember; } if (groupMemberCache.Count >= members.GroupData.MemberCount) { GroupMembersRequests.Remove(members.GroupData.RequestID); TempGroupMembers.Remove(members.GroupData.RequestID); } } } } if (m_GroupMembers != null && groupMemberCache != null && groupMemberCache.Count >= members.GroupData.MemberCount) { OnGroupMembersReply(new GroupMembersReplyEventArgs(members.GroupData.RequestID, members.GroupData.GroupID, groupMemberCache)); } }
private void GroupMembersHandler(Packet packet, Simulator simulator) { GroupMembersReplyPacket members = (GroupMembersReplyPacket)packet; Dictionary<UUID, GroupMember> groupMemberCache = null; lock (GroupMembersRequests) { // If nothing is registered to receive this RequestID drop the data if (GroupMembersRequests.Contains(members.GroupData.RequestID)) { lock (TempGroupMembers.Dictionary) { if (!TempGroupMembers.TryGetValue(members.GroupData.RequestID, out groupMemberCache)) { groupMemberCache = new Dictionary<UUID, GroupMember>(); TempGroupMembers[members.GroupData.RequestID] = groupMemberCache; } foreach (GroupMembersReplyPacket.MemberDataBlock block in members.MemberData) { GroupMember groupMember = new GroupMember(); groupMember.ID = block.AgentID; groupMember.Contribution = block.Contribution; groupMember.IsOwner = block.IsOwner; groupMember.OnlineStatus = Utils.BytesToString(block.OnlineStatus); groupMember.Powers = (GroupPowers)block.AgentPowers; groupMember.Title = Utils.BytesToString(block.Title); groupMemberCache[block.AgentID] = groupMember; } if (groupMemberCache.Count >= members.GroupData.MemberCount) { GroupMembersRequests.Remove(members.GroupData.RequestID); TempGroupMembers.Remove(members.GroupData.RequestID); } } } } if (OnGroupMembers != null && groupMemberCache != null && groupMemberCache.Count >= members.GroupData.MemberCount) { try { OnGroupMembers(members.GroupData.RequestID, members.GroupData.GroupID, groupMemberCache); } catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } } }
protected void GroupMembersHandlerCaps(UUID requestID, OSD result) { try { OSDMap res = (OSDMap)result; int memberCount = res["member_count"]; OSDArray titlesOSD = (OSDArray)res["titles"]; string[] titles = new string[titlesOSD.Count]; for (int i = 0; i < titlesOSD.Count; i++) { titles[i] = titlesOSD[i]; } UUID groupID = res["group_id"]; GroupPowers defaultPowers = (GroupPowers)(ulong)((OSDMap)res["defaults"])["default_powers"]; OSDMap membersOSD = (OSDMap)res["members"]; Dictionary<UUID, GroupMember> groupMembers = new Dictionary<UUID, GroupMember>(membersOSD.Count); foreach (var memberID in membersOSD.Keys) { OSDMap member = (OSDMap)membersOSD[memberID]; GroupMember groupMember = new GroupMember(); groupMember.ID = (UUID)memberID; groupMember.Contribution = member["donated_square_meters"]; groupMember.IsOwner = "Y" == member["owner"].AsString(); groupMember.OnlineStatus = member["last_login"]; groupMember.Powers = defaultPowers; if (member.ContainsKey("powers")) { groupMember.Powers = (GroupPowers)(ulong)member["powers"]; } groupMember.Title = titles[(int)member["title"]]; groupMembers[groupMember.ID] = groupMember; } OnGroupMembersReply(new GroupMembersReplyEventArgs(requestID, groupID, groupMembers)); } catch (Exception ex) { Logger.Log("Failed to decode result of GroupMemberData capability: ", Helpers.LogLevel.Error, Client, ex); } }
private void GroupMembersHandler(Packet packet, Simulator simulator) { GroupMembersReplyPacket members = (GroupMembersReplyPacket)packet; Dictionary<UUID, GroupMember> groupMemberCache = null; lock (GroupMembersCaches) { // If nothing is registered to receive this RequestID drop the data if (GroupMembersCaches.ContainsKey(members.GroupData.RequestID)) { groupMemberCache = GroupMembersCaches[members.GroupData.RequestID]; foreach (GroupMembersReplyPacket.MemberDataBlock block in members.MemberData) { GroupMember groupMember = new GroupMember(); groupMember.ID = block.AgentID; groupMember.Contribution = block.Contribution; groupMember.IsOwner = block.IsOwner; groupMember.OnlineStatus = Utils.BytesToString(block.OnlineStatus); groupMember.Powers = (GroupPowers)block.AgentPowers; groupMember.Title = Utils.BytesToString(block.Title); groupMemberCache[block.AgentID] = groupMember; } } } // Check if we've received all the group members that are showing up if (OnGroupMembers != null && groupMemberCache != null && groupMemberCache.Count >= members.GroupData.MemberCount) { try { OnGroupMembers(groupMemberCache); } catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } } }