Το NodeId.java αντιπροσωπευει το κλειδί. Αποθηκεύει την διεύθυνση (ip και port) και το κλειδί ενός κόμβου Pastry, περιέχει μεθόδους για την μετατροπή του ζευγαριού ip-address και port-number σε κλειδί 32 byte , το κάθε byte είναι ένας αριθμός από το 0 έως το 15.
Το NodeId.java περιέχει επίσεις μεθόδους πακεταρίσματος του ζευγαριού ip-address και port-number σε ένα πίκακα 8 byte για να μπορέσει να το στείλει μέσω διαδυκτίου στους άλλους κόμβους Pastry.
Η δρομολόγηση των μηνυμάτων , η εισαγωγή καινούριων κόμβων και η απομάκρυνση παλιών κόμβων γίνονται όλλα στο PastryNode.java.
Η Μεταγωγή Πακέτων (Message Routing) γίνεται από τις εξείς μεθόδους :
public void Rout(byte [] message, byte [] key) :
Υλοποιεί την μεταγωγή όπως περιγράφεται στο Paper. Δηλαδή όταν έρεται ένα μήνυμα αποφασίζει με βάση το κλειδί (key) αν θα το δώσει σε ένα από τους κόμβους στο Leaf set ή σε έναν από τους κόμβους στο routing table ή θα το παραδώσει στο τρέχον κόμβο.
private boolean InTheRangeOfLeafNode(byte [] key) :
Αποφασίζει αν το κλειδί είναι στα όρια του πίνακα Leaf set. Αν ναι επιστρέφει true αν όχι false.
private NodeId FindTheClosestInLeafs(byte [] key) :
Επιστρέφει το κοντινότερο κόμβο στο κλειδί από τους κόμβους του Leaf set. Δεν επιστρέφει ποτέ null γιατί εξετάζεται και ο τρέχον κόμβος.
private NodeId FindTheClosestInRoutingTable(byte [] key):
Επιστρέφει το κοντινότερο κόμβο στο κλειδί από τους κόμβους του routing table. Δεν επιστρέφει ποτέ null γιατί εξετάζεται και ο τρέχον κόμβος.
Η εισαγωγή καινούριου κόμβου (Node arrival) γίνεται από τις εξείς μεθόδους:
public boolean Join(InetAddress host, int port):
Στέλνει μια αίτηση για εισαγωγή στο δίκυο Pastry στην διεύθυνση host, port.
private void SendRoutingTable(InetAddress ip, int port) :
Στέλνει τον πίνακα δρομολόγησης στην διευθυνση ip,port.
private void SendLeafSet(InetAddress ip, int port) :
Στέλνει το Leaf set στην διευθυνση ip,port.
private void Assimilate_Information(byte[] mesg, int messageSize) :
Αφομιώνει τις πληροφορίες που βρίσκονται στο πίνακα mesg που έχει μέγεθος messageSize. Αυτή η συνάρτηση καλείται όταν κάποιος άλλος κόμβος Pastry μας στείλει το πίνακα δρομολόγησης του ή το LeafSet του.
private void InsertInLeafSet(NodeId newNode):
Αποθηκευεί το κόμβο newNode στο πίνακα LeafSet, αν βέβαια έχει θέση για αυτό εκεί πέρα.
private void InsertInRoutingTable(NodeId newNode):
Αποθηκευεί το κόμβο newNode στο πίνακα δρομολόγησης, στην κατάλληλη θέση.
private void NotifyNodes():
Στέλνει σε κάθε κόμβο που έχει στο πίνακα δρομολόγησης ή στο LeafSet το πίνακα δρομολόγησης ή το LeafSet του.
private boolean NotInLeafSet(NodeId temp):
Επιστρέφει true αν ο κόμβος temp βρίσκεται στο LeafSet, αν όχι επιστρέφει false. Αυτή η μέθοδος βοηθάει να ξέρουμε αν έναν κόμβο που βρίσκεται στο πίνακα δρομολόγησης τον είδαμε στο LeafSet, έτσι αποφεύγουμε να το ξαναστείλουμε πληροφορίες.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου