Δευτέρα 13 Φεβρουαρίου 2012

Επικοινωνία Client – Server


     Η επικοινωνία μεταξύ serverclient πραγματοποιείται για δύο λόγους. Είτε για την υποβολή νέων πληροφοριών (Tokens) από τον client, είτε για την απάντηση της βέλτιστης διαδρομής σε ερώτημα ενός client. Και στις δύο περιπτώσεις, οι δύο οντότητες επικοινωνούν στέλνοντας ένα αντικείμενο TokenList με διαφορετικό τύπο κάθε φορά. Αναλυτικότερα ο server ανοίγει ένα ServerSocket και μέσα σε ένα ατέρμονα βρόγχο περιμένει για τις αιτήσεις των clients. Μόλις δεχθεί μια νέα αίτηση, την δέχεται, εκκινεί ένα νέο thread το οποίο ανοίγει τα ρεύματα εισόδου και εξόδου (με την χρήση των αντικειμένων ObjectInputStream και ObjectOutputStream). Στην συνέχεια το νέο thread λαμβάνει από το ρεύμα εισόδου το εισερχόμενο μήνυμα το οποίο το μετατρέπει (Casting) σε ένα αντικείμενο TokenList και εξετάζει τον τύπο του, δηλαδή αν είναι CLIENTLIST όπου πρόκειται για παραλαβή νέων δεδομένων ή GOOGLELIST όπου πρόκειται για ερώτημα βέλτιστης διαδρομής.

·                   Στην περίπτωση παραλαβής νέων δεδομένων, για κάθε Token της λίστας καλείται η μέθοδος insertIntoTokenDB(int AndroidDeviceID,double PointStartLong, double PointStartLat, double PointEndLong, double PointEndLat, float Speed, long Time, float Distance), όπου και αποθηκεύεται το νέο Token στην βάση δεδομένων

·                  Στην περίπτωση της απόκρισης για βέλτιστη διαδρομή το αντικείμενο TokenList περιέχει ένα Token το οποίο περιλαμβάνει το σημείο εκκίνησης και το σημείο τερματισμού της διαδρομής που θέλει να διανύσει ο χρήστης. Τα σημεία αυτά δίνονται στον constructor της κλάσης Routes όπου και ανακτούνται οι διαδρομές τις Google για την διαδρομή που επιθυμεί να διανύσει ο χρήστης. Στην συνέχεια για κάθε μια από αυτές τις διαδρομές καλείται η μέθοδος estimateRouteTime(TokenList route,  int minutes) της κλάσης GoogleMapsDB όπου και βαθμολογείται η διαδρομή με βάση το μήκος της και τον χρόνο που χρειάζεται για να διανυθεί. Τέλος, εγγράφεται στο ρεύμα εξόδου που έχει ανοιχτεί για επικοινωνία με τον client το αντικείμενο TokenList με τον μεγαλύτερο score

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου