14.07.2011, 13:53 | #1 |
Новичок
Регистрация: 24.03.2010
Сообщений: 23
Сказал(а) спасибо: 7
Поблагодарили 5 раз(а) в 4 сообщениях
|
[DEV] StormCore (Java WoW Emu)
Вот, решил начать писать emu пресловутой игры на Java, так как данная игра и язык представляют для меня большой интерес. Хочется совместить приятное с полезным и углублять свои знания в Java. Может кого-нибудь заинтересует моя задумка...
На данный момент удалось реализовать аутентификацию с реалм сервером. Выкладываю исходники своего творения. Прошу строго не судить. [HIDE="Устарело"] Проект переехал с http://github.com/ШтормКоре в http://github.com/JMaNGOS git clone git://github.com/JMaNGOS/storm.git В данный момент проект storm заморожен. UPDATE: storm закрыт полностью все наработки перебрались в JMaNGOS [/HIDE] В свою очередь все наработки были перенесены в новый проект "JMaNGOS". И сейчас все работы ведутся над "JMaNGOS". Проект http://github.com/JMaNGOS git clone git://github.com/JMaNGOS/JMaNGOS.git Последний раз редактировалось mAdloVe; 14.09.2013 в 18:42. Причина: возвращение проекта |
27.07.2011, 10:22 | #41 |
Kobold Dev
Регистрация: 29.07.2010
Сообщений: 21
Сказал(а) спасибо: 5
Поблагодарили 2 раз(а) в 2 сообщениях
|
Над контейнерами и кешированием подумайте.
__________________
World Database Development Group |
27.07.2011, 10:27 | #42 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
а чо тут думать, все придумано для нас. для доступа к базе в джаве используют entity или модный нынче hibernate.
dbc - в базу данных. карты - в бинарный формат, но можно тоже в базу (сам у себя пока еще не решил. пока сделан бинарный формат, смысла в sql загонять не увидел.). что имеется ввиду под контейнерами и кешированием? |
27.07.2011, 10:32 | #43 |
Гость
Сообщений: n/a
|
http://ehcache.org/
только кешировать пока нечего |
27.07.2011, 11:25 | #44 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
ну не знаю... может и имеет смысл кешировать шаблоны объектов (респонсы), остальное - постоянно изменяющиеся данные. только чего их кешировать, загрузил их в память в виде справочников и все.
|
27.07.2011, 14:46 | #45 |
Гость
Сообщений: n/a
|
to madlove:
вижу мучения автора...возникает вопрос, вы смотрели исходники других мморпг-серверов сделанных на джава? Возможно стоит поглубже покопаться в них? Ведь не сотни человек занимаются разработкой, постоянно рефакторить код - ждать работы еще пяток лет. Возможно стоит пере использовать архитектуру уже рабочего сервера. Не говорю - сделать из линейдж( как пример ) - вов, но все же базовая архитектура ( нио, конфигурация, пулы) может быть, если и не использована, то неплохо изучена на основе других. |
27.07.2011, 15:53 | #46 |
Новичок
Регистрация: 24.03.2010
Сообщений: 23
Сказал(а) спасибо: 7
Поблагодарили 5 раз(а) в 4 сообщениях
|
to Minimajack:
Ищу новый тут развития. |
27.07.2011, 16:07 | #47 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
27.07.2011, 16:31 | #48 |
Гость
Сообщений: n/a
|
2 mAdloVe :handleLogonProof()
После вычислений не сохраняете SessionKey ( K ) в базу. |
27.07.2011, 16:47 | #49 |
Новичок
Регистрация: 24.03.2010
Сообщений: 23
Сказал(а) спасибо: 7
Поблагодарили 5 раз(а) в 4 сообщениях
|
|
27.07.2011, 17:06 | #50 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
а их зачем сохранять?
|
27.07.2011, 17:10 | #51 |
Гость
Сообщений: n/a
|
кстати, если будет время - реализуйте все же ThreadPool ...уверен винда в текущей реализации больше 200 клиентов не потянет...уж слишком жирно создавать на каждого клиента по потоку...
а лучше выкинуть половину и реализовать на http://www.jboss.org/netty Последний раз редактировалось Minimajack; 27.07.2011 в 17:15. |
Пользователь сказал cпасибо: | mAdloVe (27.07.2011) |
27.07.2011, 17:41 | #52 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
в виндах это называется IOCP
тоже не сохраняю ключ в базу. вообще это неправильный дизайн. я его передаю по дополнительному шифрованному служебному каналу AS-CS Последний раз редактировалось RomanRom2; 27.07.2011 в 17:46. |
27.07.2011, 17:54 | #53 | |
Гость
Сообщений: n/a
|
Цитата:
Подскажите пожалуйста...клиент серверу отдает полностью пакеты, либо может на кусочки порубать или слить несколько в один? зы кстати тоже подумал о сообщении между логин и гейм серверами... |
|
27.07.2011, 18:07 | #54 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
да других вариантов и не дано. логон сервер может быть где угодно в интернете. например в москве. и к нему подключены реалмы из других городов, питер там, казань, новосибирск, красноярск... и чо? из сибири в москву за ключем в базу лазить на 3306 порт?
нее, это неправильно. я изначально спроектировал (и реализовал) полностью динамическую структуру всего игрового сервера (который включает в себя авторизационный сервер (биллинг) и неограниченное число реалмов и батлграундов). все компоненты автоматически регистрируется на своих "аплинках". нуу... я писал об этом на сайте. |
27.07.2011, 19:34 | #55 | |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
Цитата:
ORM конечно повышает производительность разработки, но использовать его нужно осторожно. Всё конечно зависит от кривизны, но jdbc всегда быстрее чем ORMы. В любом случае если проект для обучения то hibernate нужно попробовать Я юзал плагин в еклипсе, он показывал какой в Итоге запрос уходит в БД от ORM, полезная штука оказалсь) |
|
27.07.2011, 21:22 | #56 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
да хрен его знает почему...
мне часто приходится сталкиваться с тестовыми заданиями для нанимаемых на работу джава программистов. ну типа: 1. Реализация клиент серверного приложения: N-уровневое меню Для реализации использовать Hibernate JPA, Postgresql. Программа должна состоять из серверной и клиентской частей. ... 2. Реализация приложения Чат Необходимо реализовать чат со структурой: страница авторизации; страница регистрации; основная страница; личный кабинет; ... Общие требования: кросс браузерность IE 6-9, Firefox, Chrome, Opera все данные хранятся в БД (Postgres) работа с базой через Hibernate наличие текстового логирования (log4j) |
28.07.2011, 04:11 | #57 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
да потому что бизнес, побыстрее сделать продукт чтобы начать его продавать, а потом уже думать об оптимизации)
Minimajack советую почитать что такое maven очень полезная штука, если проект настроишь, мне помог в своё время с дипломом, сам всё необходимое скачает и настроеть, главное pom.xml самому настроить, да и к тому же можно на нём генерить проекты для еклипса и для IDEA не помню для чего ещё Последний раз редактировалось Dereka; 28.07.2011 в 04:19. |
28.07.2011, 07:30 | #58 | |
Гость
Сообщений: n/a
|
Цитата:
|
|
28.07.2011, 13:33 | #59 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
|
29.07.2011, 14:39 | #60 |
Гость
Сообщений: n/a
|
уперся в буффер...в мангосе под него выделяется 65536 байт, если его не хватает выделяется до 8 мегабайт 128*256*256 (в зависимости от нужд).
как вариант использовать динамический буфер. Возможно у кого то есть статистика среднего размера пакета, что бы память поберечь; или забить и выделять 65 кб динамического буфера, а там как карта ляжет? |
29.07.2011, 15:18 | #61 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
ИМХО 65к это не тот случай который сильно сбережет память ;-) |
|
29.07.2011, 15:22 | #62 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
такого размера пакеты поперли только тогда, когда ввели ачивки. тогда же и появилась фишка с третим байтом в поле "длина". до того момента пакеты не превышали 16кб. и те - были за редким исключением. средний размер пакета варьировался от 700 байт до 3.5кб.
у себя выделяю 16кб под входящий и 64кб под исходящий буферы. |
29.07.2011, 19:46 | #63 |
Гость
Сообщений: n/a
|
|
29.07.2011, 20:28 | #64 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
так чо сказать то хотел?
|
29.07.2011, 21:29 | #65 |
Гость
Сообщений: n/a
|
как написать фабрику объектов? желательно через список объектов в хмл.
есть Код:
<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 | #66 |
Гость
Сообщений: n/a
|
|
01.08.2011, 11:15 | #67 |
Гость
Сообщений: n/a
|
Плагин http://sourceforge.net/projects/eclipsecopyrigh/ решает проблемы с добавлением и обновлением копирайтов
|
Пользователь сказал cпасибо: | mAdloVe (01.08.2011) |
01.08.2011, 16:36 | #68 |
Гость
Сообщений: n/a
|
login.7z (4.06MB)
тестовый вариант, в компилированном виде, т.к. репозитария нет пока - максимальная совместимость с мангосом, т.е. все ключи в бд. Необходимо доделать пару опкодов( реконнект ) и прикрепить банлист. А то в связи с использованием guice весь код перелопатил, пришлось пока вырубить банлист и сервис обновления( реалмлист не обновляется ). Дома в линуксе с клиентом проверял, на работе клиента нет, да и линукса тоже , поэтому башевский вариант скрипта отсутствует. зы может кому интересно будет ззы через денек-два файл снесу, а то 4 метра держать на форуме жирно ( файлбим и прочие зарублены на проксе ) ---------------------- архив перезалит |
03.08.2011, 10:06 | #69 | |
Гость
Сообщений: n/a
|
Цитата:
Если на них забить ( ну не часто же происходит перезапуск ) , да и забить на realmlist в БД, то никакого обновления realmlist-а, банлиста из БД тащить не надо будет, открываем еще сокет для реалмов, и спокойненько принимаем с него команды для обновление банлиста и популяции, запроса ключей. Возник вопрос по ходу дела...connection Timeout вообще присутствует как таковой в логин сервере? И если да, то чему равно значение ? ззы архив в предыдущем сообщении устарел, реализованы 10 основных опкодов для логин сервера, и для совместимости с мангосом добавлен сервис обновления реалмлистов и банлистов... |
|
03.08.2011, 10:22 | #70 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
я чото не очень теперь понимаю, кто именно пишет JavaEmu
|
03.08.2011, 10:28 | #71 |
Гость
Сообщений: n/a
|
я тоже хочу подучиться java, вот и пишу по тихому вечерами
mAdloVe - свое, я - свое. Смысл один. Все же ввел понятие совместимости в конфиг Код:
network.compatible = MANGOS
Последний раз редактировалось Minimajack; 03.08.2011 в 16:20. |
03.08.2011, 17:05 | #72 |
Гость
Сообщений: n/a
|
2mAdloVe
у org.jboss.netty.buffer.ChannelBuffer есть не только readByte() есть и readShort(), readInt(), readLong() etc...сам же выбираешь ByteOrder.LITTLE_ENDIAN ...зачем парится с байтами и сдвигами? |
03.08.2011, 17:21 | #73 |
Новичок
Регистрация: 24.03.2010
Сообщений: 23
Сказал(а) спасибо: 7
Поблагодарили 5 раз(а) в 4 сообщениях
|
|
03.08.2011, 20:47 | #74 |
Гость
Сообщений: n/a
|
|
04.08.2011, 07:41 | #75 |
Гость
Сообщений: n/a
|
текущая версия логин сервера, делается под 3.3.5
не реализовывал только работу с патчами. Не вижу смысла. http://filebeam.com/fb069dfc963d144740eb8188c2faf8c0 под линуксом запускать Код:
java -Xms8m -Xmx32m -ea -cp ./libs/*:wowemu_login.jar org.wowemu.login.loginserver Последний раз редактировалось Minimajack; 04.08.2011 в 07:47. |
04.08.2011, 16:29 | #76 | |
Новичок
Регистрация: 29.04.2010
Сообщений: 11
Сказал(а) спасибо: 18
Поблагодарили 4 раз(а) в 2 сообщениях
|
Цитата:
|
|
04.08.2011, 16:46 | #77 |
Гость
Сообщений: n/a
|
|
07.08.2011, 13:03 | #78 |
Гость
Сообщений: n/a
|
что то я застрял...вроде все нормально, или глаз уже замылен
в общем, делаю реалм... коннект - отсылаю SMSG_AUTH_CHALLENGE приходит CMSG_AUTH_SESSION...проверяю, все гуд, sha1 digest совпадает с заданым клиентом... инициализирую криптосистему сессионным ключом отсылаю SMSG_AUTH_RESPONSE отсылаю SMSG_ADDON_INFO а в ответ тишина, только через секунд 10 клиент шлет пакет( нормально не расшифровывается) и разрывает соединение. Чувствую ошибка в кодировании(декодировании) заголовка... в HmacSHA1 ну не может быть ошибки...стандартная 3 строчки кода. в SARC4 использовал реализацию от JCE...не прокатило, на просторах гугла нарыл частную реализацию...заголовки как и положено уходят кодированными в 4 байта ( первые маленькие)...но клиент молчит Crypt SARC4 может кто увидит ошибку? а то меня уже колбасит |
07.08.2011, 17:58 | #79 |
Гость
Сообщений: n/a
|
всем сорри...код правильный, это я неправильный
перепутал клиентский и серверные SARC4 |
08.08.2011, 12:41 | #80 |
Гость
Сообщений: n/a
|
Ну вот...реалм-сервер дошел до стадии когда необходимы ключи сессий клиентов.
т.к. ключи будут передаваться( планируется ) по дополнительному каналу между логин и реалм серверами встает вопрос о защите этого канала. Кто что использует? Городить свои грабли или воспользоваться уже существующими ( в сис-ме вов ) алгоритмами? Мне конечно быстрее SARC4 втулить и кодировать содержимое пакета целиком. |