void Avatars_OnAvatarInterests(LLUUID avatarID, Avatar.Interests interests) { lock (ReceivedProfileEvent) { Interests = interests; ReceivedInterests = true; if (ReceivedInterests && ReceivedProperties) ReceivedProfileEvent.Set(); } }
/// <summary> /// Process incoming Avatar Interests information /// </summary> private void AvatarInterestsHandler(Packet packet, Simulator simulator) { if (OnAvatarInterests != null) { AvatarInterestsReplyPacket airp = (AvatarInterestsReplyPacket)packet; Avatar.Interests interests = new Avatar.Interests(); interests.WantToMask = airp.PropertiesData.WantToMask; interests.WantToText = Helpers.FieldToUTF8String(airp.PropertiesData.WantToText); interests.SkillsMask = airp.PropertiesData.SkillsMask; interests.SkillsText = Helpers.FieldToUTF8String(airp.PropertiesData.SkillsText); interests.LanguagesText = Helpers.FieldToUTF8String(airp.PropertiesData.LanguagesText); OnAvatarInterests(airp.AgentData.AvatarID, interests); } }
public bool GetAvatarProfile(LLUUID id, out Avatar.Interests interests, out Avatar.AvatarProperties properties, out List<LLUUID> groups) { // Do a local lookup first if (avatars.ContainsKey(id) && avatars[id].ProfileProperties.BornOn != null && avatars[id].ProfileProperties.BornOn != String.Empty) { interests = avatars[id].ProfileInterests; properties = avatars[id].ProfileProperties; groups = avatars[id].Groups; return true; } // Create the ManualResetEvents lock (PropertiesLookupEvents) if (!PropertiesLookupEvents.ContainsKey(id)) PropertiesLookupEvents[id] = new ManualResetEvent(false); lock (InterestsLookupEvents) if (!InterestsLookupEvents.ContainsKey(id)) InterestsLookupEvents[id] = new ManualResetEvent(false); lock (GroupsLookupEvents) if (!GroupsLookupEvents.ContainsKey(id)) GroupsLookupEvents[id] = new ManualResetEvent(false); // Request the avatar profile Client.Avatars.RequestAvatarProperties(id); // Wait for all of the events to complete PropertiesLookupEvents[id].WaitOne(5000, false); InterestsLookupEvents[id].WaitOne(5000, false); GroupsLookupEvents[id].WaitOne(5000, false); // Destroy the ManualResetEvents lock (PropertiesLookupEvents) PropertiesLookupEvents.Remove(id); lock (InterestsLookupEvents) InterestsLookupEvents.Remove(id); lock (GroupsLookupEvents) GroupsLookupEvents.Remove(id); // If we got a filled in profile return everything if (avatars.ContainsKey(id) && avatars[id].ProfileProperties.BornOn != null && avatars[id].ProfileProperties.BornOn != String.Empty) { interests = avatars[id].ProfileInterests; properties = avatars[id].ProfileProperties; groups = avatars[id].Groups; return true; } else { interests = new Avatar.Interests(); properties = new Avatar.AvatarProperties(); groups = null; return false; } }