Envie e receba NSData via GameKit
Estou tentando enviarNSData
sobreBluetooth
atravésGameKit
.
Enquanto eu tenhoGameKit
configurado e capaz de enviar pequenas mensagens, agora eu gostaria de expandir e enviar arquivos inteiros.
Eu tenho lido que você precisa dividir arquivos grandes em pacotes antes de enviá-los individualmente.
Então eu decidi criar umstruct
para facilitar a decodificação dos pacotes quando eles são recebidos na outra extremidade:
typedef struct {
const char *fileName;
NSData *contents;
int fileType;
int packetnumber;
int totalpackets;
} file_packet;
No entanto, para arquivos pequenos (8 KB e menos), pensei que um pacote seria suficiente.
Portanto, para um pacote, pensei que seria capaz de criar um arquivo_pacote, definir suas propriedades e enviá-lo via -sendDataToAllPeers: withDataMode: error:
NSData *fileData;
file_packet *packet = (file_packet *)malloc(sizeof(file_packet));
packet->fileName = [filename cStringUsingEncoding:NSASCIIStringEncoding];
packet->contents = [NSData dataWithContentsOfFile:selectedFilePath];
packet->packetnumber = 1;
packet->totalpackets = 1;
packet->fileType = 56; //txt document
fileData = [NSData dataWithBytes:(const void *)packet length:sizeof(file_packet)];
free(packet);
NSError *error = nil;
[self.connectionSession sendDataToAllPeers:fileData withDataMode:GKSendDataReliable error:&error];
if (error) {
NSLog(@"An error occurred: %@", [error localizedDescription]);
}
No entanto, não acho que algo esteja definindo fileData - eerror
não exibe nada.
Quando um arquivo é recebido, faço o seguinte:
file_packet *recievedPacket = (file_packet *)malloc(sizeof(file_packet));
recievedPacket = (file_packet *)[data bytes];
NSLog(@"packetNumber = %d", recievedPacket->packetnumber);
...
No entanto, a saída no console épacketNumber = 0
, mesmo quando defino packetNumber como 1.
Estou perdendo o óbvio? Eu não sei muito sobreNSData
ouGameKit
.
Então, minha pergunta é: posso adicionar umfile_packet
noNSData
e, em caso afirmativo, como faço com êxito - e como você divide arquivos em vários pacotes?