Исходник сокет-сервера

В связи с катастрофической нехваткой времени на написание материала, мы решили просто выложить исходники сервера для онлайн игры “морской бой” в общее пользование. Сервер написан на Java. Там нет ничего секретного. Многие вещи отточены и отработаны до блеска. Работа над ядром началась примерно шесть лет назад. Совершено и исправлено множество ошибок, этот опыт ценен сам по себе. Надеемся, он принесет пользу и вам. Нам не жалко :)

Мы не претендуем на красоту кода и изощренность решений. Но, оно работает, и это заслуживает уважения. :) Протокол клиент-сервера описать пока некогда, уточню просто, что там обычные XML-пакеты. Исходник клиента наверное выложить не имеем права, так как там есть немного чужого кода, на который наложены определенные договоренности.
Дамп базы данных тоже не выкладываем, так как это уже не касается логики работы сервера.

Вашему вниманию представляется код сокет-сервера от онлайн игры “Морской бой”, которая упоминалась ранее. Игра простецкая, но логика работы сервера от этого не изменилась. Эту же логику мы используем и в гораздо более сложных проектах.

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

Вот тут лежит архив с исходником сокет-сервера, написанного на Java
Пользуйтесь на здоровье, задавайте вопросы. Не стесняйтесь также высказать негативное мнение, так как возможно оно пойдет нам на пользу!
Какие классы за что там отвечают, попробуйте догадаться сами. Там даже есть немного комментов на эту тему. :) По работе некоторых классов можно написать отдельные статейки. Может когда и напишем. :)

Давайте делать побольше интересных онлайн игр, а не это унылое говно, которое сейчас штампуют ради быстрых денег… :)

P.S. Огромная просьба, не выкладывайте этот архив с исходником, где попало. Выкладывайте лучше где попало ссылку на этот пост! :) В знак благодарности.

Эта запись была опубликована в рубрике Мысли о разработке и отмечена метками , , , , . Добавить в закладки ссылку.

6 в ответ на Исходник сокет-сервера:

  1. vitekatr пишет:

    Привет автору и пользователям.

    Сразу вопрос, в прошлой статье “Многопользовательский сокет-сервер. Введение” было упомянуто о комнатах, т.е. два игрока или игрок и бот сидят в одной комнате и играют в свою игру, в данных исходных кода есть ли эта реализация?

    Заранее спасибо за ответ!
    PS: Очень хорошая статья!!!

    • antares пишет:

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

      • vitekatr пишет:

        Спасибо.
        Некоторые моменты до сих пор не понятны, но с комнатами главное понятно, особенно понравилась реализация того, что, каждая комната создается в отдельном потоке.
        Спасибо что выложили исходник!

  2. AlexsWulf пишет:

    Доброго времени суток.
    Подскажите такой момент.
    К примеру ява слушает 4444 порт. Как вы конектитесь к нему из AS3?
    На прямую к 4444 или к 80 и через какую то прослойку уже к 4444?
    Сори если сильно затупил :)

    • antares пишет:

      Привет! Можно и так и так, но мы работаем на прямую на нужный порт. Во флэше создается XML-сокет, нацеливается на нужный порт, и вперед. Примерно так:

      _socket = new XMLSocketProxy();
      _socket.addEventListener( DataEvent.DATA, onData);
      _socket.addEventListener( Event.CLOSE , onClose);
      _socket.addEventListener( Event.CONNECT , onConnect);
      _socket.addEventListener( IOErrorEvent.IO_ERROR , onError);
      _socket.addEventListener( SecurityErrorEvent.SECURITY_ERROR , onError);
      _socket.connect(host, port);

  3. AlexsWulf пишет:

    Спасибо огромное )
    Будем разбираться )