私はGameKitで遊んでいましたが、今はとても難しい問題に直面しています。iPhone SDK:GameKitと大きなファイル+接続が失われました
私は、Bluetoothのより大きなファイルを送信します - 1〜2MB。私はすでにパケットを用意しています(それぞれ約8kB)。
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の伝送中に発生する可能性のある問題をどのように処理するのかn。 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が無効化されます。しかし、実際に私がこのソリューションを実装するときには、さらに多くの問題があります。
デバイスは、机の上で隣り合っています。
デバイス間の「未配信」データの問題をどのように処理しますか?それは単なるツールですが、ゲームを開発する際にどのように迷惑になることがありますか?
ところで、短いチャットメッセージを送信しても問題は発生しませんでしたが、私は同じ方法を使用しています。
実際に接続が失われることはほとんどありません。データは空中で失われてしまいます。私はすでにパーツを分割しているので、データのサイズは約8kbです。本当に本当に遅い画像の転送が実際に行われます。
私は、ドキュメントが1000バイトの制限を示唆し、別の場所でも95kについて言及していますが、これがハードリミットであるかどうかは不明です。 –