Παρασκευή 6 Φεβρουαρίου 2009

Δοκιμαστικό Client Interface

Σήμερα σχεδιάσαμε ένα δοκιμαστικό client interface όπως φαίνεται στην εικόνα:






Αυτό που φαίνεται θα εμφανίζεται στην πλευρά του κινητού Client.

Παρασκευή 19 Δεκεμβρίου 2008

2o Παραδοτεο (συνέχεια)

ΕΠΙ ΜΕΡΟΥΣ ΔΟΜΟΕΝΟΤΗΤΕΣ ΛΟΓΙΣΜΙΚΟΥ ΚΙ ΕΠΙΚΟΙΝΩΝΙΑ

Μηνύματα(messages) και υποδοχές(sockets)

Η εφαρμογή μας αποτελείται από τρεις βασικές δομοενότητες λογισμικού (modules), τον server, τον worker και τον client. Οι δομοενότητες αυτές επικοινωνούν μεταξύ τους με μηνύματα (messages). Η ανταλλαγή των μηνυμάτων πραγματοποιείται μέσω των αντίστοιχων υποδοχών (sockets) που υπάρχουν σε κάθε κόμβο. Συγκεκριμένα υπάρχουν οι υποδοχές του server (server sockets) οι υποδοχές των workers (worker sockets) και οι υποδοχές των clients (client sockets).

Εφαρμογή και επικοινωνία κόμβων

Στην εφαρμογή μας ο client θα έχει δύο κύρια modules. Ένα για την εμφάνιση της φόρμας εισόδου/εξόδου δεδομένων/αποτελεσμάτων κι ένα για την αποστολή/λήψη των δεδομένων/αποτελεσμάτων από και προς τον server.
Ο server περιλαμβάνει τέσσερα κύρια modules. Το πρώτο είναι αυτό της επικοινωνίας με τον client για λήψη/αποστολή δεδομένων/αποτελεσμάτων.Έπειτα το module διάσπασης δεδομένων. Ακολουθεί το module της επικοινωνίας με τους workers για αποστολή/λήψη δεδομένων/αποτελεσμάτων και τέλος το module σύνθεσης δεδομένων.
Ο worker έχει δύο κύρια modules. To module επικοινώνίας με τον server για αποστολή/λήψη δεδομένων/αποτελεσμάτων και το module σύνθεσης δεδομένων.

Ειδικότερα:
Βήμα 1ο
CLIENT: Με την εκκίνηση της εφαρμογής αρχικά δημιουργούνται τα sockets των server, client και worker, στη συνέχεια εγκαθιδρύεται μια νέα συνεδρία (session) μεταξύ client και server, ακολουθεί η εκτέλεση του κύριου σώματος της εφαρμογής και μετά εγκαθιδρύεται συνεδρία (session) μεταξύ server και workers.
Στην φόρμα εισαγωγής δεδομένων του client (InputForm) ο χρήστης εισάγει μια ακολουθία φυσικών αριθμών και τελεστών η οποία αποτελεί μία συμβολοσειρά (string). Αν η συμβολοσειρα σθμφωνεί με το προβλεπόμενο μορφότυπο, τότε πατώντας το πλήκτρο ΟΚ τα δεδοένα θα αποστέλλονται στον server μέσω του module επικοινωνίας με τον server.
Βήμα 2ο
SERVER: Αρχικά εγκαθιδρύεται συνεδρία μεταξύ server και workers και αφού ο server διασπάσει την σμβολοσειρά εισόδου σε επι-μέρους αθροίσματα (module διάσπασης) τα διαμοιράζει στους διαθέσιμους workers (module επικοινωνίας με τους workers).
Βήμα 3ο
WORKER: O worker λαμβάνει το επι-μέρους άθροισμα από τον server και το υπολογίζει (module σύνθεσης) και στη συνέχεια επιστρέφει στον server τα αποτελέσματα (module επικοινωνίας με server).
Βήμα 4ο
SERVER: O server αφού λάβει τα επι-μέρους αθροίσματα από τους workers τα συνθέτει και τα αθροίζει (module σύνθεσης) υπολογίζοντας το τελικό άθροισμα. Έπειτα αποστέλλει το άθροισμα αυτό στον client (module επικοινωνίας με client).
Βήμα 5ο
CLIENT: O client λαμβάνει το τελικό άθροισμα από τον server (module επικοινωνίας με server) και αυτό εμφανίζεται ως συμβολοσειρά στη φόρμα εξόδου (OutputForm).


Πέμπτη 18 Δεκεμβρίου 2008

Στο Eclipse δημιουργήσαμε ένα νέο Android Project το οποίο ονομάσαμε Distributed Sum. Μέσα σ' αυτό προσθέσαμε το αρχείο DistributedSum.java. Στη συνέχεια εκτελέσαμε το project και το eclipse εγκατέστησε την εφαρμογή μας στον Android emulator. Η εφαρμογή μας εμφανίζεται στο menu του emulator με το όνομα DistributedSum και με το αντίστοιχο εικονίδιο.
Επειδή η εφαρμογή δεν είναι πλήρης από πλευράς κώδικα λειτουργικότητας περιέχει τον default κώδικα του eclipse και εμφανίζει Hello World. Η εκτέλεση της εφαρμογής γίνεται είτε πατώντας Run μέσα από το eclipse είτε χειροκίνητα μέσα από το menu του emulator πατώντας το εικονίδιό της.
Στη συνέχεια θα προσθέσουμε μια τάξη για τη διαχείριση της γραφικής διεπαφής χρήστη (GUI). Η τάξη αυτή θα αφορά στη φόρμα γραφικών στην οποία ο χρήστης θα πληκτρολογεί την ακολουθία των φυσικών αριθμών που επιθυμεί να υπολογιστεί. Συγκεκριμένα η φόρμα αυτή θα είναι ένα TextDialog τύπου OK/Cancel βασισμένο στο TextEntryDialog που βρίσκεται στο ApiDemos\App\Dialog\TextEntryDialog του emulator.




Περιγραφή Υλοποίησης της JCGrid Εφαρμογής μας στην Πλατφόρμα Android
(Distributed Sum)

Η υλοποίηση της εφαρμογής μέσα από το Eclipse

Η ομάδας μας θα αναπτύξει μια απλή εφαρμογή Android τύπου proof-of-concept. Συγκεκριμένα θα αναπτύξει μια εφαρμογή «κατανεμημένης πρόσθεσης» ακολουθίας ακεραίων αριθμών. Η ανάπτυξη της εφαρμογής θα γίνει με χρήση του IDE Eclipse Ganymede και το παρεχόμενο plug-in για την ανάπτυξη εφαρμογών Android. Συγκεκριμένα θα δημιουργήσουμε Project DistributedSum στο φάκελο του οποίου μέσα στο src θα υλοποιήσουμε την εφαρμογή μας καθώς επίσης και θα ενσωματώσουμε τα αρχεία πηγαίου κώδικα του JCGrid. Συνεπώς η υλοποίηση μας θα αποτελείται από δύο μέρη: α) την αμιγώς ανάπτυξη της λειτουργικότητας της εφαρμογής μας και β) την τροποποίηση και διασύνδεση του έτοιμου πηγαίου κώδικα του JCGrid με την εφαρμογή μας.

Α) Ανάπτυξη της Λειτουργικότητας της Εφαρμογής μας

Ο χρήστης τρέχοντας την εφαρμογή θα μπορεί μέσω του πληκτρολογίου να εισάγει μια σειρά ακεραίων αριθμών µέσω της διεπαφής χρήστη του 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.

• Κάθε 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.