Πριν
ξεκινήσουμε την περιγραφή των διαφόρων συστατικών της αρχιτεκτονικής του
συστήματος θα αναφερθούμε σε κλάσεις οι οποίες είναι κοινές στον client – server και συμβάλουν στην μεταξύ τους
επικοινωνία.
·
Η κλάση PointΤ περιγράφει ένα σημείο στο
παγκόσμοιο σύστημα συντεταγμένων. Αποτελείται από δύο μεταβλητές τύπου double
οι οποίες απεικονίζουν το γεωγραφικό μήκος και πλάτος του αντικειμένου (latitude και longitude). Επίσης περιέχει
μεθόδους για τον υπολογισμό της απόστασης μεταξύ του ιδίου του αντικειμένου και
ενός άλλου σημείου (getDistance(PointT p), όπως και τον έλεγχο για την
ομοιότητα δύο σημείων (isSamePoint(PointT p).
·
Η κλάση Token
αντιπροσωπεύει
ένα μέρος της διαδρομής
απεικονιζόμενο με δύο σημεία του παγκόσμιου συστήματος συντεταγμένων, δηλαδή δύο αντικείμενα PointΤ. Επίσης περιέχει δεδομένα: για την
χρονική στιγμή την οποία κάποιος χρήστης βρέθηκε στο αρχικό σημείο του Token (startingTime), την χρονική
διάρκεια σε millisecond
που χρειάστηκε ο χρήστης για να διανύσει το Token (duration) καθώς και την απόσταση
του Token
εκφρασμένη σε μέτρα (distance). Η κλάση αυτή περιέχει τρεις διαφορετικούς constructors που εφαρμόζονται ανάλογα
με την πολιτική που ακολουθείται (αν το αντικείμενο δημιουργείται την χρονική
στιγμή που βρίσκεται στην αρχή του Token ο χρήστης ή την χρονική στιγμή που βρίσκεται στο
τέλος του Token, ή αν δημιουργηθεί ένα Token με ελειπής πληροφορίες). Τέλος
περιέχει πλήθος μεθόδων για τον υπολογισμό γεωμετρικών και μή στοιχείων.
Αναλυτικότερα, Η μέθοδος isSameToken(Token t) ελέγχει αν τα σημεία αρχής και
τέλους του Token
συμπίπτουν με τα σημεία αρχής και τέλους ενός διαφορετικού δεδομένου Token. Η μέθοδος isSameToken(Token t, int meters) έχει την ίδια λειτουργία με την
παραπάνω μέθοδο, με την μόνη διαφορά ότι για τον έλεγχο των δύο Tokens μπορεί να υπάρξει μια απόκλιση
εκφρασμένη σε μέτρα μεταξύ των δύο Tokens. Η μέθοδος isOnTheLine(PointT p, double div) επιστρέφει true αν το δεδομένο σημείο PointT βρίσκεται στην νοητή γραμμή του Token που εκφράζει το συγκεκριμένο
αντικείμενο (δίνεται ως όρισμα επίσης παράγοντας απόκλισης του σημείο από την
γραμμή). Η μέθοδος isPartOfLine(PointT p, double div) επιστρέφει true αν το δεδομένο σημείο PointT ανήκει στο ευθύγραμμο τμήμα του Token που εκφράζει το συγκεκριμένο
αντικείμενο (και εδώ δίνεται παράγοντας απόκλισης). Η μέθοδος estimateTime(Token tok) υπολογίζει προσσεγγιστικά τον
χρόνο που χρειάζεται για να διανιστεί το Token δεδομένου ενός άλλου Token χρησιμοποιώντας την απλή μέθοδο
των τριών.
·
Η κλάση TokenList περιγράφει μια
διαδρομή. Η διαδρομή αυτή αποτελείται από μικρότερα τμήματα διαδρομών οι οποίες
αποτελούνται από Tokens.
Επίσης η κλάση αυτή υλοποιεί λειτουργίες αποθήκευσης και ανάκτησης του
αντικειμένου σε αρχείο και λειτουργία συντήρησης της λίστας. Συγκεκριμένα η
κλάση TokenList
περιλαμβάνει: μια λίστα από Tokens
(ArrayList<Token> list), καθώς και μεταβλητές για την αποθήκευση
υπολογισμένου χρόνου διαδρομής από το σύστημα
(estimatedTime) και υπολογισμένου χρόνου διαδρομής από το Google Maps (approximateTime), μεταβλητή για
την αποθήκευση του μήκους της διαδρομής σε μέτρα (distance), μεταβλητή για το όνομα του αρχείου
αποθήκευσης της λίστας (storeList), χρόνο ζωής των Tokens στην λίστα (ttl) , λίστα για τις
οδηγίες της διαδρομής που επιστρέφονται από το Google Maps (instructions) και οι παρακάτω σταθερές
που δηλώνουν τον τύπο της διαδρομής
o
OTHERTLIST: Λίστα άγνωστου τύπου
o
CLIENTLIST: Λίστα με πληροφορίες και Tokens που σύλλεξε ένας χρήστης για
αποστολή στον server
o
GOOGLELIST:
Λίστα η οποία περιέχει Tokens που επέστρεψε το Google Maps για μια συγκεκριμένη διαδρομή
o
SERVERLIST:
Λίστα που παράγει ο server
για την απάντηση σε ερωτήματα της βέλτιστης διαδρομής από τους clients.
Η κλάση TokenList περιλαμβάνει μεθόδους για την εκκαθάριση παλιών εγγραφών – Tokens από την λίστα, όπου ένα διαφορετικό
thread από το
κύριο thread
της εφαρμογής αναστέλλεται και σε σταθερή χρονική περίοδο αφυπνίζεται και καλεί
την μέθοδο cleanList() η οποία διαγράφει παλιές εγγραφές από την λίστα. Επίσης,
η κλάση TokenList περιλαμβάνει μεθόδους για την αποθήκευση των Tokens της λίστας σε αρχείο
saveList(String file), μεθόδους για την ανάκτηση μια λίστας από αρχείο
loadList(String file). Για την αποθήκευση των Tokens σε αρχείο χρησιμοποιείται η κλάση Reader η οποία θεωρείται βοηθητική κλάση
και δεν θα περιγραφεί.
Ορισμένες από τις παραπάνω λειτουργίες των κλάσεων δεν
χρησιμοποιούνται στην τελική παραδοτέα έκδοση του συστήματος. Οι λειτουργίες
αυτές υλοποιήθηκαν για την βοήθεια στην ανάπτυξη του συστήματος, για λόγους debugging, ή επειδή η υλοποίησή τους κατά τα
αρχικά στάδια ανάπτυξης του συστήματος είχε κριθεί αναγκαία.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου