Я думаю, что столько, сколько вы описали, можно сделать в ASP.NET.
Чтобы отслеживать пользователей, которые находятся в сети, если ваш сайт не очень большой, вы, вероятно, можете просто отслеживать его в памяти. Это будет стерто, если ваш сайт обновился, и не будет работать, если вам нужно масштабировать до нескольких серверов, но это пока не выглядит проблемой. Просто держите словарь, который отображает имена пользователей в состояние пользователя.
Это довольно минималистичный подход, но не важно.
Один из способов обновить состояние, чтобы определить, кто находится в сети, - создать модуль HttpModule, который проверяет, находится ли вызывающий абонент в сети, и обновляет состояние, если это так. HttpModule будет иметь событие, которое запускает пост-аутентификацию для обновления состояния пользователей. Также отслеживать, когда они были в последний раз активны.
Что касается «отправки головоломки», то это другое дело. Если достаточно, чтобы пользователь зашел на страницу, чтобы найти головоломку, просто добавьте страницу, которая загружает текущую головоломку. Если головоломка людей должна появляться без действий пользователя, у вас может быть страница, которую они посещают и которая использует AJAX, чтобы проверять наличие новой головоломки каждые несколько секунд.