В целом совет простой и стандартный: рисуете три элемента - входящие данные, игра, исходящие данные (для сервера и для клиента). Далее делаете декомпозицию каждого элемента - от сложного к простому. Повторяете несколько раз вниз до самого простого элемента. Далее структурируете и организовываете вашу архитектуру логически в объекты, методы, классы, модули и прочее. Например:
раз,
два.
как можно реализовать сами комнаты?
Структурой.
Можно ли представить комнаты потоками?
Можно, но не нужно. Это несколько разные концепции. Комната - это набор данных. Поток - это процесс обработки данных.
Тогда получится ли корректно работать с двумя игроками в одном потоке?
Вполне. Обратите внимание на существующие онлайн игры - тысячи и миллионы игроков.
Или каждый игрок обязательно должен быть самостоятельным потоком, и информацию о комнатах нужно хранить отдельно?
Опять путаете процесс и данные. Игрок - это тоже данные.