2009-08-31 12 views
2

私は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です。本当に本当に遅い画像の転送が実際に行われます。

+0

私は、ドキュメントが1000バイトの制限を示唆し、別の場所でも95kについて言及していますが、これがハードリミットであるかどうかは不明です。 –

答えて

2

私が取り組んでいるゲームのデータを単純に交換しても、GameKitフレームワークはあまり信頼できません。私は大規模なデータを送信するためにそれを使用しません、あなたは頭痛を求めるだけです。

1

「it」と「refulgentis」の両方に同意します。これをGK上で実行すると、信頼性の低い実行が求められます。あなたはBonjourとwiFi上でこれを設定する方が良いですし、各ユーザがいくつかの中央のオフラインソースからコンテンツをダウンロードすることをお勧めします。大きなファイルがあるデバイスから別のデバイスに移動するように設計されている場合は、大きなファイルをデバイスからデバイスに転送するのではなく、片方のファイルをアップロードして別のデバイスにダウンロードしたい場合があります。

+0

私はこのユーザーのアプローチに同意します。 RESTfulインターフェイス(Rails、ftw)を備えた基本的なWebアプリケーションを作成して、デバイス間のすべてのオンラインデータトランザクションを処理できます。その時点で、あなたがしているのは、(HTTPリクエストを介して)あなたの情報のためにウェブサービスをターゲットにすることだけです。また、ファイルサイズの必要性に応じて、両方を使用することもできます(Webとゲームキット)。イメージはウェブサービスを通じて行うことができ、テキストはgamekitを通じて行うことができます。そうすれば、各手段を効率的に使い、大きなボトルネックの問題を避けることができます。 – user298261

関連する問題