Вы ударили по гвоздю по голове:
Как ни странно, GK позволяет модели "любой к любому".
Это действительно впечатляющее технологическое достижение Apple
НО !!!........ очень важно понимать, что это очень необычный вариант.В сети - для игр - вам почти всегда нужна «нормальная» модель клиент-сервер.
За 30 лет появилось огромное количество научных знаний о создании сетей с использованием обычного клиента-сервера ».модель.И действительно, для программирования игр 99% времени вам определенно нужна стандартная модель «спица» клиент-сервер.
Это повторяет:
(1) Apple создала весьма необычный режим «равный-равному» , когда они сделали GK.
(2) То есть технологически поразительные , но,
(3) эта новая технология P2P, на самом деле, не будет использоваться в очень типичном сетевом программировании для игр.
(4) Очень запутанно: вся документация говорит о режиме P2P.Это сбивает с толку, потому что: если вы новичок в сетевом программировании, это заставит вас думать, что это «нормально».На самом деле, очень вероятно, что вы вообще никогда не будете использовать режим P2P при создании настоящих обычных игр.
Повторите!
Если вы новичок в сети Когда вы видите все упоминания о режиме P2P в документообороте Apple, важно понимать, что (удивительная) функция P2P - это скорее новинка.На самом деле, для практически всех игровых сетей вам определенно понадобятся обычные «повседневные» клиент-серверные «спицевые» сети.
Просто для кристально чистого ... это очень, очень, очень !!проще в реальной сети использовать обычную «спиц» модель клиент-сервер.
Режим P2P «очень умный», и вы определенно можете потратить некоторое время на эксперименты с ним.Например, это просто для того, чтобы просто «отправить чат» на каждое подключенное устройство.
Но опять же (если вы новый сетевой программист), вы должны понимать, что это скорее новинка.Вам придется программировать, используя обычную повседневную модель клиент-сервер.
Итак ......................
учитывая, что вы собираетесь программировать в обычной повседневной клиент-серверной модели.
Ваша первая работа становится, как ни странно, "отключением" P2P-аспекта !!!!!
Этодостаточно просто, если вы знаете, как.Вот как это сделать ...
sessionMode:GKSessionModeServer .. on the server.
sessionMode:GKSessionModeClient .. on the client.
Итак, для обычного программирования клиент-сервер нигде не используйте GKSessionModePeer.
Во-вторых, не забывайте в своих клиентах,просто не реализовать didReceiveConnectionRequestFromPeer:
Наконец, если все это не работает! В ваших клиентах, вpeer: didChangeState :, вам нужно сделать это ...
// so this is in the CLIENT...
-(void)session:(GKSession *)session peer:(NSString *)peerID
didChangeState:(GKPeerConnectionState)state
{
switch (state)
{
case GKPeerStateAvailable:
// you have found the server!!
// [session displayNameForPeer:peerID]
self.theServerWeAreConnectedToPeerID = peerID;
// you will definitely need to save that
[session connectToPeer:theServerWeAreConnectedToPeerID
withTimeout:0];
break;
case GKPeerStateConnected:
// MAKE SURE it's our server
// not just some bizarre peers, etc etc.
if ( [theServerWeAreConnectedToPeerID isEqualToString:peerID] )
{
// you are connected - launch your tick or whatever
}
else
{
// completely ignore this!
}
break;
case GKPeerStateDisconnected:
if ( [theServerWeAreConnectedToPeerID isEqualToString:peerID] )
{
// you have been disconnected from the server!!
}
else
{
// weirdly this is telling you that one of your sister
// clients, has been disconnected from the server. IGNORE
}
break;
// GKPeerStateUnavailable .. likely not relevant
case GKPeerStateUnavailable:
// do nothing, ignore
break;
// from the modern doco..
// "The delegate should ignore GKPeerStateConnecting changes
// and implement the session:didReceiveConnectionRequestFromPeer:
// method instead." .. blah blah .. for us that comment only
// applies TO OUR SERVER, NOT here in the client.
case GKPeerStateConnecting:
// do nothing, ignore
break;
}
}
Просто повторить.Весьма вероятно, что вы захотите НЕ использовать модель P2P: так, все вышеперечисленное объясняет «как отключить материал P2P».
Еще раз повторить для абсолютной ясности:
GK (неожиданно) содержит режим P2P.Это технологически удивительно.Конечно, вы можете использовать режим P2P для простых сетевых проблем (особенно проблем, связанных с чатом).На практике все типичные сетевые потребности любой реальной игры (будь то FPS, спортивная игра или что-то еще) должны выполняться в обычной парадигме клиент-сервер .(Было бы поразительно трудно использовать режим P2P.)
Таким образом, в качестве «первого шага» необходимо знать, как «не использовать» систему P2P в GK, что подробно описано выше.
(Если вы действительно хотите использовать систему P2P - все готово, продолжайте!)
GK - это фантастика, если вы можете разобраться во всех тонкостях.С GK и ASIHttpRequest вы можете в основном делать что-либо между компьютерами, по крайней мере, базовым способом.
Этот вопрос ударил по голове ........ У GK есть (очень необычный) режим P2P, и документация фокусируется на режиме P2P , что может сбить с толкуновички.Снова P2P невероятно умный, но, как правило, вам не нужен режим P2P.Вам нужна обычная лучевая модель «клиенты с сервером», которую невероятно проще программировать.Надеюсь, это поможет!