Есть проблема в незнании протокола.
А именно:
Когда применяется zlib?
Есть-ли какой-то "простой" способ отделить друг от друга пакеты? Кроме как "тупо парсить" динамические пакеты и считать байты для фиксированных.
Список вопросов будет пополняться. Собственно надо это затем, чтоб построить "прослойку" между клиентом и сервером... Дабы можно было вклиниться своими грязными руками в протокол и показывать на клиенте то, чего не передал сервер. Надо это для пары интересных задумок, которые как обычно "перевернут мир УО с ног на голову и привлекут массы игроков"... Что выйдет - не знаю. Надеюсь не пшик.
И ещё, у кого-нибудь есть описание формата файлов от KR клиента?
Добавлено (14.01.2009, 11:17)
---------------------------------------------
Ну что-ж... Из того с чем я разобрался:
- zLib нужен для 2D клиента только для того чтобы гампы "раскрывать", то есть сам протокол им не жмется.
- Жмется протокол входящий с сервера. Жмется алгоритмом, основанном на алгоритме Хаффмана с жестко прописанной таблицей. Собственно сжатие можно посмотреть в RunUO Core/Network/Compression.cs декомпрессии там нет, но ее довольно легко написать. Если в одном пакете TCP приходят несколько пакетов UO, то эти пакеты byte-boundary. То есть после флага завершения пакета в алгоритме Хаффмана надо пропустить текущий байт, если он не полностью занят.
По поводу формата файлов, описание есть в и-нете. Сейчас под рукой нету, но можно спокойно найти по запросу interface.uop.
Вроде пока что все.