Некоторое время я играл с GameKit, но теперь я сталкиваюсь с очень тяжелыми трудностями.
Я собираюсь отправить через Bluetooth файлы большего размера - 1-2 МБ. Я уже подготовил пакеты (около 8 КБ каждый).
Мое приложение работает, как описано на следующей схеме:
iPhone - sending header: file divided into 25 parts
iPod - received header: OK I got it waiting for 25 parts
iPhone - sending part #1
iPod - received part #1 send next
iPhone - sending part #2
iPod - received part #2 send next
...
iPhone - sending part #24
iPod - received part #24 send next
iPhone - sending part #25
iPod receiving part #25 processing file
Я отправляю как части файла, так и сообщения (подтверждение доставки), используя:
[mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];
и получение данных:
- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context
Я хотел бы знать, как вы справляетесь с некоторыми проблемами, которые могут возникнуть во время передачи по Bluetooth. Просмотр документации GKSessionDelegate не дает мне никакой информации, если данные были доставлены или нет.
В 90% случаев передача работает нормально, но иногда она внезапно останавливается и не продолжается без переподключения / перезапуска приложения.
Я попытался изобрести простое решение для повторной установки данных, если я не получу ответ в течение 1 секунды:
-(void)sendAgain {
[self sendData:bufor];
}
-(void)sendData:(NSData *)data {
bufor = [data retain];
timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sendAgain) userInfo:nil repeats:NO];
[mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];
}
timeOutTimer становится недействительным, если отправитель получил подтверждение успешной доставки файловой части. Но на самом деле, когда я внедряю это решение, с этим возникает еще больше проблем.
Устройства находятся рядом друг с другом на столе.
Как вы справляетесь с проблемами «недоставленных» данных между устройствами? Это всего лишь инструмент, но как это может раздражать при разработке игр?
Кстати, отправка коротких чатов никогда не вызывала проблем, и я использую те же методы.
На самом деле соединение теряется очень редко, просто данные любят теряться в эфире. Я уже делю части, поэтому размер данных составляет около 8 КБ, что действительно делает передачу изображений очень медленной.