У меня есть перечисление в моей игре.Простое строковое сообщение с добавленным PacketType отправляется вместе с сообщением (поэтому он знает, что делать с сообщением) через WIFI-соединение GameKit.В качестве отправной точки я использовал образец кода Apple GKRocket.
Сам код работает фантастически;Я просто хочу понять, что делает строка с CFSwapInt32HostToBig
. Что, черт возьми, это делает?и почему он должен это делать? Я предполагаю, что он удостоверяется, что значение PacketType может быть преобразовано в целое число без знака, чтобы оно могло отправлять его надежно, но это мне не кажется правильным.
В документации говорится: «Преобразует 32-разрядное целое число из формата с прямым порядком байтов в собственный порядок байтов хоста».но я не понимаю, что на самом деле означает.
typedef enum {
PacketTypeStart, // packet to notify games to start
PacketTypeRequestSetup, // server wants client info
PacketTypeSetup, // send client info to server
PacketTypeSetupComplete, // round trip made for completion
PacketTypeTurn, // packet to notify game that a turn is up
PacketTypeRoll, // packet to send roll to players
PacketTypeEnd // packet to end game
} PacketType;
// ....
- (void)sendPacket:(NSData *)data ofType:(PacketType)type
{
NSLog(@"sendPacket:ofType(%d)", type);
// create the data with enough space for a uint
NSMutableData *newPacket = [NSMutableData dataWithCapacity:([data length]+sizeof(uint32_t))];
// Data is prefixed with the PacketType so the peer knows what to do with it.
uint32_t swappedType = CFSwapInt32HostToBig((uint32_t)type);
// add uint to data
[newPacket appendBytes:&swappedType length:sizeof(uint32_t)];
// add the rest of the data
[newPacket appendData:data];
// Send data checking for success or failure
NSError *error;
BOOL didSend = [_gkSession sendDataToAllPeers:newPacket withDataMode:GKSendDataReliable error:&error];
if (!didSend)
{
NSLog(@"error in sendDataToPeers: %@", [error localizedDescription]);
}
}