GameKit: Отправить дополнительную информацию с GKSession без фактического подключения?
Я работаю над приложением для iOS, которое позволяет пользователям обмениваться файлами PDF с другими устройствами локально. Когда приложение запускается, устройство активно становится клиентом, ищущим серверы, которые транслируют файлы. Когда клиент видит сервер, он добавляет значок к своей вкладке и добавляет запись в свою таблицу.
Проблема, с которой я столкнулся, заключается в том, что сеанс GKS позволяет передавать только одну строку до установления соединения. Я хотел бы передать имя файла, количество страниц и, возможно, миниатюру.
Единственный способ, которым я могу сейчас придумать, - это автоматически подключить клиент и серверы, обменяться информацией о файлах, а затем автоматически отключить их. Это может хорошо работать, если в данный момент передается только один или два файла, и при передаче большого количества разных устройств могут возникать проблемы с потоками / синхронизацией.
Например, 7 файлов могут быть доступны. Таким образом, клиент должен был бы соединиться с ними один за другим, чтобы получить информацию для всех файлов. Это может занять достаточно много времени, и пользователь, возможно, уже решил, что он хочет загрузить "файл 1". Нажав "файл 1", необходимо установить соединение и начать передачу. Это может не произойти мгновенно, если клиент занят поиском информации о других доступных файлах.
Я также прочитал некоторые проблемы с подключением к серверу снова вскоре после отключения от него.. ( что GKSession не подключается при каждой попытке?).
Так что я думаю, что это сводится к простым вопросам: есть ли у кого-нибудь идеи, как я мог бы позволить клиенту получать дополнительную информацию о сервере, кроме peerID и peerName?
2 ответа
Как насчет настройки отображаемого имени в формате CSV, и когда вы получаете имя CSV, отображать только имя устройства.
Или вы можете отправить JSON String NSDictionary в качестве отображаемого имени
Пример Json для превращения в NSString:
{
"DeviceName" : "Example",
"File" : [
{
"FileName" : "PDF1"
"TotalPages" : 100
}
]
}
Стригированная версия:
{"DeviceName" : "Example","File" : [{"FileName" : "PDF1","TotalPages" : 100}]}
Затем, когда вы получите DisplayName, только покажите DeviceName и проанализируйте Детали файла где-нибудь, чтобы отправить запросы на сервер позднее.
Имейте в виду, я не знаю, имеет ли GKSession ограничение на длину отображаемого имени, поэтому это решение может не работать с большим количеством файлов.
Я ограничил отображаемое имя 16 символами и использовал оставшиеся 24 символа для своего использования.
Я создал смещения, из которых читается различная информация, которая нужна приложению. Например, от 0 до 15 будет представлять имя устройства; 16-24 будет представлять расширение файла. От 24 до 39 будет представлять имя файла. Если строка длиннее соответствующего пространства, она обрезается или обрезается в зависимости от того, что вы предпочитаете. Если строка короче соответствующего пробела, она дополняется пробелами. Я написал методы для получения этих строк из отображаемого имени из 40 символов. Если у кого-то есть лучшее решение, я был бы рад здесь их. Не могу опубликовать код в данный момент, так как у меня нет доступа к нему.
ура