Use a System.Collections.Generic.Queue. This will allow you to use whatever datatype you want (including a custom class, such as user), and it will provide the queuing techniques requested.
You cannot programmatically search through a queue, just add to the end of it and pull from the front of it. This will have to be a "public static" variable, though, so all sessions will be able to use the same queue variable.
To figure out the wait time, you'd need to calculate [ MaxTime x (queue.Count - 2) + TimeLeftForCurrentUser ]. (Subtract 1 for the user currently using the device, another 1 for the current user because he won't have to wait until his own session is over).
---------------------------------------
MCP - Web Based Client Development .NET 2.0