Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Tools (http://mangos.ytdb.ru/forumdisplay.php?f=22)
-   -   [DEV]Java emu (http://mangos.ytdb.ru/showthread.php?t=4899)

Blacksmither 27.07.2011 10:22

Цитата:

Сообщение от Йоха (Сообщение 24292)
Пока еще не поздно подумайте над архитектурой классов для доступа к БД

Над контейнерами и кешированием подумайте. :)

RomanRom2 27.07.2011 10:27

а чо тут думать, все придумано для нас. для доступа к базе в джаве используют entity или модный нынче hibernate.

dbc - в базу данных. карты - в бинарный формат, но можно тоже в базу (сам у себя пока еще не решил. пока сделан бинарный формат, смысла в sql загонять не увидел.).

что имеется ввиду под контейнерами и кешированием?

27.07.2011 10:32

Цитата:

Сообщение от Blacksmither (Сообщение 24293)
Над контейнерами и кешированием подумайте. :)

http://ehcache.org/
только кешировать пока нечего =)))

RomanRom2 27.07.2011 11:25

ну не знаю... может и имеет смысл кешировать шаблоны объектов (респонсы), остальное - постоянно изменяющиеся данные. только чего их кешировать, загрузил их в память в виде справочников и все.

27.07.2011 14:46

to madlove:
вижу мучения автора...возникает вопрос, вы смотрели исходники других мморпг-серверов сделанных на джава? Возможно стоит поглубже покопаться в них? Ведь не сотни человек занимаются разработкой, постоянно рефакторить код - ждать работы еще пяток лет.
Возможно стоит пере использовать архитектуру уже рабочего сервера. Не говорю - сделать из линейдж( как пример ) - вов, но все же базовая архитектура ( нио, конфигурация, пулы) может быть, если и не использована, то неплохо изучена на основе других.

mAdloVe 27.07.2011 15:53

to Minimajack:
Ищу новый тут развития.

Йоха 27.07.2011 16:07

Цитата:

Сообщение от mAdloVe (Сообщение 24304)
to Minimajack:
Ищу новый тут развития.

а получается транслейт мангоса на яву =)))

27.07.2011 16:31

2 mAdloVe :handleLogonProof()
После вычислений не сохраняете SessionKey ( K ) в базу.

mAdloVe 27.07.2011 16:47

Цитата:

Сообщение от Minimajack (Сообщение 24306)
2 mAdloVe :handleLogonProof()
После вычислений не сохраняете SessionKey ( K ) в базу.

Знаю... также не сохраняется соль "s" и верификатор "v". Не хватает рук.

RomanRom2 27.07.2011 17:06

а их зачем сохранять?

27.07.2011 17:10

кстати, если будет время - реализуйте все же ThreadPool ...уверен винда в текущей реализации больше 200 клиентов не потянет...уж слишком жирно создавать на каждого клиента по потоку...
а лучше выкинуть половину и реализовать на http://www.jboss.org/netty

RomanRom2 27.07.2011 17:41

в виндах это называется IOCP

Цитата:

Сообщение от Minimajack (Сообщение 24306)
2 mAdloVe :handleLogonProof()
После вычислений не сохраняете SessionKey ( K ) в базу.

тоже не сохраняю ключ в базу. вообще это неправильный дизайн. я его передаю по дополнительному шифрованному служебному каналу AS-CS =)

27.07.2011 17:54

Цитата:

Сообщение от RomanRom2 (Сообщение 24310)
в виндах это называется IOCP
тоже не сохраняю ключ в базу. вообще это неправильный дизайн. я его передаю по дополнительному шифрованному служебному каналу AS-CS =)

оставлено для совместимости с мангосом.
Подскажите пожалуйста...клиент серверу отдает полностью пакеты, либо может на кусочки порубать или слить несколько в один?
зы кстати тоже подумал о сообщении между логин и гейм серверами...

RomanRom2 27.07.2011 18:07

да других вариантов и не дано. логон сервер может быть где угодно в интернете. например в москве. и к нему подключены реалмы из других городов, питер там, казань, новосибирск, красноярск... и чо? из сибири в москву за ключем в базу лазить на 3306 порт? =)

