Автор Тема: Sega по сети  (Прочитано 4338 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн noreks

  • Пользователь
  • Сообщений: 4
  • Пол: Мужской
    • Просмотр профиля
Sega по сети
« : 01 Январь 2011, 01:20:43 »
Здравствуйте!Я тут решил поиграть всегу по сети,скачал эмуль,воспользовался Kaillera,но столкнулся с ужасными тормозами.Полазив по интернету,хочу попробовать это дело через эмулятор KEGA и прогу Hamachi.Конкретной инструкции к моей задумке я так и не нашёл.Если не трудно объясните бестолковому человеку как это сделать.Создавать сеть в Hamachi я умею,а вот какой IP вводить в Kega (Netplay->) никак не разберусь - там выскакивает "unable to connect"
Заранее спасибо.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Sega по сети
« Ответ #1 : 01 Январь 2011, 12:51:21 »
*Вот он тру эмуляторщик, который даже в первые минуты нового года познаёт эмуляцию*
Кега устроена так что хамачи тебе не понадобляться, в кеге нужно чтобы один создал сервер, а потом остальные могут ввести его ip и подключиться к его созданному серверу. Так что у кеги с игрой через инет всё просто, ну само собой перед тем как конектится к серверу нужно всем открыть одну и ту же игру с одинаковым названием (проще скинуть тот же ром друг другу предварительно).

Оффлайн УльтраБлокС

  • Пользователь
  • Сообщений: 1166
  • Пол: Мужской
    • Просмотр профиля
Re: Sega по сети
« Ответ #2 : 01 Январь 2011, 12:55:23 »
А как же без внешника кега будет работать? Хамачи нужен чтобы без внешнего IP играть как по локалке. Внешник есть далеко не у всех...

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Sega по сети
« Ответ #3 : 01 Январь 2011, 13:44:27 »
Цитата: УльтраБлокС
Внешник есть далеко не у всех...
Ну я этот вариант не учитывал, знаю что некоторые провайдеры пытаются экономить и выделяют один ip на всех, но сейчас это случается не так часто.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Re: Sega по сети
« Ответ #4 : 28 Ноябрь 2024, 19:33:27 »
колитесь, кто знает как эта самая Kaillera работает? хотелось бы понимать что именно шлет эмулятор игрока 1 через эту сеть в эмулятор игрока 2. игрок 2, понятно, тупее и отсылает только нажатия клавиш. вот интересно что именно шлет эмуль игрока 1. всю оперативку процессора и видео? но по идее это 128 килобайт... многовато.

Оффлайн Razor

  • Пользователь
  • Сообщений: 1931
  • Пол: Мужской
  • Gotta Go Fast!
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #5 : 29 Ноябрь 2024, 11:00:40 »
колитесь, кто знает как эта самая Kaillera работает?
Корейцы, которые её написали. Там и документация вся на корейском. Не знаю, попытай удачу на гитхабе Kaillera Reborn

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #6 : 29 Ноябрь 2024, 23:55:20 »
ладно... пойдем окольными путями :)

нашел какой-то документ:
https://kr.2manygames.fr/docs/kprotocol.txt

по идее серверу все равно что прилетает - надо просто по правилам вежливо с ним общаться. а следовательно он может подойти к нашим черным делам :)

первое - самое легкое:
Port = 27888
ConnectionID = OpenNetworkConnection("89.108.88.134", Port, #PB_Network_UDP)

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

дальше по идее надо поздароваться. но пока не ясно как :) но очень похоже что так?
'     0x03 = User Login Information
'            Client Notification
'            NB : Username
'            NB : Emulator Name
'            1B : Connection Type (6=Bad, 5=Low, 4=Average, 3=Good, 2=Excellent, & 1=LAN)
что значит NB ? и это один большой пакет Username Emulator Name 1B 03 или три разных? но пока главное чот такое NB ?


Добавлено позже:
хотя это видимо уже само общение после авторизации - типа когда другой клиент заходит, то моя программа должна такой пакет получить видимо, с описанием кто зашел.

сам же авторизоваться должен видимо начиная диалог с сервером с фразы:
'//Logging in State
'Client: HELLO0.83
чо прям текстом зафигачить? HELLO и потом ноль и точку и 83? эм...

Добавлено позже:
ну вот... сервер обиделся и меня забанил :)

Добавлено позже:
полагаю в этом HELLO0.83 скрывается номер версии, так как в списке серверов есть версии 0.86. однако в случае эмуленда версия EMX2.0.2 и видимо приветственное HELLO там должно выглядеть по другому :(
« Последнее редактирование: 30 Ноябрь 2024, 00:49:33 от SeregaZ »

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4460
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Sega по сети
« Ответ #7 : 30 Ноябрь 2024, 19:51:08 »
что значит NB ?
Number of Bytes (а точнее, натуральное число байт). Длина не фиксирована.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #8 : 30 Ноябрь 2024, 20:59:39 »
спасибо.

пока до авторизации еще не дошел, но однако есть прогресс :) буржуйские товарищи посоветовали Wireshark и типа посмотреть там что творится. вот значит выяснил что Хелло моя без нуля в конце - добавил, но не помогло и емулендовский сервер продолжил брыкаться. зато олдгеймовский ответил. вот сейчас как раз разбираю что он там отвечает и по идее следующим шагом должна будет быть авторизация.

Добавлено позже:
в том документе:
'Server: Port notify HELLOD00D#\0 [# = new port number. eg. HELLOD00D7159]
'        or TOO\0 [if server is full]

мне прилетает:
48 45 4C 4C 4F 44 30 30 44 32 37 39 30 33 00
HELLOD00D27903

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

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

но при разборе пакетов порой муть какая-то происходит :) например пакет 04 - список игроков и игр. в какой-то момент прилетает пакет 04, но с 0 игроков, и с 2 играми. и потом сразу идет опись игры. хотя должна быть в начале опись игроков и только потом игр. хотя может это как раз и все верно, что раз 0 игроков, то это не значит надо снести список игроков в ноль, а это значит дополнительный пакет с играми, который не влез в предыдущий прилет. и нумерация пакетов тоже пока не понятная. похоже это не столько номер пакета, а сколько система похожая на работу регистров a0-a7 и d0-d7. типа пакет (адрес) тот-же, а содержимое меняется, или обновляется как в случае с 04 типом пакетов.

« Последнее редактирование: 30 Ноябрь 2024, 22:36:24 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #9 : 01 Декабрь 2024, 03:55:51 »
 :cool:



с логином и посылкой пакетов вроде разобрался. теперь надо создание игры, логин, пакеты готовности и старта игры. и потом самый главный пакет, на который я надеюсь то что будет нужно: 0x12 = Game Data

будет конечно эпический фейл, если это окажется не оно  0_0 но, дуракам новичкам везет, а значит должно случится то что должно случится :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #10 : 02 Декабрь 2024, 01:41:38 »
блин... я как Винни-Пух... застрял :) на создании игры кароче затык. вроде один в один шлю пакет, а ноль реакции. и ничего не создает.
'     0x0A = Create Game
'            Client Request:
'            NB : Empty String [00]
'            NB : Game Name
'            NB : Empty String [00]
'            4B : 0xFF
хныыыыыы...

Оффлайн Mad

  • Пользователь
  • Сообщений: 8059
  • Пол: Мужской
    • Просмотр профиля
Sega по сети
« Ответ #11 : 02 Декабрь 2024, 01:55:54 »
SeregaZ, А для чего всё это делаешь? Какой-то проект?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #12 : 02 Декабрь 2024, 03:02:52 »
да хотелось бы потестировать Zero Tolerance. понять - хватит ли пинга. а стандартная Каиллера не знает что с этой игрой надо делать :) вот у меня вся надежда на пакет:
'     0x12 = Game Data
'            Client Request:
'            NB : Empty String [00]
'            2B : Length of Game Data
'            NB : Game Data
'                 *eg). MAME32K 0.64 = 2 Bytes/Input _
'                 Connection Type = (3=Good), so...3 * 2 = 6 Bytes for 1 Player's Input)*
'
'            Server Notification:
'            NB : Empty String [00]
'            2B : Length of Game Data
'            NB : Game Data
'                 *Using same example from above...If both players are on 3=Good Connection Type _
'                 and there are 2 Players, then the Total size of the incoming data should be: _
'                 3 * 2 = 6 Bytes...6 Bytes * 2 Players = 12 Bytes*


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

Добавлено позже:
походу в этом описании:
'//Initial byte
'1B - byte - Number of messages in packet [generally you will always have n-3 messages. _
'                                         During gameplay, it may be necessary to increase.]

есть какой-то сакральный смысл. например пакет "выход". казалось бы ну выход и выход - пошли один раз и все на этом. но зачем-то клиент шлет не только один пакет выход, а довеском добавляет еще 2 пакета тип 06 Client to Server ACK. нахрена козе боян? не понятно :)

второй сакральный смысл в нумерации пакетов. типа в начале стоит отметка, что летит 3 пакета. ну по идее их нумера должны быть 1, 2, 3 да? нет. выходной пакет - самый первый - номер 5, потом 4 и 3. не понимаю :) но начинаю подозревать что надо при любом чихе от клиента в сторону сервера слать не по одному пакету, а по 3. один, тот что нужно и два довеском 06 Client to Server ACK. хотя это тупо... я бы еще понял все три одинаковых пакета выход 01 посылать. типа если вдруг один или два потеряются... не понятно кароче  :cry:

Добавлено позже:
видимо дело в очереди пакетов. эту очередь надо хранить, а при посылке любого нового пакета - дописывать в конец два предыдущих, с их номерами, как они были посланы первый раз. возможно для контроля что пакеты точно долетят. но это ж избыточно мягко говоря... да и раздувает размер пакета. все. завтра попробую проверить эту теорию. сегодня сил нет :) а еще интересно что произойдет если количество пакетов превысит 65 тыщ сколько-то там. ведь под номер пакета два байта. опять с нуля начинать?
« Последнее редактирование: 02 Декабрь 2024, 04:52:20 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #13 : 03 Декабрь 2024, 00:35:16 »
 :cool: :cool: :cool:



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

ну а с пакетами дальше попроще будет думаю. теперь надо присоединение к серверу и "старт" игры.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #14 : 03 Декабрь 2024, 05:11:12 »
проблему с баном вроде бы решил. выходить надо вежливо, а не как я обычно дверью хлопаю... сначала шлем пакет разъединения 0х01, дожидаемся пока прилетит от сервера сообщение что Элвис лефт зэ билдинг, и только потом дисконект с сервером. при таком алгоритме входит и выходит, замечательно выходит. и этой самой "блокировки" не происходит.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #15 : 05 Декабрь 2024, 01:11:49 »
хны. ставка не сыграла.

'     0x12 = Game Data
'            Client Request:
'            NB : Empty String [00]
'            2B : Length of Game Data
'            NB : Game Data
'                 *eg). MAME32K 0.64 = 2 Bytes/Input _
'                 Connection Type = (3=Good), so...3 * 2 = 6 Bytes for 1 Player's Input)*
'
'            Server Notification:
'            NB : Empty String [00]
'            2B : Length of Game Data
'            NB : Game Data
'                 *Using same example from above...If both players are on 3=Good Connection Type _
'                 and there are 2 Players, then the Total size of the incoming data should be: _
'                 3 * 2 = 6 Bytes...6 Bytes * 2 Players = 12 Bytes*

я предполагал что когда игрок 1 шлет этот пакет - он шлется второму игроку. но что-то не хочет. или я не правильно его формирую, или лыжи не едут. почему-то при попытке послать пакет 0x12 = Game Data - этот же кто его посылает - его и получает. хотя должен по идее второй игрок это получать. это раз. а дваз - сервер, скатина, режет пакет. мне нужно как минимум 16 байт, а лучше все 100 чтоб с запасом. однако обратно прилетают совсем коротенькие обрезанные данные - типа для нажатия кнопок то конечно хватит, как эмуляторы собственно и делают. но вот пересылать пакеты - нет  :cry: :cry: :cry:

еще я такой сижу - думаю я один такой умный, а тут буржуй мне видео подсовывает :) оказывается точно такую-же идею кто-то до меня реализовывал:

я в печали. я не первый. и ничего не получается. реальность наносит двойной удар :)

Добавлено позже:
проблема с размером вроде бы решилась. если выбрать при логине качество связи LAN = 1 (было Good = 3), то вроде как пакеты полные. но почему-то один фиг не отсылаются второму клиенту :) получается каждый клиент сам-же и получает этот 0x12 = Game Data который шлет на сервер. тупость какая-то. по логике же первый клиент должен слать второму и наоборот. а ни как сам себе.
« Последнее редактирование: 05 Декабрь 2024, 02:36:13 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #16 : 08 Декабрь 2024, 22:41:34 »
вроде бы что-то я наконец понял. и вроде как надежда еще есть. конечно еще вопрос почему мой клиент, скатина, вечно отваливается на попытке логина, попадает в бан на сервере, приходится менять сервер, опять логинится, надеяться что в этот раз проскочит... это все портит малину.

