@Miste, а можно проще.
Я сейчас тоже свою систему демок пилю, но для всех игр сразу.
У меня немного иная концепция. Плагин дёргает SourceTV через расширение (ведь нативная работа с ботом быстрее, чем общение через команды) когда ему необходимо. При начале записи, он формирует lock-файл (далее будет ясно, зачем) на демку. Как только запись демки останавливается, lock-файл удаляется, генерируется JSON-файл с:
Перечнем игроков, которые есть на демке (имя, SteamID)
Именем карты
Кол-вом тиков
Временем начала записи
Временем конца записи
Событиями
События могут добавляться сторонними плагинами. События могут иметь дополнительную информацию. Например, если игрок умер, модуль может сообщить ядру записи о том, что произошло событие с внутренним событием
Engine::PlayerDeath и передать данные о умершем игроке, данные об убийце, и от какого оружия он умер (если такое есть).
Веб (
как раз сейчас пилится; плагин уже как месяц готов) же забирает демки раз в некоторое время по крону и разбирает JSON-файл.
При отображении демки он ищет обработчик события по уникальному названию (пример выше уже был приведён), и вызывает его, передавая данные. В ответ он ожидает получить абстрактный объект
View (который может в себе содержать название шаблона и данные для него, или голый HTML-код для вывода), и уже прицепляет к самому выводу.