нее, это неправильно. я изначально спроектировал (и реализовал) полностью динамическую структуру всего игрового сервера (который включает в себя авторизационный сервер (биллинг) и неограниченное число реалмов и батлграундов). все компоненты автоматически регистрируется на своих "аплинках". нуу... я писал об этом на сайте.

Dereka 27.07.2011 19:34

Цитата:

Сообщение от RomanRom2 (Сообщение 24294)
а чо тут думать, все придумано для нас. для доступа к базе в джаве используют entity или модный нынче hibernate.

dbc - в базу данных. карты - в бинарный формат, но можно тоже в базу (сам у себя пока еще не решил. пока сделан бинарный формат, смысла в sql загонять не увидел.).

что имеется ввиду под контейнерами и кешированием?

hibernate, почему он вдруг стал модным?
ORM конечно повышает производительность разработки, но использовать его нужно осторожно.
Всё конечно зависит от кривизны, но jdbc всегда быстрее чем ORMы.
В любом случае если проект для обучения то hibernate нужно попробовать:)
Я юзал плагин в еклипсе, он показывал какой в Итоге запрос уходит в БД от ORM, полезная штука оказалсь)

RomanRom2 27.07.2011 21:22

да хрен его знает почему...
мне часто приходится сталкиваться с тестовыми заданиями для нанимаемых на работу джава программистов. ну типа:

1. Реализация клиент серверного приложения: N-уровневое меню
Для реализации использовать Hibernate JPA, Postgresql.
Программа должна состоять из серверной и клиентской частей.
...

2. Реализация приложения Чат

Необходимо реализовать чат со структурой:
 страница авторизации;
 страница регистрации;
 основная страница;
 личный кабинет;

...

Общие требования:
 кросс браузерность IE 6-9, Firefox, Chrome, Opera
 все данные хранятся в БД (Postgres)
работа с базой через Hibernate
 наличие текстового логирования (log4j)

Dereka 28.07.2011 04:11

да потому что бизнес, побыстрее сделать продукт чтобы начать его продавать, а потом уже думать об оптимизации)


Minimajack советую почитать что такое maven
очень полезная штука, если проект настроишь, мне помог в своё время с дипломом,
сам всё необходимое скачает и настроеть, главное pom.xml самому настроить,
да и к тому же можно на нём генерить проекты для еклипса и для IDEA :tongue: не помню для чего ещё

28.07.2011 07:30

Цитата:

Сообщение от Dereka (Сообщение 24322)
Minimajack советую почитать что такое maven
очень полезная штука, если проект настроишь, мне помог в своё время с дипломом,
сам всё необходимое скачает и настроеть, главное pom.xml самому настроить,
да и к тому же можно на нём генерить проекты для еклипса и для IDEA :tongue: не помню для чего ещё

установлен =))) как плагин к эклипсу. Пробовал и проекты генерировать из гита и из свн...полет нормальный. Возможно стоит попробовать, хотя ант намного попроще :pardon:

Dereka 28.07.2011 13:33

Цитата:

Сообщение от Minimajack (Сообщение 24323)
установлен =))) как плагин к эклипсу. Пробовал и проекты генерировать из гита и из свн...полет нормальный. Возможно стоит попробовать, хотя ант намного попроще :pardon:

ну не знаю, как по мне так mvn в разы проще и удобнее чем ант:)
на вкус и цвет...:yes3:

29.07.2011 14:39

уперся в буффер...в мангосе под него выделяется 65536 байт, если его не хватает выделяется до 8 мегабайт 128*256*256 (в зависимости от нужд).
как вариант использовать динамический буфер.
Возможно у кого то есть статистика среднего размера пакета, что бы память поберечь; или забить и выделять 65 кб динамического буфера, а там как карта ляжет?

Йоха 29.07.2011 15:18

Цитата:

Сообщение от Minimajack (Сообщение 24358)
уперся в буффер...в мангосе под него выделяется 65536 байт, если его не хватает выделяется до 8 мегабайт 128*256*256 (в зависимости от нужд).
как вариант использовать динамический буфер.
Возможно у кого то есть статистика среднего размера пакета, что бы память поберечь; или забить и выделять 65 кб динамического буфера, а там как карта ляжет?

Я думаю забить и выделить сразу 65к, а если вдруг понадобится больше, то увеличивать на лету.
ИМХО 65к это не тот случай который сильно сбережет память ;-)

RomanRom2 29.07.2011 15:22

такого размера пакеты поперли только тогда, когда ввели ачивки. тогда же и появилась фишка с третим байтом в поле "длина". до того момента пакеты не превышали 16кб. и те - были за редким исключением. средний размер пакета варьировался от 700 байт до 3.5кб.

у себя выделяю 16кб под входящий и 64кб под исходящий буферы.

29.07.2011 19:46

выставил 64 КБ...а там посмотрим =)
Кто нить работал с google-guice ?

В конструкторе Фабрики-пакетов инициализировать все пакеты вручную - бредово, нужен какой то механизм, вариант описания пакетов либо в ХМЛ, либо в БД, либо хз в чем. Мож чё кто подскажет?
зы моск пухнет =)))

RomanRom2 29.07.2011 20:28

так чо сказать то хотел? =)

29.07.2011 21:29

Цитата:

Сообщение от RomanRom2 (Сообщение 24368)
так чо сказать то хотел? =)

как написать фабрику объектов? желательно через список объектов в хмл.
есть
Код:

<opcodes>
 <opcodelist build="xxxx" path="org.wowemu.realm.network.packet">
  <opcode id="0x00" class = "R_CMD_AUTH" direction = "DOWNSTREAM" />
  <opcode id="0x01" class = "R_CMD_PROOF" direction = "DOWNSTREAM" />
 </opcodelist>
......
</opcodes>

надо получить - список объектов или классов...
зы пора отдохнуть =)))

31.07.2011 10:49

получилось =)))

один черт кому нить пригодится...
хоть не надо прописывать и инжектить все опкоды вручную...лафа

01.08.2011 11:15

Плагин http://sourceforge.net/projects/eclipsecopyrigh/ решает проблемы с добавлением и обновлением копирайтов

01.08.2011 16:36

login.7z (4.06MB)
тестовый вариант, в компилированном виде, т.к. репозитария нет =)))
пока - максимальная совместимость с мангосом, т.е. все ключи в бд.
Необходимо доделать пару опкодов( реконнект ) и прикрепить банлист. А то в связи с использованием guice весь код перелопатил, пришлось пока вырубить банлист и сервис обновления( реалмлист не обновляется ).
Дома в линуксе с клиентом проверял, на работе клиента нет, да и линукса тоже :sorry:, поэтому башевский вариант скрипта отсутствует.
зы может кому интересно будет
ззы через денек-два файл снесу, а то 4 метра держать на форуме жирно ( файлбим и прочие зарублены на проксе )



----------------------
архив перезалит

03.08.2011 10:06

Цитата:

Сообщение от RomanRom2 (Сообщение 24312)
да других вариантов и не дано. логон сервер может быть где угодно в интернете. например в москве. и к нему подключены реалмы из других городов, питер там, казань, новосибирск, красноярск... и чо? из сибири в москву за ключем в базу лазить на 3306 порт? =)

нее, это неправильно. я изначально спроектировал (и реализовал) полностью динамическую структуру всего игрового сервера (который включает в себя авторизационный сервер (биллинг) и неограниченное число реалмов и батлграундов). все компоненты автоматически регистрируется на своих "аплинках".

действительно с ключем в бд совсем не фонтан получается. Лишние запросы к БД, лишние операции по конвертации из строки ... Единственный плюс - при перезапуске логин-сервера может дальше работать как ничего не произошло...то есть при реконнекте(смене реалма) пользователи подхватятся.
Если на них забить ( ну не часто же происходит перезапуск ) , да и забить на realmlist в БД, то никакого обновления realmlist-а, банлиста из БД тащить не надо будет, открываем еще сокет для реалмов, и спокойненько принимаем с него команды для обновление банлиста и популяции, запроса ключей.
Возник вопрос по ходу дела...connection Timeout вообще присутствует как таковой в логин сервере? И если да, то чему равно значение ? :pardon:

ззы архив в предыдущем сообщении устарел, реализованы 10 основных опкодов для логин сервера, и для совместимости с мангосом добавлен сервис обновления реалмлистов и банлистов...

RomanRom2 03.08.2011 10:22

я чото не очень теперь понимаю, кто именно пишет JavaEmu =)

03.08.2011 10:28

Цитата:

Сообщение от RomanRom2 (Сообщение 24487)
я чото не очень теперь понимаю, кто именно пишет JavaEmu =)

я тоже хочу подучиться java, вот и пишу по тихому вечерами =)))
mAdloVe - свое, я - свое. Смысл один.

Все же ввел понятие совместимости в конфиг
Код:

network.compatible = MANGOS
зачем напрягать что не надо...в итоге пока 2 режима совместимости:
  • MANGOS работаем как мангос - обновляем вордлист из БД, не используем банлист, не открываем дополнительных портов
  • NONE работаем по новому =)))

03.08.2011 17:05

2mAdloVe
у org.jboss.netty.buffer.ChannelBuffer
есть не только readByte()
есть и readShort(), readInt(), readLong() etc...сам же выбираешь ByteOrder.LITTLE_ENDIAN ...зачем парится с байтами и сдвигами?

mAdloVe 03.08.2011 17:21

Цитата:

Сообщение от Minimajack (Сообщение 24496)
2mAdloVe
у org.jboss.netty.buffer.ChannelBuffer
есть не только readByte()
есть и readShort(), readInt(), readLong() etc...сам же выбираешь ByteOrder.LITTLE_ENDIAN ...зачем парится с байтами и сдвигами?

Осталось от прошлой реализации. Подправлю

03.08.2011 20:47


04.08.2011 07:41

текущая версия логин сервера, делается под 3.3.5
не реализовывал только работу с патчами. Не вижу смысла.
http://filebeam.com/fb069dfc963d144740eb8188c2faf8c0

под линуксом запускать
Код:

java -Xms8m -Xmx32m -ea -cp ./libs/*:wowemu_login.jar org.wowemu.login.loginserver

lina 04.08.2011 16:29

Цитата:

Сообщение от Minimajack (Сообщение 24507)
текущая версия логин сервера, делается под 3.3.5
не реализовывал только работу с патчами. Не вижу смысла.
http://filebeam.com/fb069dfc963d144740eb8188c2faf8c0

под линуксом запускать
Код:

java -Xms8m -Xmx32m -ea -cp ./libs/*:wowemu_login.jar org.wowemu.login.loginserver

может написать бат файл для винды и sh для линукса ?)

04.08.2011 16:46

Цитата:

Сообщение от lina (Сообщение 24515)
может написать бат файл для винды и sh для линукса ?)

можно скачать и увидеть, что батник в архиве...
написать нормальный скрипт под линь у меня нет времени, так что дал команду, думаю у кого линукс знают как применить.

07.08.2011 13:03

что то я застрял...вроде все нормально, или глаз уже замылен
в общем, делаю реалм...
коннект - отсылаю SMSG_AUTH_CHALLENGE
приходит CMSG_AUTH_SESSION...проверяю, все гуд, sha1 digest совпадает с заданым клиентом...
инициализирую криптосистему сессионным ключом
отсылаю SMSG_AUTH_RESPONSE
отсылаю SMSG_ADDON_INFO
а в ответ тишина, только через секунд 10 клиент шлет пакет( нормально не расшифровывается) и разрывает соединение.
Чувствую ошибка в кодировании(декодировании) заголовка...
в HmacSHA1 ну не может быть ошибки...стандартная 3 строчки кода.
в SARC4 использовал реализацию от JCE...не прокатило, на просторах гугла нарыл частную реализацию...заголовки как и положено уходят кодированными в 4 байта ( первые маленькие)...но клиент молчит :sorry:
Crypt

SARC4

может кто увидит ошибку? а то меня уже колбасит =)))

07.08.2011 17:58

всем сорри...код правильный, это я неправильный =)
перепутал клиентский и серверные SARC4 =)))

08.08.2011 12:41

Ну вот...реалм-сервер дошел до стадии когда необходимы ключи сессий клиентов.
т.к. ключи будут передаваться( планируется ) по дополнительному каналу между логин и реалм серверами встает вопрос о защите этого канала. Кто что использует? Городить свои грабли или воспользоваться уже существующими ( в сис-ме вов ) алгоритмами? Мне конечно быстрее SARC4 втулить и кодировать содержимое пакета целиком.


Текущее время: 09:03. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS