(Distributed Sum)
Η υλοποίηση της εφαρμογής μέσα από το Eclipse
Η ομάδας μας θα αναπτύξει μια απλή εφαρμογή Android τύπου proof-of-concept. Συγκεκριμένα θα αναπτύξει μια εφαρμογή «κατανεμημένης πρόσθεσης» ακολουθίας ακεραίων αριθμών. Η ανάπτυξη της εφαρμογής θα γίνει με χρήση του IDE Eclipse Ganymede και το παρεχόμενο plug-in για την ανάπτυξη εφαρμογών Android. Συγκεκριμένα θα δημιουργήσουμε Project DistributedSum στο φάκελο του οποίου μέσα στο src θα υλοποιήσουμε την εφαρμογή μας καθώς επίσης και θα ενσωματώσουμε τα αρχεία πηγαίου κώδικα του JCGrid. Συνεπώς η υλοποίηση μας θα αποτελείται από δύο μέρη: α) την αμιγώς ανάπτυξη της λειτουργικότητας της εφαρμογής μας και β) την τροποποίηση και διασύνδεση του έτοιμου πηγαίου κώδικα του JCGrid με την εφαρμογή μας.
Α) Ανάπτυξη της Λειτουργικότητας της Εφαρμογής μας
Ο χρήστης τρέχοντας την εφαρμογή θα μπορεί μέσω του πληκτρολογίου να εισάγει μια σειρά ακεραίων αριθμών µέσω της διεπαφής χρήστη του Android και συγκεκριμένα σε ένα JTextField ώστε στη συνέχεια πατώντας ένα κουμπί «ΟΚ» τύπου JButton να λαμβάνει το αποτέλεσμα της πρόσθεσης. Δίπλα στο κουμπί «ΟΚ» θα υπάρχει ένα κουμπί «Cancel» τύπου JButton το οποίο θα καθαρίζει το JTextField.
Αναλυτικά, ο χρήστης μέσω του πληκτρολογίου της συσκευής εισάγει ακεραίους οι οποίοι πρέπει να διαχωρίζονται μεταξύ τους με «+» . Η ακολουθία αυτή των ακεραίων θα αποτελεί ένα ενιαίο String. Το String αυτό θα έχει καθορισμένη μορφή η οποία αν δεν τηρείται θα εμφανίζεται μήνυμα λάθους. Στη συνέχεια ο χρήστης πατώντας το κουμπί «ΟΚ», θα στέλνει μέσω του client το String αυτό στο server όπου θα διασπάται σε επιμέρους tokens που θα αντιπροσωπεύουν κάθε ένα ακέραιο. Έπειτα βάσει των διαθέσιμων workers που είναι στο δίκτυο και βάσει τους πλήθους των προσθετέων, το συνολικό άθροισμα θα διασπάται σε επιμέρους αθροίσματα. Τα επιμέρους αυτά αθροίσματα θα αποστέλλονται στους workers οι οποίοι θα τα υπολογίζουν. Ακολούθως οι workers θα επιστρέφουν τα επιμέρους αθροίσματα(ακεραίους) στον server o οποίος με τη σειρά του θα υπολογίζει το τελικό άθροισμα και θα το αποστέλλει στον client σαν String. Στην περίπτωση που ο χρήστης πατήσει το κουμπί “Cancel” το JTextField θα καθαρίζει από τα περιεχόμενα.
Β) Ανάπτυξη της Διασύνδεσης της Εφαρμογής μας με το JCGrid
Στο πακέτο του πηγαίου κώδικα της λειτουργικότητας της εφαρμογής μας θα υπάρχουν και οι κλάσεις θα υλοποιούν την διασύνδεση της εφαρμογής με το JCGrid όπως επίσης και αυτές που θα υλοποιούν τον server/client/worker.

• Κάθε client μας θα υλοποιείται χρησιμοποιώντας τις τάξεις GridClient και GridNodeClientConfig
• Κάθε worker μας θα υλοποιείται χρησιμοποιώντας τις τάξεις GridNodeWorkerConfig, GridWorker, GridWorkerFeedback, Worker και WorkerThread.
• Ο server μας θα υλοποιείται χρησιμοποιώντας τις τάξεις AdminHandlerThread, AdminMainDemon, ClientHandlerThread, ClientMainDemon, GridNodeServerConfig, GridServer, HandlerThread, HandlersThread, MainDemon, WorkerHandlerThread, WorkerMainDemon, και WorkRequestQueue.
Επίσης με τις παραπάνω τάξεις θα υλοποιείται και η επικοινωνία των Server/Client/Worker.
Συγκεκριμένα ο server θα έχει μια ServerSocket με την default port 10101 και ο client ClientSocket με IP localhost 8084.
Επιπλέον ο server θα τρέχει κάποιους Demon για παρασκηνιακή επικοινωνία με clients / workers.
Επίσης θα υπάρχουν νήματα και διαχειριστές νημάτων(ThreadHandlers). Για τα νήματα αυτά θα υπάρχουν και οι ανάλογοι HashMaps με τους client/workers.
Α) Ανάπτυξη της Λειτουργικότητας της Εφαρμογής μας
Ο χρήστης τρέχοντας την εφαρμογή θα μπορεί μέσω του πληκτρολογίου να εισάγει μια σειρά ακεραίων αριθμών µέσω της διεπαφής χρήστη του Android και συγκεκριμένα σε ένα JTextField ώστε στη συνέχεια πατώντας ένα κουμπί «ΟΚ» τύπου JButton να λαμβάνει το αποτέλεσμα της πρόσθεσης. Δίπλα στο κουμπί «ΟΚ» θα υπάρχει ένα κουμπί «Cancel» τύπου JButton το οποίο θα καθαρίζει το JTextField.
To Grafical User Interface της εφαρμογής μας
Αναλυτικά, ο χρήστης μέσω του πληκτρολογίου της συσκευής εισάγει ακεραίους οι οποίοι πρέπει να διαχωρίζονται μεταξύ τους με «+» . Η ακολουθία αυτή των ακεραίων θα αποτελεί ένα ενιαίο String. Το String αυτό θα έχει καθορισμένη μορφή η οποία αν δεν τηρείται θα εμφανίζεται μήνυμα λάθους. Στη συνέχεια ο χρήστης πατώντας το κουμπί «ΟΚ», θα στέλνει μέσω του client το String αυτό στο server όπου θα διασπάται σε επιμέρους tokens που θα αντιπροσωπεύουν κάθε ένα ακέραιο. Έπειτα βάσει των διαθέσιμων workers που είναι στο δίκτυο και βάσει τους πλήθους των προσθετέων, το συνολικό άθροισμα θα διασπάται σε επιμέρους αθροίσματα. Τα επιμέρους αυτά αθροίσματα θα αποστέλλονται στους workers οι οποίοι θα τα υπολογίζουν. Ακολούθως οι workers θα επιστρέφουν τα επιμέρους αθροίσματα(ακεραίους) στον server o οποίος με τη σειρά του θα υπολογίζει το τελικό άθροισμα και θα το αποστέλλει στον client σαν String. Στην περίπτωση που ο χρήστης πατήσει το κουμπί “Cancel” το JTextField θα καθαρίζει από τα περιεχόμενα.
Β) Ανάπτυξη της Διασύνδεσης της Εφαρμογής μας με το JCGrid
Στο πακέτο του πηγαίου κώδικα της λειτουργικότητας της εφαρμογής μας θα υπάρχουν και οι κλάσεις θα υλοποιούν την διασύνδεση της εφαρμογής με το JCGrid όπως επίσης και αυτές που θα υλοποιούν τον server/client/worker.

• Κάθε worker μας θα υλοποιείται χρησιμοποιώντας τις τάξεις GridNodeWorkerConfig, GridWorker, GridWorkerFeedback, Worker και WorkerThread.
• Ο server μας θα υλοποιείται χρησιμοποιώντας τις τάξεις AdminHandlerThread, AdminMainDemon, ClientHandlerThread, ClientMainDemon, GridNodeServerConfig, GridServer, HandlerThread, HandlersThread, MainDemon, WorkerHandlerThread, WorkerMainDemon, και WorkRequestQueue.
Επίσης με τις παραπάνω τάξεις θα υλοποιείται και η επικοινωνία των Server/Client/Worker.
Συγκεκριμένα ο server θα έχει μια ServerSocket με την default port 10101 και ο client ClientSocket με IP localhost 8084.
Επιπλέον ο server θα τρέχει κάποιους Demon για παρασκηνιακή επικοινωνία με clients / workers.
Επίσης θα υπάρχουν νήματα και διαχειριστές νημάτων(ThreadHandlers). Για τα νήματα αυτά θα υπάρχουν και οι ανάλογοι HashMaps με τους client/workers.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου