J'ai essayé de créer un réseau client/serveur simple via Bluetooth avec 5 iPods. Un iPod enverra des chaînes de base comme "stop" ou "go" à quatre iPods, qui feront ensuite diverses choses quand ils recevront les commandes. J'utilise actuellement GameKit sans PeerPicker, et il a été peu fiable et compliqué de démarrer même les connexions. Une fois connecté, je peux envoyer des données très bien entre deux appareils, mais pas plus. J'aimerais pouvoir diffuser des messages courts et simples à des «clients» iPod à partir d'un «serveur» iPod sans réseau (comme une télécommande). J'ai regardé de nombreux exemples, y compris les chars et les exemples de wiTap, mais je suis surpris qu'il n'y ait rien de plus simple sans avoir besoin d'un réseau.Diffusion de messages Client/Serveur iPhone
Voici comment je commence la connexion:
- (IBAction) btnConnect:(id)sender
{
if (sender == connectServer) {
self.currentSession = [[GKSession alloc] initWithSessionID:@"0000"
displayName:nil
sessionMode:GKSessionModeServer];
NSLog(@"Setup Server Connection");
} else { //connectClient
// Peers discover themselves ...
self.currentSession = [[GKSession alloc] initWithSessionID:@"0000"
displayName:nil
sessionMode:GKSessionModeClient];
NSLog(@"Setup Client Connection");
}
amAcceptingConnections = YES;
[self.currentSession peersWithConnectionState:GKPeerStateAvailable];
self.currentSession.delegate = self;
self.currentSession.disconnectTimeout = 30;
[self.currentSession setDataReceiveHandler:self withContext:nil];
// Advertise the session to peers
self.currentSession.available = YES;
}
Et je gère la connexion avec le didChangeState dans le délégué
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
thePeerID = [session displayNameForPeer:peerID];
NSLog(@"didChangeState was called from peerID: %@.", thePeerID);
self.currentSession = session;
switch (state) {
case GKPeerStateAvailable:
thePeerID = [session displayNameForPeer:peerID];
NSLog(@"Peer %@ Available", thePeerID);
[session connectToPeer:peerID withTimeout:30];
NSLog(@"Issued Peer Connection");
//session.available = NO; //TODO: Look at this
break;
case GKPeerStateUnavailable:
NSLog(@"Peer %@ Unavailable", thePeerID);
break;
case GKPeerStateConnected:
NSLog(@"Peer %@ Connected", thePeerID);
break;
case GKPeerStateDisconnected:
NSLog(@"Peer %@ Disconnected", thePeerID);
[self.currentSession release];
currentSession = nil;
break;
}
}
Le problème est que les feux de la méthode didChangeState quand il est bon et prêt et le comportement est imprévisible. Peut-être que c'est un problème avec Bluetooth ou GameKit, mais je voudrais me connecter sans que l'autre iPod "autorise" la connexion. Est-ce possible? Je pense que je vais avoir besoin d'un routeur et d'un réseau pour quelque chose d'aussi simple?
Merci