Η επικοινωνία μεταξύ server – client πραγματοποιείται για δύο λόγους. Είτε για την υποβολή νέων
πληροφοριών (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.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου