/// <summary> /// Enqueues a presence update, sending info about user 'talkingAbout' to user 'receiver'. /// </summary> /// <param name="talkingAbout">We are sending presence information about this user.</param> /// <param name="receiver">We are sending the presence update to this user</param> private void enqueuePresenceUpdate(UserPresenceData talkingAbout, UserPresenceData receiver) { UserAgentData p2Handle = m_userDataBaseService.GetUserAgentData(receiver.agentData.AgentID); if (p2Handle != null) { if (receiver.lookupUserRegionYN) { // this is incomplete, just filling in one field, but just calling // m_regionModule.GetRegionInfo (again) here isn't a solution. // Maybe we should be treating it as if p2Handle got a null above, // and asynchronously trying to update the regionData again later. receiver.regionData.regionHandle = p2Handle.Handle; } else { receiver.lookupUserRegionYN = true; // TODO Huh? } PresenceInformer friendlistupdater = new PresenceInformer(); friendlistupdater.presence1 = talkingAbout; friendlistupdater.presence2 = receiver; friendlistupdater.OnGetRegionData += m_regionModule.GetRegionInfo; friendlistupdater.OnDone += PresenceUpdateDone; WaitCallback cb = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb); } else { m_log.WarnFormat("[PRESENCE]: no data found for user {0}", receiver.agentData.AgentID); // Skip because we can't find any data on the user } }
/// <summary> /// Enqueues a presence update, sending info about user 'talkingAbout' to user 'receiver'. /// </summary> /// <param name="talkingAbout">We are sending presence information about this user.</param> /// <param name="receiver">We are sending the presence update to this user</param> private void enqueuePresenceUpdate(UserPresenceData talkingAbout, UserPresenceData receiver) { UserAgentData p2Handle = m_userDataBaseService.GetUserAgentData(receiver.agentData.AgentID); if (p2Handle != null) { if (receiver.lookupUserRegionYN) { receiver.regionData.regionHandle = p2Handle.Handle; } else { receiver.lookupUserRegionYN = true; // TODO Huh? } PresenceInformer friendlistupdater = new PresenceInformer(); friendlistupdater.presence1 = talkingAbout; friendlistupdater.presence2 = receiver; friendlistupdater.OnGetRegionData += m_regionModule.GetRegionInfo; friendlistupdater.OnDone += PresenceUpdateDone; WaitCallback cb = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb); } else { m_log.WarnFormat("no data found for user {0}", receiver.agentData.AgentID); // Skip because we can't find any data on the user } }
private void PresenceUpdateDone(PresenceInformer obj) { obj.OnGetRegionData -= m_regionModule.GetRegionInfo; obj.OnDone -= PresenceUpdateDone; }
/// <summary> /// Enqueues a presence update, sending info about user 'talkingAbout' to user 'receiver'. /// </summary> /// <param name="talkingAbout">We are sending presence information about this user.</param> /// <param name="receiver">We are sending the presence update to this user</param> private void enqueuePresenceUpdate(UserPresenceData talkingAbout, UserPresenceData receiver) { UserAgentData p2Handle = m_userDataBaseService.GetUserAgentData(receiver.agentData.AgentID); if (p2Handle != null) { if (receiver.lookupUserRegionYN) { receiver.regionData.regionHandle = p2Handle.Handle; } else { receiver.lookupUserRegionYN = true; // TODO Huh? } PresenceInformer friendlistupdater = new PresenceInformer(); friendlistupdater.presence1 = talkingAbout; friendlistupdater.presence2 = receiver; friendlistupdater.OnGetRegionData += m_regionModule.GetRegionInfo; friendlistupdater.OnDone += PresenceUpdateDone; WaitCallback cb = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb); } else { m_log.WarnFormat("[PRESENCE]: no data found for user {0}", receiver.agentData.AgentID); // Skip because we can't find any data on the user } }