background image

5.6 Η κατάσταση “Waiting for Ready” 

[113] 

 

5.6 Η κατάσταση “Waiting for Ready” 

 
Μέχρι  τώρα  είδαμε  ότι  ο  διακομιστής  στέλνει  ένα  μήνυμα  σε  κάθε 

πελάτη ζητώντας του να συνδεθεί και να στείλει το όνομα του. Αφού ο 
διακομιστής  έχει  λάβει  την  απάντηση  από  όλους  τους  συνδεδεμένους 
πελάτες  το  παιχνίδι  μπορεί  να  ξεκινήσει.  Ο  διακομιστής  γνωρίζει  ποιοι 
είναι  οι  υπόλοιποι  παίκτες,  όμως  οι  πελάτες  δεν  γνωρίζουν  τίποτα  για 
τους υπόλοιπους παίκτες ακόμη. 

Γι αυτό το λόγο δημιουργήσαμε την κατάσταση “Waiting for Ready” 

κατά την οποία ο διακομιστής στέλνει ένα μήνυμα σε κάθε πελάτη, με το 
οποίο τον ενημερώνει για τους άλλους παίκτες. Δημιουργούμε λοιπόν μια 
υποκλάση της κλάσης “Packet” με το όνομα “PacketTypeServerReady”. 

 

Κάθε πελάτης χρησιμοποιεί αυτό το μήνυμα για να δημιουργήσει ένα 

λεξικό “NSMutableDictionary” με τα αντικείμενα του κάθε παίκτη. Έτσι 
μοιράζονται  όλοι  οι  πελάτες  τις  ίδιες  πληροφορίες  με  το  διακομιστή. 
Επιπλέον  στο  ίδιο  πακέτο  μεταφέρονται  τα  στοιχεία  του  παιχνιδιού  για 
κάθε πελάτη, δηλαδή ο συνολικός χρόνος η κατηγορία ερωτήσεων καθώς 
και ο συνολικός αριθμός αυτών. 

Για να εξασφαλίσει ο διακομιστής ότι όλοι οι πελάτες έχουν λάβει το 

μήνυμα “Server Ready” και έχουν δημιουργήσει επιτυχώς το λεξικό των 
παικτών καθώς και τα υπόλοιπα στοιχεία του παιχνιδιού, περιμένει από 
κάθε πελάτη να στείλει πίσω ένα μήνυμα “Client Ready”. Το νέο μήνυμα 
“PacketTypeClientReady”  δεν  χρειάζεται  επιπλέον  δεδομένα,  οπότε  δε 
δημιουργούμε  νέα  υποκλάση.  Προσθέτουμε  απλώς  στη  μηχανή 
καταστάσεων τον παρακάτω κώδικα: