Universal Steam Extractor
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
MOZGIII
Ты имел в виду по хешу имени файла? Если да, то хеш для него вычисляется хитрой функцией только для имени (без пути к нему), из-за чего возникает множество коллизий, так что поиск файла по хешу его имени неэффективен, т.к. для многих файлов хеш может совпадать.
Если по хешу содержимого, то я не понял суть, т.к. такого не может быть (ибо у каждого файла их может быть много, по 1 на каждый кусочек).
Ты имел в виду по хешу имени файла? Если да, то хеш для него вычисляется хитрой функцией только для имени (без пути к нему), из-за чего возникает множество коллизий, так что поиск файла по хешу его имени неэффективен, т.к. для многих файлов хеш может совпадать.
Если по хешу содержимого, то я не понял суть, т.к. такого не может быть (ибо у каждого файла их может быть много, по 1 на каждый кусочек).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
andreil
Я имел ввиду по хешу содержимого.
Можно ли как-нибуть иначе чем перерассчитывая хеша всего файла идентифицровать файл по содержимому? Например хешем строки, состоящей их конкатезации хешей (как строк) всех его сегментов?
Напимер так:
И также вопрос: придефрагментации кусочки переразбиваются? Реально ли организовать p2p обмен кусочков gcf одной и той же версии (но у одного пира файл, допустим, дефрагментирован, а у другого - нет), идентифицируя их по хешам. Собственно всё упирается вот во что: изменяются ли в заголовке контрольные суммы кусочков при дефрагментации gcf?
Я имел ввиду по хешу содержимого.
Можно ли как-нибуть иначе чем перерассчитывая хеша всего файла идентифицровать файл по содержимому? Например хешем строки, состоящей их конкатезации хешей (как строк) всех его сегментов?
Напимер так:
Код: Выделить всё
hash_func( string(seg1.hash) + string(seg2.hash) + ... + string(segN.hash) )
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
1) можно, но неэффективно ;)
2) нет, не переразбиваются. Все кусочки файла (кроме последнего) имеют размер ровно 8кб. Именно за счет этого и можно организовать р2р сеть с файлами кэша в качестве основы.
3) нет, КС файлов не изменяются, а почему - см. п.2 :) + часть заголовков, отвечающая за контрольные суммы, 99,9% одинаковы абсолютно для всех файлов кэша ;)
2) нет, не переразбиваются. Все кусочки файла (кроме последнего) имеют размер ровно 8кб. Именно за счет этого и можно организовать р2р сеть с файлами кэша в качестве основы.
3) нет, КС файлов не изменяются, а почему - см. п.2 :) + часть заголовков, отвечающая за контрольные суммы, 99,9% одинаковы абсолютно для всех файлов кэша ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
andreil
Отлично, как кстати продвигаются твои разработки по поводу p2p?
Сделай для либы возможность как-нибудь заполнять файл кусочками, имея все хедеры с хешами и сами кусочки, при этом лучше чтобы не все кусочки сразу были необходимы (постепенно, напрмер появился кусочек - запихали в кеш файл). Вообщем, для p2p это будет полезно.
Отлично, как кстати продвигаются твои разработки по поводу p2p?
Сделай для либы возможность как-нибудь заполнять файл кусочками, имея все хедеры с хешами и сами кусочки, при этом лучше чтобы не все кусочки сразу были необходимы (постепенно, напрмер появился кусочек - запихали в кеш файл). Вообщем, для p2p это будет полезно.
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
MOZGIII
1) пока не напишу ВСЮ работу с кэшем, за р2р браться не собираюсь ;)
2) а в чем вопрос? Еще в прошлой версии в классе кэша были методы, открывающие файл на чтение как файловый поток + сейчас это сделано вообще отлично:
Причем все работает отлично ;) К началу следующей недели думаю дописать нормальную функцию создания обновлений (без программных "затычек").
1) пока не напишу ВСЮ работу с кэшем, за р2р браться не собираюсь ;)
2) а в чем вопрос? Еще в прошлой версии в классе кэша были методы, открывающие файл на чтение как файловый поток + сейчас это сделано вообще отлично:
Код: Выделить всё
TGCFFile = class (TObject)
private
..............
private
..............
private
..............
public
..............
// работа с файловыми потоками
function OpenFile(FileName: string; Access: byte; CommonPath: string = ''): TStream; overload;
function OpenFile(Item: integer; Access: byte; CommonPath: string = ''): TStream; overload;
property StreamMethods: TStreamMethods read fStreamMethods;
............
end;
TStream = class(TObject)
protected
.........
protected
.........
public
Data: TStreamData;
constructor CreateFileStream(const FileName: string; Mode: ulong);
constructor CreateMemoryStream();
constructor CreateStreamOnStream(Procs: pStreamMethods);
function Read(var Buffer; const Count: TStrmSize): TStrmSize;
function Seek(MoveTo: TStrmMove; MoveMethod: TMoveMethod): TStrmSize;
function Write(var Buffer; Count: TStrmSize): TStrmSize;
property Size: TStrmSize read GetSize write SetSize;
property Position: TStrmSize read GetPosition write SetPosition;
property Memory: Pointer read fMemory;
{* Only for memory stream. }
property Handle: THandle read GetFileStreamHandle;
{* Only for file stream. It is possible to check that Handle <>
INVALID_HANDLE_VALUE to ensure that file stream is created OK. }
property Methods: PStreamMethods read fPMethods;
//property Data: TStreamData read fData write fData;
property Capacity: TStrmSize read GetCapacity write SetCapacity;
end;
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
Вот и прошел творческий застой, связанный с активным выполнением лаб по учебе %-)
Если допишу процедуру, пересоздающую таблицу размещения секторов (с сохранением структуры, если уже была создана), то функция создания апдейтов будет готова, а вслед за ней - и применяющая апдейты.
PS: Скорость работы хоть и высока, но буду оптимизировать еще больше. На данный момент полностью отказался от использования почти всех библиотек (кроме системных), так что можно будет говорить и о кроссплатформенном приложении.
PPS: На данный момент библиотека работает только с GCF/NCF-файлами и имеет размер 110Кб (увеличится до 130-200) после написания всех функций для них и до 400Кб в релизе :crazy:
PPPS: Скоро будет закрытый тест для выявления самых сильных багов (от коих всячески пытаюсь избавиться, но без которых нет ни одной программы :( ), а следом - и открытый с помощью куска SteamLite - менеджера кэша.
Если допишу процедуру, пересоздающую таблицу размещения секторов (с сохранением структуры, если уже была создана), то функция создания апдейтов будет готова, а вслед за ней - и применяющая апдейты.
PS: Скорость работы хоть и высока, но буду оптимизировать еще больше. На данный момент полностью отказался от использования почти всех библиотек (кроме системных), так что можно будет говорить и о кроссплатформенном приложении.
PPS: На данный момент библиотека работает только с GCF/NCF-файлами и имеет размер 110Кб (увеличится до 130-200) после написания всех функций для них и до 400Кб в релизе :crazy:
PPPS: Скоро будет закрытый тест для выявления самых сильных багов (от коих всячески пытаюсь избавиться, но без которых нет ни одной программы :( ), а следом - и открытый с помощью куска SteamLite - менеджера кэша.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
bugme
Пока вроде на 100% совместимо. Если бы не бился над совместимостью, а сделал бы свой формат, было бы проще ;)
Пока вроде на 100% совместимо. Если бы не бился над совместимостью, а сделал бы свой формат, было бы проще ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
Итак, есть прогресс - вроде как закончил с простейшим заполнением таблицы секторов (один файл - один блок).
Сейчас перейду на более сложный уровень - работу со сложными блоками (по несколько блоков на файл; получается после дешифровки файла и после неравномерной во времени закачки). Вот здесь и начнется свистопляска - тут будет производится оптимизация блоков для упрощения последующей работы с ними (в плане быстродействия), а так же для упрощения структуры файла.
PS: Работы тут предстоит много, так что могу обрадовать только одним - создание патчей уже работает, так что прошу желающих связаться со мной по ICQ для проведения тестирования (у меня самого файлов сейчас почти нет - забыл переписать со стационарника дома :( ).
Сейчас перейду на более сложный уровень - работу со сложными блоками (по несколько блоков на файл; получается после дешифровки файла и после неравномерной во времени закачки). Вот здесь и начнется свистопляска - тут будет производится оптимизация блоков для упрощения последующей работы с ними (в плане быстродействия), а так же для упрощения структуры файла.
PS: Работы тут предстоит много, так что могу обрадовать только одним - создание патчей уже работает, так что прошу желающих связаться со мной по ICQ для проведения тестирования (у меня самого файлов сейчас почти нет - забыл переписать со стационарника дома :( ).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
Давно уже не отписывался
На данный момент занят восстановлением папки с кэшэм по причине ее полного удаления (полетела мать, решили поменять и винты. При переносе данных были скопированы не все данные, а по старому диску прошлись полным форматом - сказваалось 2-х суточное бдение за компом :( ).
PS: Конкретно сейчас переписываю данную либу (+ модуль для работы с сетью) на C++ для дальнейшего использования в своих проектах. Delphi-версия этих библиотек будет работать в виде заголовочного файла для Cишной библиотеки. А в структуре ничего сильно не измениться - стараюсь переписать все, как есть, ибо работает на отлично ;)
PPS: Заметил одну утечку памяти при написании... Долго ловил... Потом додумался посчитать. Отлавливал данным кодом:
В итоге при небольшом закомментированном участке (который буду еще оптимизировать для скорости) была замечена скорость чтения данных - примерно 300Мб/с :shock: Но это - только чтение заголовков одного файла. Утечка при этом была заметна как ступенька на графике использования памяти программой, вот я и запаниковал... При подсчетах (было выполнено 10000 циклов загрузки) оказалось, что утечка составила всего-то ~23 байта Вполне хороший результат.
PPPS: Файл "counter-strike.gcf" загрузился/выгрузился 10000 раз примерно за 1 минуту
На данный момент занят восстановлением папки с кэшэм по причине ее полного удаления (полетела мать, решили поменять и винты. При переносе данных были скопированы не все данные, а по старому диску прошлись полным форматом - сказваалось 2-х суточное бдение за компом :( ).
PS: Конкретно сейчас переписываю данную либу (+ модуль для работы с сетью) на C++ для дальнейшего использования в своих проектах. Delphi-версия этих библиотек будет работать в виде заголовочного файла для Cишной библиотеки. А в структуре ничего сильно не измениться - стараюсь переписать все, как есть, ибо работает на отлично ;)
PPS: Заметил одну утечку памяти при написании... Долго ловил... Потом додумался посчитать. Отлавливал данным кодом:
Код: Выделить всё
int i = 0;
while (true)
{
GCFFile *GCF = new GCFFile();
GCF->LoadFromFile("f:\\games\\Steam\\steamapps\\counter-strike.gcf");
delete GCF;
printf("%i\n", i);
i++;
}
PPPS: Файл "counter-strike.gcf" загрузился/выгрузился 10000 раз примерно за 1 минуту
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
Итак, поддержка GCF/NCF-кэша уже переписана на С++ prankster Сейчас перепишу остальные типы и буду тестить на валидность (сейчас просто нет файлов для проверки правильности создания архивов/апдейтов + GCFScape почему-то не запускается :( )
PS: Ждите новостей к выходным, может будет небольшой тест для апдейтов ;)
PS: Ждите новостей к выходным, может будет небольшой тест для апдейтов ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- impulse666
- Полковник
- Сообщения: 7405
- Зарегистрирован: 08.12.2005
- Откуда: Atman
- Благодарил (а): 2340 раз
- Поблагодарили: 590 раз
andreil
А мы уж потеряли надежду, да и я за три года разработки, забыл что к чему %)
Создание архивов с нуля позволит нам, например, делать пиратки в ГСФ файлах собственной упаковки, для исключения ненужных файлов, т.е. лишнего веса. Так?
Хм, тогда вот еще вопрос, патчинг существующих ГСФ архивов будет выглядить примерно так:
У пользователя ГСФ пиратка, он берет набор файлов (типичный патч для распака) и с помощью USE замещает уже существующие файлы в имеющемся у него Кеше (при том что размеры не совпадают), все верно?
А мы уж потеряли надежду, да и я за три года разработки, забыл что к чему %)
Создание архивов с нуля позволит нам, например, делать пиратки в ГСФ файлах собственной упаковки, для исключения ненужных файлов, т.е. лишнего веса. Так?
Хм, тогда вот еще вопрос, патчинг существующих ГСФ архивов будет выглядить примерно так:
У пользователя ГСФ пиратка, он берет набор файлов (типичный патч для распака) и с помощью USE замещает уже существующие файлы в имеющемся у него Кеше (при том что размеры не совпадают), все верно?
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
impulse666
Если я тебя правильно понял, ты хочешь удалять ненужные файлы из некоторых GCF для определённых игр, чтобы эти файлы не занимали место в GCF почём зря. Это можно сделать хоть сейчас. Не то, чтобы я был против разработок andreil, я как бы За конкуренцию, но у steamCooker уже есть необходимая библиотека для этого.
bugme как-то обращался ко мне за тем, чтобы сделать фичу обновления для распаков в cfUpdater. Я поделился своей идеей включать вместе с распаком .archive-файл и по нему уже отслеживать какие файлы нужно обновить, а какие оставить в покое. То есть получается, по сути, этакая NCF-игра.
Если я тебя правильно понял, ты хочешь удалять ненужные файлы из некоторых GCF для определённых игр, чтобы эти файлы не занимали место в GCF почём зря. Это можно сделать хоть сейчас. Не то, чтобы я был против разработок andreil, я как бы За конкуренцию, но у steamCooker уже есть необходимая библиотека для этого.
bugme как-то обращался ко мне за тем, чтобы сделать фичу обновления для распаков в cfUpdater. Я поделился своей идеей включать вместе с распаком .archive-файл и по нему уже отслеживать какие файлы нужно обновить, а какие оставить в покое. То есть получается, по сути, этакая NCF-игра.
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!