Разработка данной программы ведется с целью изучения работы сети Steam'а и клиента в частности, в ходе которого "рождаются" программные модули, позволяющие как минимум эмулировать клиент данной сети (в идеале - копировать с некоторыми модификациями).
Основные возможности программы (предполагаемые, в порядке их внедрения):
- Управление файлами игр на уровне CFToolBox и выше (на данный момент почти завершено редактирование содержимого файлов игр с полным принятием таких файлов Steam'ом);
- Запуск игр, инструментов и использование медиа-приложений на уровне, максимально приближенном к оригинальному проекту ( на начальном этапе - на уровне обыкновенной пиратки);
- Обмен контентом приложений между пользователями посредством PEER-TO-PEER-сети (аналогично Torrent'у).
На данный момент основная концепция программы основательно (но еще не окончательно) проработана и постепенно претворяется в жизнь. Вся программа будет состоять из набора модулей (плагинов), отвечающих за реализацию конкретного направления функционирования программы. Один плагин может содержать как один, так и несколько модулей (например, вместе с модулем, реализующим общую работу с файлами - INTERFACE_FILE_FORMATS - будут находится модули реализации работы с некоторыми базовыми типами файлов - GCF/NCF, VPK, PAK и т.п.). Каждый модуль представляет собой обыкновенный класс с виртуальными методами, поэтому их написание возможно на любом языке с поддержкой вызовов методов Сишных классов (на .NET придется сильно извращаться, но то все возможно).
Сейчас выделены следующие модули:
- INTERFACE_CORE - список остальных интерфейсов;
- INTERFACE_LOG - ведение лога;
- INTERFACE_UTILS - интерфейс с различными вспомогательными функциями;
- INTERFACE_SETTINGS - доступ к настройкам;
- INTERFACE_TRANSLATION - реализация многоязычной поддержки;
- INTERFACE_APPLICATION_LIST - реализация работы со списком приложений (игры, инструменты, медиа, файлы кэша);
- INTERFACE_WORK_LIST - реализация работы с заданиями (добавление, удаление, приостановка и т.п.);
- INTERFACE_UI - реализация пользовательского интерфейса;
- INTERFACE_NETWORK - реализация сетевых протоколов;
- INTERFACE_P2P - реализация p2p сети;
- INTERFACE_GAME_CONVERTER - конвертирование игр;
- INTERFACE_FILE_FORMATS - универсальный класс для работы с файлами;
- INTERFACE_FILE_FORMAT - реализация работы с конкретным форматом файлов (могут различаться дополнительными функциями после основных);
- INTERFACE_FILE - реализация работы с конкретным файлом (могут различаться дополнительными функциями после основных);
- INTERFACE_APPLICATION - общий класс для работы с приложениями;
- INTERFACE_APP - промежуточный клас (набор методов), общий для приложений (не для файлов кэша!);
- INTERFACE_CACHE - работа с отдельным файлом кэша;
- INTERFACE_GAME - работа с отдельной игрой;
- INTERFACE_MEDIA - работа с отдельным медиа-приложением
- INTERFACE_TOOLS - работа с отдельным инструментом;
Классы INTERFACE_GAME, INTERFACE_MEDIA и INTERFACE_TOOLS хранятся в списке внутри класса INTERFACE_APPLICATION_LIST и приведены к типу INTERFACE_APP для упрощения взаимодействия с ними.
По данной ссылке можно будет просмотреть самую свежую версию заголовочного файла с описанием классов (на Delphi).
Добавлено спустя 5 минут 57 секунд:
По опросу (что бы не возникало лишних вопросов) - данная структура подразумевает, что файл кэша будет находиться внутри архива (например, ZIP) и его использование будет происходить без распаковки, напрямую из архива. Над данной возможностью задумался, поскольку многие файлы кэша более чем отлично ужимаются и это позволит съэкономить значительные объемы дискового пространства. Естественно, такое использование файлов налагает некоторые ограничения (файл будет открываться только на чтение и к нему невозможно будет применить обновление).