GameKit: отправка надежных NSData другим игрокам? - PullRequest
0 голосов
/ 02 апреля 2011

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

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

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

Есть идеи?

1 Ответ

2 голосов
/ 02 апреля 2011

Да, вы должны сделать свой собственный протокол. «составление протокола» - это то, что вы делаете сами. Нечто подобное ... По существу на стороне сервера

// 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) Относительно WiFi. GameKit и большинство удобных пакетов абсолютно не зависят от физического уровня: они позаботятся об этом за вас. ГК будет работать нормально, но телефоны подключены - Bluetooth, Ethernet, что угодно! На самом деле вы «не будете знать», какой физический уровень используется. (Иногда раздражает, что вы не можете контролировать это: отпустите, пользователям наплевать.)

...