Besoin d'info sur les struct
Bonjour à tous,
Voilà je travaille en ce moment sur l'integration de Real-Time Matches dans mon jeu avec Game Center, et comme il n'y a absolument rien sur internet et que le tutoriel de Ray Wenderlich date de 2 ans, je dois me contenter de la doc Apple sur le sujet.
Je dois envoyer des données aux autres joueurs et en recevoir. J'ai remarque que dans la doc Apple ils utilisaient des struct qu'ils convertissaient ensuite en NSData pour envoyer les données.
Donc j'ai fais connaissance avec les struct, ça marche bien tranquille. Sauf que pour recevoir les données, ils font comme ca (*) :
Packet *p = (Packet*)[data bytes];
if (p.messageKind == PositionMessage) {
}
Je dois comprendre que Packet est une struct principale et que d'après ca
PositionPacket msg;
msg.messageKind = PositionMessage;
il y a des sous-struct tels que PositionPacket et quand on reçoit les données on identifie chaque type de Packet avec une string messageKind.
Sauf que comment est ce que justement on fait un struct principal et ses "sous-struct" ? Parce que d'après (*) ils utilisent une struct parent pour récupérer les données dedans puis ils affinent le type de struct avec messageKind.
Merci d'avance
Réponses
Salut,
Examine le fichier header .h de la class Packet, tu auras tout simplement la structure complète de la classe
Et je trouve ca où ? Parce que avec ce que tu m'as dis j'ai tapé Packet reference class dans google mais ca donne rien. Et quand je tape Packet dans Xcode il ne me propose rien, donc pour lui ça n'existe pas, et aucune trace de Packet dans le doc non plus..
La classe Packet n'est pas un classe Apple, c'est fait par Ray Wenderlich
Comment ça se fait qu'on trouve ça dans la doc Apple alors ? Et tu pourrais me filer le lien de la classe stp ?
Voila le lien http://www.raywenderlich.com/12976/how-to-make-a-simple-playing-card-game-with-multiplayer-and-bluetooth-part-7`
Pour la class Packet, je suis plutôt dev OSX que IOS donc je suis pas sur de ma réponse
Mais je suis pas sur que Packet.h du site Ray Wenderlich et Packet de la doc Apple ce soit la même chose..
Sélectionnes le mot Packet dans l'éditeur XCode puis clique sur le bouton droit de la souris puis choisis
"Jump to Definition" qui va ouvrir le fichier .h correspondant !
(Et Alt-Clic pour voir le QuickHelp sur la structure Packet, Alt-Double-Clic pour voir la doc sur Packet)
"Symbol not found" : quand j'entre Packet, Xcode ne me propose rien, donc quand j'écris Pa y'a pas Packet dans la liste de complétion qui apparait.. Xcode ne le connait pas quoi
Salut,
Packet et ... ne sont pas des classes Apple, c'est juste des exemples pour expliquer comment envoyer des données ( sous forme de structures,...) et comment recevoir ces données. Leurs objectif c'est juste d'expliquer les méthodes principales avec des simple exemples :
La par exemple PositionPacket est une structure mais tu peux construire ton packet ( NSData) juste avec un entier,... selon tes besoins, mais généralement une structure pour contenir plus d'informations.
Le site de ray wanderlich se base bien sur la documentation d'Apple pour leurs tutorials...
C'est bien ce que je pensais et c'est d'ailleurs ce que je disais au début Est ce que vous pouvez justement me dire si on peut créer des sortes de structures principales tel que MyMainPacket qui, quand les données sont reçues, récupère les données, et en fonction du messageKind, crée une struct spécifique qui est une "sous-struct" de MyMainPacket qui reprenne les informations et qu'ensuite on puisse les traiter ?
Salut,
Si tu veux une structure imbriquée et plus compliquée pars plutôt sur des objets. Par exemple :
la dans la MyMainPacket tu peux avoir des références sur d'autres structures de données ( structure C, autre classes,....). "UneAutreClasse" par exemple peux une sous classe de NSObject qui vas contenir des autres infos.
et la quand tu vas recevoir ton objet MyMainPacket et en fonction de son type tu peux remplir la structure ( objet) autreClasse.
J'espère que j'était clair, sinon le mieux c'est que tu met ton code et nous dire ou tu bloque exactement.
Perso moi je ferai un truc dans ce genre là : Bon j'ai pas vérifié/testé, c'est fait en live mais bon c'est pour l'idée.
@samir2303 : merci de m'avoir répondu, même si je dois avouer que c'est plus quelque chose comme AliGator m'a donné que je cherchais. En gros avoir une structure générique qui récupère les données et qui affine en fonction du messageKind
@AliGator : puai c'est bien un truc comme ça que je cherchais, bah je vais tester et je te tien au courant
Bon petit compte rendu :
Au final je fais comme ca :
Et pour ceux qui chercheraient comment passer un NSString dans une struct à envoyer puis le récupérer voilà :
Voilà . Merci pour votre aide
EDIT : en fait ça marche pas bien parce que quand aStruct.string est initialisée elle se remplit de caractères et donc quand on remplace que la moitié, bah les autres après sont toujours là et donne des trucs..bizarre.. :P
EDIT 2 : en fait je fais comme ca et ca marche :
myStruct aStruct;
NSString *stringToConvert = @str;
NSLog(@stringToConvert length : %i, stringToConvert.length);
NSLog(@original string : %s, aStruct.string);
for (int i = 0; i < stringToConvert.length; i++) {
aStruct.string = [stringToConvert characterAtIndex:i];
}
aStruct.stringLength = stringToConvert.length;
NSLog(@string after modifs : '%s', aStruct.string);
NSData *data = [NSData dataWithBytes:&aStruct length:sizeof(myStruct)];
myStruct *receiverStruct = (myStruct *)[data bytes];
NSString *stringReceived = [[NSString alloc] initWithBytes:receiverStruct->string length:receiverStruct->stringLength encoding:NSASCIIStringEncoding];
NSLog(@string after bytes range : '%@'", stringReceived);
et ca donne :
stringToConvert length : 3
original string : f ffà¿E
string after modifs : 'str ffà¿E'
string after bytes range : 'str'