Хранение картинок, звуков и других ресурсов

Сложно представить игру без картинок, музыки и других видов ресурсов.
Более того, типичная игра потребует достаточно большое количество разнообразных ресурсов, да и еще и в разных форматах.

Для примера возьмем простой ресурс — изображение. С одной стороны дизайнерам удобно рисовать в PhotoShop-е, а с другой — Flash не умеет читать и показывать такие файлы. Да и для оптимизации трафика лучше из PSD формировать две картинки JPG для изображения и GIF для хранения карты прозрачности. Если такую задачу возложить на дизайнеров, то большая часть их рабочего времени будет уходить на конвертирование файлов. А после конвертирования файлы еще надо скопировать в папку, доступную серверу по протоколу FTP.

Для экономии времени, сил и нервов дизайнеров была придумана следующая схема работы: дизайнер создает PSD-файл и сохраняет его в своей локальной папке, далее, используя контекстное меню проводника, перемещает файл в SVN (операция в один клик). Все, после этого спокойно идет читать свой любимый форум — всю остальную работу за него делает сервер.

Сервер отслеживает изменения в SVN и, как только видит, что требуемые ресурсы изменились, получает изменения и преобразует исходный файл в нужный формат. Например, из PSD получаем JPG и GIF. После преобразования перемещает полученные файлы в каталог, доступный Flash клиенту. Кроме того, мы получили возможность в любой момент вернуться к старым версиям исходного файла.

Технические аспекты решения

Задача делится на два этапа:
Получить оповещения об изменении ресурса:

svnlook changed /data/svn|sed -e "s/^U /http://*/svnupdate/?url=/g" | wget -i -

Данная команда размещается в файле hooks/post-commit.

И получить собственно содержимое файла, да и еще с учетом ревизии:
Для работы с SVN используем HTTP DAV протокол. Долго искали какие же команды он понимает, и вот что нашли:

В качестве библиотеки используется jakarta-slide-webdavlib-2.1.jar — http://jakarta.apache.org/slide/.

Пример работы с DAV

HttpURL url = new HttpURL("http://*"); 
WebdavResource wr = new WebdavResource(url, new UsernamePasswordCredentials("arts80", "****"), 0, 0); 
wr.setPath(wr.getPath()+"Alternativa/server/com/alternativagame/parentmodel/ParentModelExecutor.java");                         
 
Enumeration propfindMethod = wr.propfindMethod("DAV:creationdate"); 
while (propfindMethod.hasMoreElements()) { 
    System.out.println(propfindMethod.nextElement());                         
 
}

Свойства
DAV:comment комментарий
DAV:creator-displayname имя пользователя, создавшего ресурс
DAV:creationdate дата создания
DAV:version-name версия

Checkout
Для получения файла с нужной версией используется следующий путь
/!svn/ver/номер ревизии/путь к файлу

Хранение картинок, звуков и других ресурсов: Один комментарий

Добавить комментарий