3

私は、ユーザーがローカルで他のデバイスと PDF を共有できるようにする iOS アプリケーションに取り組んでいます。アプリケーションが起動すると、デバイスはアクティブにクライアントになり、ファイルをブロードキャストしているサーバーを検索します。クライアントがサーバーを認識すると、そのタブにバッジが追加され、そのテーブルにエントリが追加されます。

私が抱えている問題は、接続が確立される前に GKSession が 1 つの文字列しか送信できないことです - ピアの表示名。送信したいのは、ファイル名、ページ数、そしておそらくサムネイルです。

この動作を実現するために現在考えられる唯一の方法は、クライアントとサーバーを自動的に接続し、ファイル情報を交換してから、それらを自動的に切断することです。これは、現在ブロードキャストしているファイルが 1 つまたは 2 つしかない場合にうまく機能する可能性があります。多くの異なるデバイスがブロードキャストしている場合、スレッド化/同期の問題が発生する可能性があります。

たとえば、7 つのファイルが使用可能である場合があります。そのため、クライアントは、すべてのファイルの情報を受け取るために、それらに 1 つずつ接続する必要があります。これにはかなりの時間がかかる可能性があり、ユーザーはすでに「ファイル 1」をダウンロードすることを決定している可能性があります。「ファイル 1」をタップすると、接続が確立され、転送が開始されます。クライアントが他の利用可能なファイルに関する情報を取得するのに忙しい場合、これはすぐには起こらないかもしれません。

また、サーバーから切断した直後にサーバーに再接続する際の問題をいくつか読みました..(試行ごとに接続しないGKSessionは何ですか?)。

簡単な質問に要約すると思います-クライアントがpeerIDとpeerName以外のサーバーに関する追加情報を受信できるようにする方法を知っている人はいますか?

4

2 に答える 2

2

表示名を csv 形式で設定し、csv 名を受け取ったときにデバイス名のみを表示するのはどうですか。

または、NSDictionary の JSON 文字列を表示名として送信することもできます

NSString に変換する Json の例:

{
     "DeviceName" : "Example",
     "File" : [
            {
                "FileName" : "PDF1"
                "TotalPages" : 100
            }
            ]
}

文字列化されたバージョン:

{"DeviceName" : "Example","File" : [{"FileName" : "PDF1","TotalPages" : 100}]}

次に、DisplayName を受信したら、DeviceName のみを表示し、File Details をどこかで解析して、後日サーバーへの要求を送信します。

GKSession に表示名の長さに制限があるかどうかわからないので、このソリューションは大量のファイルでは機能しない可能性があることに注意してください

于 2012-10-20T04:00:33.713 に答える