Pull to refresh
0

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

Reading time 5 min
Views 8.3K
Доброй пятницы, Хабр!

Создание игр — трудоемкий процесс, но в нем нет магии и таинственности. Он не отличается от создания любого приложения, состоит из тех же шагов, и его возможно разделить на блоки, модули и этапы. Создание сетевой игры может увеличить время и стоимость разработки в несколько раз. Но сетевое взаимодействие приложений — это независимый модуль, разрабатываемый и тестируемый отдельно от самой игры. Именно о таком модуле мы сегодня поговорим. Представляем вам 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.

Дерзайте и встретимся на хакатоне!
Tags:
Hubs:
+12
Comments 8
Comments Comments 8

Articles

Information

Website
www.samsung.com
Registered
Founded
1938
Employees
Unknown
Location
Южная Корея