|
Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером |
|
Опции темы | Поиск в этой теме | Опции просмотра |
15.06.2012, 14:44 | #1 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Инициализация входа в мир
Разбираю сервер наглядно и как что устроено, используя Qt написал свой логон сервер, который работает как часы, получило в несколько раз меньше кода. Сейчас мир разбираю. Сетевой код опять же в разы меньше чем в мангосе, но функционал тот же, благодаря сигналам/слотам, не пришлось стряпать очереди пакетов. Но речь не об этом.
Я дошел до окна создания персонажа, создание и удаление и тд, но не получается войти в мир. Жмем вход, далее приходит CMSG_PLAYER_LOGIN на что отвечаю SMSG_LOGIN_VERIFY_WORLD и SMSG_ACCOUNT_DATA_TIMES. (!) что необходимо послать еще, чтобы пошла инициализация мира? Мне приходит ответ из 522 и 523 опкодов, но в мангосе я смотрю они просто логируются и не отсылают ответов. Все это происходит на 1.12.
__________________
SpellWork Qt4 |
15.06.2012, 15:01 | #2 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Апдейт пакет должен быть, без него вроде не войдешь
|
15.06.2012, 20:19 | #3 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
На сколько мне известно апдейт пакеты нужны для взаимодействия с сервером. Мне же хотябы тупой сандбокс, загрузиться в голый мир. Или первый апдейт пакет нужен обязательно?
__________________
SpellWork Qt4 |
16.06.2012, 00:03 | #4 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
16.06.2012, 08:39 | #5 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Теперь постоянно вылетает с ошибкой в конце загрузки Уже прогресс)
http://my.jetscreenshot.com/4271/20120616-gsgq-224kb
__________________
SpellWork Qt4 |
18.06.2012, 10:35 | #6 |
Ученый
|
Вопрос не по теме, если писать на Visual Basic сервер, то какие перспективы в дальнейшем "в плане развития" могут быть? реально ли написать полноценный сервер на этом языке?, и какие могут быть проблемы "глобального" уровня? и подходит ли данный язык программирования под такую сложную задачу?.
|
18.06.2012, 10:49 | #7 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
2. реально. довольно сложно (ну не предназначен VB для этого. впрочем для чего он предназначен никто не знает), но можно. топором, говорят, тоже можно ноутбуки чинить. 3. отсутствие нужных билиотек низкого уровня. 4. конечно нет. его вообще не стоит называть "языком программирования", его скриптовым-то языком можно назвать с большой натяжкой. в ворде макросы писать - самое то. |
|
18.06.2012, 11:21 | #8 | |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Цитата:
__________________
SpellWork Qt4 |
|
18.06.2012, 16:41 | #9 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
Но писать серверы на (V)B... пожалуйста, не надо. |
|
18.06.2012, 17:30 | #10 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
В общем собрал апдейт пакет аналогично тому что мангос формирует, точная копия. Однако вылетает 132. Вначале думал компрессия, но нет. Отсылаю на мангосе без компрессии - все нормально. У меня же 132.
Что еще необходимо для входа в мир? Или в таком случае 132 бы не вылетала?
__________________
SpellWork Qt4 |
18.06.2012, 18:08 | #11 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
может что-то все таки не так собирается?
|
18.06.2012, 18:09 | #12 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Раз клиент крашится, значит пакет кривой... Судя по Вашему скрину крашится как раз при обработке апдейт пакета (ObjectMgrClient.cpp).
|
18.06.2012, 18:20 | #13 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Скрин уже не актуален, вот что сейчас http://my.jetscreenshot.com/4271/20120618-y5ux-252kb
Добавлено через 7 минут Разные только координаты персонажа. 2-4 строчки. Мой Мангос
__________________
SpellWork Qt4 Последний раз редактировалось Sid; 18.06.2012 в 18:22. |
18.06.2012, 18:25 | #14 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Возможно как-то связано с туториалами...
|
18.06.2012, 18:30 | #15 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Кстати да. Апдейт шлется при добавлении игркоа на карту. Перед ним еще несколько ключевых пакетов в функции SendInitialPacketsBeforeAddToMap()
Все верно) Зайти получилось Спасибо за подсказку ТОМ. Хм, еще такая проблема, перестали читаться пакеты. Точней заголовки. Т.е если даже хандлеров нет, то заголовок я все равно читаю и смотрю что за опкод и каков размер пакета. А сейчас тупо все в молоко уходят что пакет не полный. Декриптор пакетов тот что в мангосе, далее механизм идентичен - ну если я смог добраться до игрового мира, значит оно работало. А после того как в мир зашел, все заголовки перестали читаться. Пример как до входа в мир А теперь после Хм. Прикол. Иногда чтение проходит. И далее если медленно двигаюсь то тоже. Не успевает?)) Похоже у меня переполнение в глобальном евентовом цикле.
__________________
SpellWork Qt4 Последний раз редактировалось NeatElves; 19.06.2012 в 10:53. |
18.06.2012, 19:07 | #16 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
Добавлено через 1 минуту я ничего не путаю. это относится ко всем разновидностям VB, различать сорта д...ма между собой как-то не учился. |
|
Пользователь сказал cпасибо: | Ranger (28.06.2012) |
18.06.2012, 19:11 | #17 | |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Цитата:
Вся соль в том, что сигнал readyRead() вызывается на каждый пакет. Проблема в том что данные в нем некорректные становятся. Но если сигнал вызывается значит пакет готов к чтению...
__________________
SpellWork Qt4 Последний раз редактировалось NeatElves; 19.06.2012 в 10:51. |
|
19.06.2012, 07:10 | #18 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
ну код вы не показываете, можно только предположить что этой читалке скармливается все время один и тот же указатель на место для данных. и данные друг друга затирают, если идут слишком быстро. qt сам по себе просто стррррашный тормоз...
|
19.06.2012, 07:43 | #19 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
__________________
SpellWork Qt4 |
19.06.2012, 08:42 | #20 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
_buffer.clear();
_buffer = readAll(); потенциальный косяк...данные из буфера не надо удалять. Только после получения всего пакета. Если пакет приходит не полностью...никогда и не получим. |
19.06.2012, 09:05 | #21 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Нет, я понимаю что он может не полностью прийти. Однако как тогда определять его конец? Да и bytesAvailable() < 6, в теории заголовок то дойти должен чтобы уже определить каков реальный размер? Хотя если он не дошел полностью то и декриптор не сработает верно.
Все, я понял в чем моя ошибка. TCP/IP же посылает данные потоково, нет гарантий что пакет придет именно в таком виде в котором был отправлен. Приду домой, попробую вариант такой 1) Чтение заголовка 2) Ожидание тела пакета по размеру из заголовка 3) Чтение и обработка тела 4) Срез данных из буффера Ну и это все в цикле.
__________________
SpellWork Qt4 Последний раз редактировалось NeatElves; 19.06.2012 в 10:51. |
19.06.2012, 09:41 | #22 | |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Цитата:
пример: message.markReaderIndex(); - оставляем метку с начала чтения и message.resetReaderIndex(); - возврат к метке если недостаточно данных для чтения. frame.writeBytes(message.readBytes(size)); - если все гуд - читаем (и сразу удаляем нужное кол-во байт) зы у меня работает... |
|
20.06.2012, 17:59 | #23 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
В дебаге нормально все читается и обмен пакетами прозодит, а в релизе при входе в мир 132 вылетает. Есть идеи?
Капец, 2 лишних байта в packGuid. =\ Как так
__________________
SpellWork Qt4 Последний раз редактировалось Sid; 20.06.2012 в 18:25. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменение новостей в окне входа в игру | monax | WWW | 54 | 03.01.2011 19:11 |