Samsung
Компания
81,16
рейтинг
13 декабря 2013 в 16:10

Разработка → Samsung Chord SDK для разработки Android сетевых P2P игр

Доброй пятницы, Хабр!

Создание игр — трудоемкий процесс, но в нем нет магии и таинственности. Он не отличается от создания любого приложения, состоит из тех же шагов, и его возможно разделить на блоки, модули и этапы. Создание сетевой игры может увеличить время и стоимость разработки в несколько раз. Но сетевое взаимодействие приложений — это независимый модуль, разрабатываемый и тестируемый отдельно от самой игры. Именно о таком модуле мы сегодня поговорим. Представляем вам Samsung Chord SDK — бесплатный инструмент для простого и быстрого создания приложений по обмену файлами и сообщениями в реальном времени между устройствами в одной сети.



Samsung много сил вкладывает в развитие Android. Посетите ресурс для разработчиков — там вы обнаружите много полезных инструментов, и одним из них является Samsung Mobile SDK, о котором мы уже писали ранее. В следующих публикациях мы подробнее расскажем о каждом из прочих инструментов.



Samsung Chord SDK (произ. как рус. “коод”, англ. [kɔːd]; перев. связка, хорда, струна, аккорд) позволяет разрабатывать приложения для локального обмена информацией, не используя облако или без знания деталей сети.

Преимущества Chord:
● легкое обнаружение и установка соединения с устройствами рядом;
● взаимодействие в реальном времени с множеством устройств;
● быстрое peer-to-peer соединение без сервера;
● децентрализованная сеть, где участники могут подключать и отключаться в любое время налету.

Samsung Chord SDK v1.0 был выпущен в 25 апреля 2013, он поддерживает Android 4.0 (>= API level 14) — как arm, так и x86 архитектуры. И уже в сентябре 2013 Chord появился в составе Samsung Mobile SDK: был существенно переработан код (к сожалению, обратная совместимость не сохранена), добавлена поддержка шифрованных каналов. Очень полезно будет ознакомиться с FAQ.

Давайте в общих чертах рассмотрим как работает Samsung Chord SDK:



Устройства “device 1-N” подключены к сети одним из способов: Wi-Fi, AndroidAP или Wi-Fi Direct (описание ниже). На устройствах установлено приложение, которое содержит сервис, взаимодействующий с Chord и “activity” приложения. В свою очередь “game” посылает или получает сообщения от “activity”. Каждое из “device” является узлом. Передача сообщений возможна как конкретному узлу, так и каналу. Канал может быть публичным или приватным (более подробно здесь).

Чтобы продемонстрировать, как легко интегрировать Chord в любое игровое приложение, возьмем уже готовую игру Snake из образцов Android SDK: проект доступен на github.

Для начала необходимо установить Samsung Mobile SDK через Eclipse update. Создадим проект из примеров Snake. Далее необходимо скопировать файлы из “%android_path%/samsungmobilesdk/Samsung Mobile SDK/1.0.3/Libs/chord” папку libs нашего проекта и подключить их в Build path.

Далее приведен простой код, не нуждающийся в комментариях:

...
@Override
    public void onCreate(Bundle savedInstanceState) {
...
        mChordManager = new SchordManager(getActivity());

        List<Integer> infList = mChordManager.getAvailableInterfaceTypes();
        if(infList.isEmpty()){
            return;
        }
   
        int interfaceType = SchordManager.INTERFACE_TYPE_WIFI;
        try {
            mChordManager.start(interfaceType, mManagerListener);
            mSelectedInterface = interfaceType;
            Log.d(TAG, TAGClass +"    start(" + getInterfaceName(interfaceType) + ")");
        } catch (IllegalArgumentException e) {
            Log.d(TAG, TAGClass +"    Fail to start -" + e.getMessage());
        } catch (InvalidInterfaceException e) {
            Log.d(TAG, TAGClass +"    There is no such a connection.");
        } catch (Exception e) {
            Log.d(TAG, TAGClass +"    Fail to start -" + e.getMessage());
        }
}
…
SchordManager.StatusListener mManagerListener = new SchordManager.StatusListener() {
        @Override
        public void onStarted(String nodeName, int reason) {
            if (reason == STARTED_BY_USER) {
                SchordChannel channel = mChordManager.joinChannel(CHORD_HELLO_TEST_CHANNEL, mChannelListener);
            } else if (reason == STARTED_BY_RECONNECTION) {
                // Re-start by network re-connection.
            }
        }
        @Override
        public void onStopped(int reason) {
             if (STOPPED_BY_USER == reason) {
                // Success to stop by calling stop() method
             } else if (NETWORK_DISCONNECTED == reason) {
                // Stopped by network disconnected
            }
        }
    };
private SchordChannel.StatusListener mChannelListener = new SchordChannel.StatusListener() {
        @Override
        public void onNodeJoined(String fromNode, String fromChannel) {
            //сообщаем другим игрокам о том, что мы готовы
        }

        @Override
        public void onDataReceived(String node, String channel, String payloadType,
                byte[][] payload) {
            String message = new String(payload[0]);
            //здесь управляем змейкой
        }
        …
        //здесь опущены другие доступные методы 
    };

Отправить сообщения от других клиентов можно следующим образом (всем нодам публичного канала):
    byte[][] payload = new byte[1][];
    payload[0] = ”Hello, chord”.getBytes();
    SchordChannel channel = mChordManager.getJoinedChannel(CHORD_HELLO_TEST_CHANNEL);
    channel.sendDataToAll(CHORD_SAMPLE_MESSAGE_TYPE, payload);


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

Связь можно установить по Wi-Fi, используя следующие методы:

● INTERFACE_TYPE_WIFI — обычное подключение всех устройств к одной общей точке доступа Wi-Fi;
● INTERFACE_TYPE_WIFIAP — AndroidAP, точкой доступа является один из устройств Android;
● INTERFACE_TYPE_WIFIP2P — обычное соединение Wi-Fi Direct.

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

        int interfaceType = 0;
        for (int interfaceValue : mChordManager.getAvailableInterfaceTypes()) {
            if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI) {
            	interfaceType = SchordManager.INTERFACE_TYPE_WIFI;
            	break;
            } else if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI_AP) {
            	interfaceType = SchordManager.INTERFACE_TYPE_WIFI_AP;
            	break;
            } else if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI_P2P) {
            	interfaceType = SchordManager.INTERFACE_TYPE_WIFI_P2P;
            	break;
            }
        }


Весь код по подключению и созданию простой игровой механики можно найти в этом коммите, который обеспечивает самую необходимую интеграцию с Chord SDK. Рассмотрим ключевые моменты:

1. Добавлена страница для статуса игроков;
2. каждый управляет своей змейкой;
3. коллизия считается только со своим хвостом, другие игроки игнорируются;
4. змейка видит и есть только “свои” яблоки;
5. скорость змейки остается постоянной;
6. выигрывает тот, у кого змейка длиннее.

Небольшая демонстрация:



и скриншоты:



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

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



Надеюсь, мы уже убедили вас, что Chord — довольно интересный инструмент. Что ещё можно сделать с ним и зачем это Samsung? Все просто: Samsung занимает более 47% Android-рынка (по данным open signal), поэтому кому еще, как не нашей компании, заботиться об экосистеме. Больше хороших приложений — больше довольных пользователей. Вы, как разработчик, можете получить больше новых пользователей и больше игровых сессий, если добавите своё приложение, использующее Samsung Chord SDK, в особый раздел “Play games” в предустановленном приложении “Group Play”, которое можно найти во всех современных телефонах Samsung на Android. Документацию можно найти здесь.

Если у вас появились вопросы или предложения, смело пишите на e-mail: dev.cis@partner.samsung.com.

Как мы уже писали, 13-14 декабря пройдет Apps4All Hackathon и, если у вас есть игра собственной разработки, вы можете попробовать сделать её сетевой с помощью Chord SDK и выиграть призы от Samsung.

Дерзайте и встретимся на хакатоне!
Автор: @flyant
Samsung
рейтинг 81,16
Компания прекратила активность на сайте

Комментарии (8)

  • +3
    Я не очень разбираюсь в вопросе, но скажите, в чём отличие Chord от Google Play Game Services? При помощи чего будет возможно легко и быстро прикрутить мультиплеер в игру?
    • 0
      Мне кажется тут локальная сеть.
  • +1
    Все это круто, но, как я понял, все еще работает только между самсунговскими девайсами? В таком случае, это все совершенно бесполезно.
    • +2
      О чем вы? Судя по FAQ, все даже в эмуляторе работает.
      Другое дело, что в требованиях заявлен Android >=4.0, а девайсов с 2.3, увы, все еще остается весьма много.

      А начиная с Android 4.0 и так поддерживается Wi-Fi P2P (http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html), так что смысла в этой штуке действительно не особо много.
      • +5
        Я тестировал Chord пару месяцев назад. В эмуляторе действительно работало, на живых не-самсунговских девайсах — увы, нет.
        Глянул в FAQ. Ничего не изменилось:
        [Chord] Do apps developed using Chord only run on Samsung devices?
        The current SDK is designed to only run on Samsung devices.

        И тот факт, что об этом статье даже не упомянуто — полное свинство, ИМХО.

        В общем, это какое-то жутко нишевое решение. Samsung 4.0+ only. Не могу представить, чтобы кто-то на основе Chord сделал игру кроме как для самсунговского же хакатона.
        • +1
          Если так, то прошу прощения.
          В таком случае фраза «Samsung занимает более 47% Android-рынка, поэтому кому еще, как не нашей компании, заботиться об экосистеме.» выглядит вообще как полное издевательство.
  • +1
    Эх… Я помню, как мы толпой в Bomberman играли на Nokia 3230 и N70 по bluetooth. Клавиатуры стирали в дым. И ничего. Не тормозило в большой аудитории. Человек по 5 играли. А сейчас просто нет подобного (
  • 0
    я так понимаю это только для самсунгов?
    Если да, то имхо укрепляется новая монополия (

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

Самое читаемое Разработка