GameKit: отправка надежных NSData другим игрокам?

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

Я не совсем понял объяснение NSData. По сути, что это такое? Как мне отправить массив другому игроку?

Apple упомянула, что пакеты данных могут быть потеряны. Но был «надежный» режим, чтобы этого не допустить. Но я не мог найти такого.

Любые идеи?


person Voldemort    schedule 02.04.2011    source источник


Ответы (1)


Да, вы должны сделать свой СОБСТВЕННЫЙ протокол. «составление протокола» - это то, что вы делаете сами. Что-то вроде ... По сути на стороне сервера

// the message arrives and you then do this...
[data getBytes:&getMe length:sizeof(CommsProt)];

тогда как на стороне клиента для отправки сообщений вы делаете это ...

NSData * data = [NSData dataWithBytes:&sendMe length:sizeof(CommsProt)];
// ...now send that data using GameKit or whatever system you end up with

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

typedef struct _CommsProt
    {
    BOOL        happyThing;
    someThings  wotJustHappened;
    float       happyValue;
    float       anotherHappyValue;
    // etc
    }
    CommsProt;

Если вы новичок в GK, обратите внимание на этот важный совет ...

GKSessions клиент / сервер

Это тоже может помочь ...

Самый эффективный способ работы в сети на Mac / iPhone ?

Несколько полезных заметок ...

(i) «клиент» и «сервер» не означают ничего. Вы сможете отправлять информационные пакеты (например, "CommsProt" выше) в любом направлении. Если вы хотите думать о конце как о сервере и обращаться к нему (особенно, если у вас устройство типа концентратора), это нормально. Но это только в твоей голове. (Кстати, обычно вы можете использовать разную структуру данных в каждом направлении, и это прекрасно.)

(ii) Относительно розеток. Если вы сильно увлекаетесь сетями, вам придется иметь дело с сокетами и писать собственный код сокетов. Однако весьма вероятно, что вы можете выбрать сетевой уровень, на котором вам даже не придется произносить слово «сокеты»! GameKit + Bonjour, например, полностью позаботится об обработке сокетов за вас, и эта комбинация позаботится о другой невероятно сложной проблеме, которая НАХОДИТ один из ваших клиентов / серверов. . Если вы новичок, я рекомендую вам полностью отложить сокеты на данный момент и использовать такую ​​систему, как GameKit (или что-то подобное в Windows) для вашего сетевого уровня.

(iii) Действительно, СНАЧАЛА просто используйте что-то невероятно простое, например GameKit, пока вы выясняете свой протокол и все другие головные боли. Позже, при необходимости, вы можете переписать сетевой уровень или переключиться на другой пакет, о котором вы слышали. К счастью, все, вплоть до приведенных выше примеров кода, не изменится, изменится только сетевой уровень.

(iv) Что касается Wi-Fi. GameKit и большинство пакетов для удобства полностью не зависят от физического уровня: они позаботятся об этом за вас. GK будет работать нормально, независимо от того, подключены ли телефоны - bluetooth, ethernet, что угодно! На самом деле вы «не будете знать», какой физический уровень используется. (Иногда раздражает то, что вы не можете это контролировать: отпустите, пользователям все равно.)

person Fattie    schedule 02.04.2011
comment
Спасибо, это помогло мне прогрессировать. Я продвинулся вперед и столкнулся с ошибкой ... stackoverflow.com/questions/5525516/sending-data-error < / а> - person Voldemort; 02.04.2011