2012-10-10 47 views
4

我正在開發一個iOS應用程序,它允許用戶在本地與其他設備共享PDF。當應用程序啓動時,設備會主動成爲搜索廣播文件的服務器的客戶端。當客戶端看到一個服務器時,它會爲其選項卡添加一個徽章,並向其表中添加一個條目。GameKit:使用GKSession發送額外信息而無需實際連接?

我遇到的問題是GKSession只允許在連接建立之前傳輸一個字符串 - 對等顯示名稱。我想傳送的是文件名,頁數和縮略圖。

我目前想要實現此行爲的唯一方法是自動連接客戶端和服務器,交換文件信息,然後自動斷開它們。如果目前只有一個或兩個文件正在播出,這可能會奏效,當很多不同的設備正在播出時,很可能會出現線程/同步問題。

例如,可能有7個文件可用。所以客戶端必須逐一連接它們才能接收所有文件的信息。這可能需要相當長的時間,並且用戶可能已經決定他們希望下載「文件1」。通過點擊'文件1'應該建立連接並開始傳輸。如果客戶端忙於檢索有關其他可用文件的信息,則這可能無法立即發生。

我也讀過一些問題,連接到服務器再次斷開連接後不久..(what GKSession doesn't connect on every attempt?)。

所以我想它歸結爲簡單的問題 - 有沒有人有任何想法,我怎麼可以讓客戶端接收有關服務器的其他信息,而不僅僅是peerID和peerName?

回答

2

如何以csv格式設置顯示名稱以及何時收到csv名稱,只顯示設備名稱。

或者你可以發送一個NSDictionary中的JSON字符串作爲顯示名稱

例的Json變成NSString的:當您收到

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

然後:

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

字符串化版本DisplayName僅顯示DeviceName,並在稍後的某個時間解析文件詳細信息以便向服務器發送請求。

請記住,我不知道是否GKSession對顯示名稱長度的限制,使這種解決方案可能不會有大量文件的工作

+0

我試着做類似這樣的事情,但不幸的是,最大字符數似乎是40個字符:( – bencallis

0

我所做的是極限的顯示名稱爲16個字符,並使用剩餘的24個字符供我使用。

我創建了偏移量,從中讀取應用程序所需的不同信息。例如0到15將表示設備名稱; 16-24將代表文件擴展名。 24到39將代表文件名。如果一個字符串長於其各自的空間,那麼它會被截斷,或根據您的喜好截斷。如果一個字符串比其各自的空間短,那麼它被填充空格。我已經編寫了從40個字符顯示名稱中獲取這些字符串的方法。如果有人有更好的解決方案,我會很樂意在這裏。目前無法發佈代碼,因爲我無法訪問它。

乾杯

相關問題