Παρασκευή 23 Ιανουαρίου 2009

Υποδομή επικοινωνίας

Η υλοποιήση της Υποδομής επικοινωνίας έχει πλέον ολοκληρωθεί και δεν προβλέπονται αλλαγές ή περαιτέρω προσθήκες.

Αποτελείται από 3 αρχεία :
a) Connector.java
b) MessageReceiver.java
c) SendedMessage.java

Λίγα λόγια για τις τάξεις.
Η τάξη Connector.java δοθέντος ενός αριθμού για port διημιουργεί μια υποδοχή (ως IP διεύθυνση χρησιμοποιείται η IP διεύθυνση του τρέχοντος μηχανήματος). Ένα αντικείμενο της τάξης MessageReceiver.java θα περιμένει πάνω από την θύρα, που διημιουργήθηκε από την Connector.java, για νέα μηνύματα και κάθε φορά που λαμβάνει ένα μήνυμα το παραδίδει στην κατάλληλη μέθοδο του αντικείμενου Connector, με το έχει συσχετισεί.

Αποστολή μηνυμάτων
Για αποστλή μηνυμάτων καλείται η μέθοδος Send(byte [] data, InetAddress host, int port) της τάξης Connector.java. Η μεθοδος Send διημιουργεί ένα πακέτο που για αρχικό bit έχει τον αριθμό 0 ( για να ξεχωρίζουμε τα μηνύματα από τις επιβεβαιώσεις ), ένα σειριακό αριθμό και τα δεδομένα που πρέπει να στείλει. Πριν στείλει το μήνυμα διημιουργεί ένα αντικείμενο τύπου SendedMessage με κωδικό το σειριακό αριθμό του μηνύματος που είναι να στείλει. Το αντικείμενο αυτο θα καταχωριθεί σε ένα buffer ο οποίος περιέχει όλα τα μηνύματα που στάλθηκαν και περιμένουν επιβεβαίωση.
Μόλις στείλει το μήνυμα μεσω της υποδοχής, διακόπτει την λειτουργία του για ένα χρονικό διάστημα (πέφτει για ύπνο). Μόλις ξυπνίσει ελέγχει αν το μήνυμα που στάλθηκε έχει επιβεβαιωθεί. Αν το μήνυμα έχει επιβεβαιωθεί η μέθοδος Send διαγράφει το αντικείμενο SendedMessage από το buffer ( με τα μηνύματα που στάλθηκαν και περιμένουν επιβεβαίωση ) και επιστρέφει true. Αν το μήνυμα δεν έχει επιβεβαιωθεί επανλαμβάνει την διαδικασία αποστολής άλλες 2 φορές. Αν και οι δύο αποτύγχουν η μέθοδος Send διαγράφει το αντικείμενο SendedMessage από το buffer ( με τα μηνύματα που στάλθηκαν και περιμένουν επιβεβαίωση ) και επιστρέφει false.

Λήψη μηνύματος
Όταν το αντικείμενο τύπου MessageReceiver λαβει ένα μήνυμα, εξετάζει το αρχικό κωδικό του μηνύματος. Αν ο κωδικός είναι 0 , σημαίνει ότι το μήνυμα είναι μήνυμα δεδομένων και παραδίδεται στην μέθοδο Receive(final DatagramPacket pack) του αντικειμένου Connector, αν ο κωδικός είναι 1 σημαίνει ότι είναι επιβεβαίωση κάποιου μηνύματος που στείλαμε προηγούμενα, και παραδίδεται στην μεθοδο ReceiveAck( String ReceivedMesgNum) του αντικειμένου Connector.
Η μεθοδος Receive στέλνει μια επιβεβαίωση στην διεύθυνση από την οποία έλαβε το μήνυμα.
Η επιβεβαίωση είναι ένα μήνυμα με κωδικό 1 και περιέχει το σειριακό αριθμό του μηνύματος που λάβαμε.
Η μεθοδος ReceiveAck μόλις λάβει μια επιβεβαίωσει πηγαίνει στο buffer με τα μηνύματα που στάλθηκαν και περιμένουν επιβεβαίωση και το ενημερώνει για την επιβεβαίωση που λάβαμε.

Δομή Εργασίας Pastry

Η εργασία θα αποτελείτα από 3 κομμάτια :

1) Υποδομή Επικοινωίας - Αναλαμβάνει την ανταλλαγή μηνυμάτων μεταξύ των κόμβων

2) Pastry - Αντιπροσωπεύει το Δακτύλιο του Pastry. Σε αυτό το κομμάτι γίνεται η δρομολόγηση των μηνυμάτων, είσοδος και έξοδος κόμβου.

3) Γραφικό κομμάτι - Επικοινωνίας με τον χρήστη και εμφάνιση της κατάστσης του Κόμβου (Πίνακας δρομολήγησης , Φύλλα, Γείτονες).