With my little delivery system project, I’m starting to work on an additional module to form a pipeline. In the way that I designed my queue system, individual worker threads can easily create new tasks that other threads can handle once they complete their task. In this instance, I’m working on a task to determine if an avatar can receive an object.
The highest potential of a delivery failure occurs when an avatar is busy or AFK. After that, people could end up having IM caps preventing them from receiving inventory when they are offline. I’m making an object in-world that will be able to detect and report if an avatar is currently online. This is done through the method call to llRequestAgentData. That is simple and easy. The problem comes in with detecting the status of an avatar. Another method is exposed to developers that handles this is called llGetAgentInfo. It lets me know if someone is flying, away, busy, crouching, running, typing, walking and more. This method has a flaw though, which hinders my progress. Once an avatar leaves the region, it fails to work.
I looked on JIRA, but I couldn’t find any exact issues that demonstrated my dilema. I opened a new feature request. [SVC-5266] Expose results of llGetAgentInfo grid-wide using llRequestAgentData(id, AGENT_INFO). Soon afterwards, I found a similar feature request, [SVC-1618] Exapanding capabilities of llRequestAgentData(). It appeared that at one time, someone suggested “DATA_STATUS” as a subtask, but had been removed since llGetAgentInfo was available. I added a comment about the need for grid- wide capabilities and added a subtask for DATA_INFO.
For now, my queue can wait until an avatar is online before it delivers a product. If the avatar is in the same sim, then it can also detect if they are AFK or Busy. When a better way to handle AFK/Busy status becomes available, I can switch it without much work. I am hoping that Linden Lab may provide a richer set of methods for delivery systems since they now own and promote XStreetSL.