а суть работы с 0x12 Game Data такой:
1. от клиента первый 0х12 должен быть нулями. самый первый 0х12 по сути задает размер пакета, который будет одинаковый на всю игру. поскольку пакеты ZT примерно 14 байт, один раз правда видел что два пакета склеились в одного и было 16 (14 и 2 байта), то наверное надо тройной размер сделать 14х3 = 42 байта, ну или двойной чтоб системе проще было 28 байт. хотя нет - 36 скорей всего. еще по 2 байта для начала и конца пакета по системе ZT надо будет.

сервер вернет свой 0х12, где будет по сути два набора данного пакета. типа если скажем я слал 36 байт (14х2 и 4х2 на координаты пакета в ZT). один получается Эмулятора1 и второй Эмулятора2.

2. нормальные игры делают как: событие в игре1, игра1 шлет игре2 это событие, игра2 обрабатывает. основное время по сути игры простаивают. Kaillera - события шлются постоянно через короткий промежуток. даже если это старое событие, уже обработанное. и если хочешь получить пакет - надо со своей стороны послать пакет и тогда в ответ прилетит и твой пакет, типа подтверждение что он долетел и последний пакет со второй стороны. бред конечно и лишняя нагрузка на сеть, но что поделать. расчитывалось то на синхронизацию кнопок между эмуляторами, когда игра по сути одна - типа Баттл Сити к примеру. один экран, ничего не происходит и тебе просто надо синхронизировать кнопки. с ZT, где у каждого свой экран такая система подойдет не очень.

286490-0

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

3. тут внезапно афторы решили задуматься об экономии траффика. прилетающие пакеты по сути должны писаться в архив. типа массив кусочков памяти на 256 слотов (0-255). правда пока не знаю что именно туда должно писаться - только та часть пакета, что от другого клиента, или прям весь ответ сервера сразу для двоих клиентов. ну не суть. суть в том, что если прилетаемый ответ уже ранее случался, то вместо полного пакета 0х12 прилетит 0х13 где всего лишь 2 байта инфы - номер ячейки в архиве, где лежит точно такой-же пакет, который должен был только что прилететь. для ZT бы выкинуть этот функционал и по идее мои дополнительные байты для координат пакета в ZT в принципе должны будут сделать такой пакет уникальным, чтобы избежать этой вакханалии с архивом, но все-же существует такая вероятность, что пакет полностью совпадется с каким-то из старых и тогда прилетит 0х13 от сервера несколько спутав мне карты.

4. и да, не следует забывать что для отправки надо дописывать два предыдущих сообщения в конец пакета :) опять-таки создавая дополнительные проблемы для тырнет соединения... получается размер пакетов раздуется до безобразия.
36 байт на одного клиента * 2 = 72 + 10 байт примерно заголовки пакета = 82 * 3 пакета в с учетом двух предыдущих пакетов = 246 + 1 пакет с количеством сообщений внутри пакета (3) = 247 байт.


эх. по моему диванно икспердному мнению 247 все-ж многовато. может конечно современные интернеты, когда космические спутники Илона Маска бороздят просторы вселенной, и потянут. но хотелось бы все-ж пакеты поменьше.
« Последнее редактирование: 18 Декабрь 2024, 16:11:35 от ghostdog3 »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Sega по сети
« Ответ #17 : 10 Декабрь 2024, 03:01:05 »
я убью тебя лодочник... *поёт

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

я начинаю подозревать что помимо всех имеющихся проблем, что я уже нарыл - добавляется проблема с фреймами. при старте игры сервер пишет что-то там про 4 фрейма... видимо в секунду. по всей видимости он ожидает что будет прилетать по 4 сообщения в эту самую секунду. но я то пилю пакетную игру, где по идее пакеты будут слаться по мере надобности, а не по таймеру. в результате шлю первый пакет с нулевыми данными - чисто объяснить серверу какого размера пакеты у меня будут, он возвращает этот пакет с нулями, дескать понял-принял, я такой сижу довольный сейчас тебе пришлю пакет с данными - шлю 11 22 33 44... сервер высылает опять нули. что такое? шлю опять 11 22 33 44 - опять ответ нули. да твою заногу... раз пять долблю послать - возврат нули нули нули и только потоооооооом сервер соизволит наконец прислать ответ с моими данными. по всей видимости раз он изначально сказал что 4 фрейма - шли ему 4 пакета одинаковых, пятым новый и опять повторяй новый пакет еще три раза... ссаные костыли... или я что-то делаю не правильно. надеюсь что это самое неправильное. потому что если неправильное - то есть шанс что все заработает. а если правильно и это проблема с этими тупыми фреймами - то это швах  :cry: