• Nenhum resultado encontrado

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

N/A
N/A
Protected

Academic year: 2023

Share "Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών"

Copied!
65
0
0

Texto

(1)

Τ.Ε.Ι. Καβάλας

Σχολή Τεχνολογικών Εφαρμογών Τμήμα Βιομηχανικής Πληροφορικής

Πτυχιακή Εργασία

ΘΕΜΑ

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος

εφαρμογών

Σπουδαστές;

Μελισσόπουλος Αναστάσιος 635 Αρβανπη Αντιγόνη 562

2007

(2)

Τ.Ε.Ι. Καβάλας

Σχολή Τεχνολονικών Εφαρμογών Τμήμα Βιομηχανικής Πληροφορικής

Πτυχιακή Εργασία

ΘΕΜΑ

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος

εφαρμογών

Σπουδαστές:

Μελισσόπουλος Αναστάσιος 635 Αρβανίτη Αντιγόνη 562

Εισηγητές:

Τσέτσος Κωνσταντίνος

Μήτσα Αικατερίνη

(3)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξαγωγή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

Περιεχόμενα

(4)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ______________ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

Βήμα 3 ° ... 22

9. Οδηγίες Εγκατάστασης... 23

9.1 Οδηγίες εγκατάστασης του c lie n t... 23

9.2 Οδηγίες εγκατάστασης του se rve r...24

9.3 Οδηγίες για την σωστή ρύθμιση του SQL Server της Microsoft...25

9.4 Οδηγίες για την ρύθμιση της MySQL Database...31

9.5 Οδηγίες για την ρύθμιση της Oracle lOg...34

10. Ο κώδικας της βιβλιοθήκης...40

Βιβλιογραφία...66

Τμήμα Βιομηχανικής Πληροφορικής

(5)

Δημιουρνία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

Εισαγωγή

Στις μέρες μας οι υπολογιστές αποτελούν αναπόσπαστο κομμάτι της καθημερινής μας ζωής. Τους χρησιμοποιούμε για την εκπαίδευση, την επικοινωνία μας, για μελέτες, ακόμα και για τις αγορές μας. Επιπροσθέτως, χιλιάδες εξειδικευμένες εργασίες μπορούν να πραγματοποιηθούν με την βοήθεια τον ηλεκτρονικών υπολογιστών.

Για την επίτευξη όλων των παραπάνω, χρησιμοποιείται πάντα κάποιο μέσο αλληλεπίδρασης που συνήθως είναι κάποιο λογισμικό. Στις μέρες μας είναι πολύ συνηθισμένο, οι εφαρμογές που δημιουργούνται να εσωκλείουν όλο και μεγαλύτερο πλήθος λειτουργιών και ικανοτήτων. Ως αποτέλεσμα αυτής της μεγιστοποίησης των εφαρμογών, οι χρήστες δεν μπορούν να έχουν καθολική εκμετάλλευση όλων των λειτουργιών μέσα από απλή χρήση. Ένα καλό παράδειγμα πολύ μεγάλης εφαρμογής είναι οι εφαρμογές, οι οποίες χρησιμοποιούνται για την εμπορική διαχείριση μίας εταιρίας. Τα προγράμματα αυτά μπορεί να εσωκλείουν την διαχείριση της αποθήκης, την λογιστική διαχείριση, ίσως την μισθοδοσία κτλ. Συμπερασματικά, το ίδιο πρόγραμμα θα χρησιμοποιείται και από το τμήμα προσωπικού και από το λογιστήριο και από την αποθήκη αλλά σε διαφορετικό μέγεθος, τρόπο και συχνότητα από τον καθένα. Ισως ακόμα και κάποιες δυνατότητες να είναι παντελώς άγνωστες σε αυτούς που δεν τις χρησιμοποιούν, οπότε και άχρηστες.

Μαζί με τα παραπάνω, πρέπει να προσθέσουμε και την ιδιαιτερότητα του κάθε χρήστη και την δυνατότητα του στη μάθηση νέων τεχνολογιών, που μπορεί να δυσκολέψει το έργο του, την παραγωγικότητα του, ακόμα και να προκαλέσει κάποιο σοβαρό σφάλμα λόγω άγνοιας, όταν βρεθεί μπροστά σε ένα πολύπλοκα σύστημα με πράγματα που αδυνατεί να καταλάβει, ΐτ σ ι, κρίνεται σκόπιμο ότι θα ήταν καλό ο κάθε χρήστης να μπορούσε να παραμετροποιήσει τις εφαρμογές που χρησιμοποιεί με τέτοιο τρόπο ώστε να ταιριάζουν στις γνώσεις του και τις δυνατότητες του.

Ένα τρίτο στοιχείο που πρέπει να προστεθεί στα παραπάνω, είναι η απαίτηση του χρήστη, να μπορεί να έχει αυτή την άνεση όχι μόνο από το γραφείο του αλλά και από οποιοδήποτε άλλο σημείο το οποίο έχει πρόσβαση σε κοινό δίκτυο με τον κύριο χώρο εργασίας του.

Στηριζόμενοι στα παραπάνω, προσπαθήσαμε να δημιουργήσουμε μία δυναμική βιβλιοθήκη η οποία θα αναλάμβανε να διαβάσει τις ρυθμίσεις του γραφικού περιβάλλοντος του εκάστοτε χρήστη, να τις εξάγει σε μία ευρέως διαδεδομένη μορφή όπως η xml και να τις αποθηκεύσει σε κάποιο σημείο το οποίο θα ήταν προσβάσιμο, ασχέτως του υπολογιστή που χρησιμοποιούμε, για μετέπειτα ανάκτηση. Με άλλα λόγια προσπαθήσαμε να ενσωματώσουμε ότι θα ήθελε ένας προγραμματιστής για να προσωποποιήσει την εφαρμογή του, χωρίς να χρειάζεται να ξαναεφεύρει τον τροχό από την αρχή. Έτσι, η βιβλιοθήκη μπορεί να ενσωματωθεί σε οποιαδήποτε εφαρμογή, χωρίς να χρειάζεται ο προγραμματιστής να γράφει ούτε μια γραμμή κώδικα.

(6)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξαγωνή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

1. Επιλογή τεχνολογιών

Πριν ξεκινήσουμε την ανάλυση σχετικά με το θέμα της πτυχιακής αυτής, θα πρέπει να πούμε μερικά πράγματα για τον λόγο που επιλέχθηκαν τα εργαλεία και η γλώσσα προγραμματισμού, καθώς και τον λόγο που απορρίφθηκαν κάποιες άλλες.

Μία πρώτη σκέφη ήταν να αναπτυχθούμε σε περιβάλλον δικτυακών εφαρμογών (web applications) οι οποίες κάνουν χρήση των φιλομετρητών ιστού και web server. Ο λόγος που απορρίφθηκε αυτή η ιδέα ήταν γιατί, πρώτον, το γραφικό περιβάλλον των δικτυακών εφαρμογών αλλάζει πολύ σπάνια. Για την ακρίβεια, μετά από έρευνα βρήκαμε ότι για να αλλάξουμε τις ιδιότητες του γραφικού περιβάλλοντος πρέπει να κάνουμε χρήση JavaScript. Μία εναλλακτική ιδέα είναι να χρησιμοποιήσουμε την τεχνολογία της Microsoft, ASP.NET με μία γλώσσα προγραμματισμσύ VB.NET ή Ctt. Τσ μειονέκτημα αυτής της τεχνολογίας είναι ότι χρειάζεται ειδικό web server για την στέγαση των σελίδων, που ονομάζεται IIS. Αυτός ο server είναι διαθέσιμος μόνο στις professional εκδόσεις των Windows. Μία τέτοια έκδοση δεν ήταν διαθέσιμη σε εμάς σε αυτό το σημείο της έρευνας.

Επίσης, ακολουθώντας την κατεύθυνση των δικτυακών εφαρμογών, ο βαθμός δυσκολίας μειώνεται μιας και όλες οι διεργασίες γίνονται ουσιαστικά στο κομμάτι του server, ο οποίος στεγάζει και το περιβάλλον του client. Έτσι, καταλήξαμε στην απόφαση να απορρίφουμε τις δικτυακές εφαρμογές.

Μιλώντας πλέον για κλασικές windows-εφαρμογές, έπρεπε να αποφασίσουμε τι γλώσσα προγραμματισμού θα διαλέξουμε. Εξ αρχής δεν ήμασταν διατεθειμένοι να ασχοληθούμε με C++ , όχι για κάποιον ιδιαίτερο λόγο, απλά για να αποκτήσουμε γνώσεις και από άλλες γλώσσες προγραμματισμού για να έχουμε και μέτρο σύγκρισης.

Η ιδέα που κυριάρχησε από την αρχή ήταν να κάνουμε χρήση της γλώσσας C#. Η C#

είναι μία καινούρια γλώσσα προγραμματισμού, την οποία δημιούργησε η εταιρία Microsoft ως αντίπαλο δέος στην Java. Και οι δύο γλώσσες είναι απόλυτα αντικειμενοστραφής κάτι που τις δίνει πλεονέκτημα απέναντι στην πατροπαράδοτη C++. Βέβαια δεν μπορούμε να κατέβουμε στο επίπεδο που μπορεί η C++ αλλά αυτό είναι ένα σημείο το οποίο δεν ενδιαφέρει τόσο την πτυχιακή μας μιας και μιλάμε καθαρά για software και όχι για ενσωματωμένα συστήματα.

Επίσης, η C# κάνει τέλεια χρήση του .NET framework, ενός σετ βιβλιοθηκών και όχι μόνο. Ουσιαστικά βασίζεται σε αυτό μιας και όλες οι χρησιμοποιούμενες βιβλιοθήκες της βρίσκονται μέσα σε αυτό. Το .NET framework ήταν ένας ακόμη λόγος που μας οδήγησε στην C#. Μέσα από την μικρή μας εμπειρία διαπιστώσαμε ότι η τεχνολογία .NET είναι τρομερά αναπτυσσόμενη στσν χώρο του προγραμματισμού, χάρις την απλότητα που προσφέρει σε θέματα κώδικα, που υπό άλλες συνθήκες θα απαιτούσαν χρόνο για να πραγματοποιηθούν.

Το περιβάλλον ανάπτυξης που χρησιμοποιήθηκε ε 2005 .NET.

ιι το Microsoft Visual Studio

Τμήμα Βιομηχανικής Πληροφορικής

(7)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξαγωγή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

2. Οδηγίες προς τους χρήστες της βιβλιοθήκης

Η διαδικασία έχει ως εξής, ο προγραμματιστής ο οποίος θα χρησιμοποιήσει την βιβλιοθήκη, πρέπει πριν την παραδώσει στον πελάτη, να εξάγει τις ρυθμίσεις της βασικής μορφής της εφαρμογής και να την αποθηκεύσει με το όνομα lOOOO.xml. στον φάκελο Repository που πρέπει να βρίσκεται μέσα στον γονικό φάκελο του 5θΓνθΓ(Σχετικά με τους φακέλους και τα αρχεία που συνοδεύουν την βιβλιοθήκη συμβουλευτείτε το αντίστοιχο κεφάλαιο). Το όνομα αυτό συμβολίζει τον γονικό λογαριασμό root(σχετικά με τον λογαριασμό root συμβουλευτείτε το κεφάλαιο οδηγιών εγκατάστασης). Επίσης θα πρέπει να φροντίσει κατά την εγκατάσταση της εφαρμογής του να δημιουργήσει όλους τους απαραίτητους φακέλους και αρχεία που αριθμούνται στο κεφάλαιο «Φάκελοι και συνοδευτικά αρχεία».

3. Φάκελοι και συνοδευτικά αρχεία

Εκτός από το αρχείο της βιβλιοθήκης υπάρχουν και κάποια επιπλέον στοιχεία τα οποία πρέπει να συμπεριλάβει ο χρήστης της βιβλιοθήκης κατά την χρήση της. Μιλάμε για κάποιους φακέλους και κάποια αρχεία ρυθμίσεων τα οποία χρησιμοποιούνται από την βιβλιοθήκη για αρχικοποίηση και ανταλλαγή αρχείων από το κομμάτι του client στο κομμάτι του server και αντίθετα. Ας τα δούμε ένα ένα με την σειρά.

1. Φάκελος Repository: Είναι ο φάκελος ο οποίος κρατάει όλα τα αρχεία με τις ρυθμίσεις του κάθε χρήστη. Όποια αλλαγή κάνει κάποιος χρήστης στον λογαριασμό του ή όποιος καινούριος χρήστης δημιουργείται, αυτομάτως το αρχείο ρυθμίσεων του ενημερώνεται ή δημιουργείται αντίστοιχα μέσα σε αυτόν τον φάκελο.

2. Φάκελος tmp: Είναι ο φάκελος ο οποίος χρησιμοποιείται από τον server κατά την λήψη αρχείων από τους συνδεμένους χρήστες. Όσα αρχεία λαμβάνονται πρώτα δημιουργούνται μέσα στον φάκελο tmp και στη συνέχεια αντιγράφονται στον φάκελο Repository. Η διαδικασία αυτή γίνεται για να αποφύγουμε τυχών απρόβλετττες καταστάσεις, όπως διακοπή ρεύματος, οι οποίες θα μπορούσαν να προκαλέσουν απώλεια δεδομένων.

3. Αρχείο port.conf: Βρίσκεται στον server και είναι το αρχείο στο οποίο καταγράφεται η πόρτα η οποία χρησιμοποιεί ο server για την επικοινωνία με τους client

4. Αρχείο settings.conf: Βρίσκεται στον server και είναι το αρχείο στο οποίο αποθηκεύονται οι ρυθμίσεις σχετικά με την σύνδεση του server με την βάση δεδομένων.

5. Αρχείο settings.conf: Βρίσκεται στον client και χρησιμοποιείται από την βιβλιοθήκη κατά την διαδικασία αποστολής, λήψης και εισαγωγής του χρήστη. Εδώ κρατούνται οι ρυθμίσεις σχετικά με την IP στην οποία

(8)

Δημιουρνία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

βρίσκεται ο server και την πόρτα στην οποία ακούει. Για την σωστή σύνδεση, η τιμή του port πρέπει να είναι ίδια με αυτήν που υπάρχει στο αρχείο port.conf του server και η IP ίδια με την IP του υπολογιστή στον οποίο έχουμε εγκαταστήσει τον server.

Φάκελος Exports: Βρίσκεται στον client και χρησιμοποιείται κατά την εξαγωγή των ρυθμίσεων. Όσοι χρήστες έκαναν αλλαγή των ρυθμίσεων τους από των συγκεκριμένο client, σε αυτόν τον φάκελο υπάρχει και ένα αντίγραφο με τον κωδικό που τους αντιστοιχεί. Αν επέλθουν αλλαγές στον ίδιο λογαριασμό από άλλο υπολογιστή ο οποίος φιλοξενεί την εφαρμογή, οι αλλαγές αυτές δεν θα φαίνονται σε αυτό το αρχείο.

Φάκελος Downloads: Βρίσκεται στον client και φιλοξενεί όλα τα αρχεία χρηστών οι οποίοι έχουν εισέλθει στην εφαρμογή από τον συγκεκριμένο υπολογιστή. Συγκεκριμένα, κατά την εισαγωγή του χρήστη στην εφαρμογή, το αρχείο ρυθμίσεων του αποθηκεύεται σε αυτόν τον φάκελο και στην συνέχεια χρησιμοποιείται για την αρχικοποίηση του γραφικού περιβάλλοντος.

Φάκελος tmp: Βρίσκεται στον client και χρησιμοποιείται κατά την λήψη αρχείων. Μόλις τα αρχεία ολοκληρωθούν, μεταφέρονται στον φάκελο Downloads και σβήνονται από τον φάκελο tmp.

Αρχείο lOOOO.xml: Είναι το βασικό αρχείο ρυθμίσεων το οποίο πρέπει να υπάρχει μέσα στον φάκελο Repository του server για να μπορέσουν να δημιουργηθούν οι νέοι χρήστες (κατά την διαδικασία δημιουργίας χρήστη το βασικό αρχείο ρυθμίσεων αντιγράφεται και ονομάζεται με βάση τον κωδικό του εκάστοτε χρήστη).

4. Με λίγα λόγια πως δουλεύουν όλα μαζί

Οι λειτουργίες τις οποίες περιλαμβάνει η βιβλιοθήκη δεν είναι ιδιαίτερα περίπλοκες. Παρ' όλ' αυτά για την κατανόηση τους χρειάζεται μία μέτρια γνώση σε θέματα TCP/IP δικτύων, xml, βάσεων δεδομένων, windows programming και multithreading programming μιας και γίνεται χρήση όλων αυτών των τεχνολογιών ως ένα επίπεδο. Αυτό είναι το μόνο σημείο που την καθιστά σχετυιά δύσκολή στην κατανόηση. Για αυτό τον λόγο θα παρουσιάσουμε το κάθε κομμάτι ξεχωριστά με κάποια μικρά παραδείγματα που χρησιμοποιούν τις ίδιες τεχνολογίες .NET με την βιβλιοθήκη μας. Για αρχή θα περιγράφουμε τον τρόπο χρήσης της βιβλιοθήκης καθώς και το πως είναι δομημένη.

Το σενάριο χρήσης έχει ως εξής: Αφού εγκατασταθεί η εφαρμογή πλήρως, ο διαχειριστής δημιουργεί τους λογαριασμούς χρηστών για τους χρήστες της εφαρμογής. Η διαδικασία αυτή εκτελείται τοπικά στον server, ο οποίος επικοινωνεί με την βάση σε πρώτη φάση για να ελέγξει αν τα στοιχεία του νέου λογαριασμού συμπίπτουν με τα στοιχεία κάποιου άλλου χρήστη. Αν όλα πάνε καλά, η διαδικασία προχωράει με την δημιουργία του χρήση στην βάση. Σε αντίθετη περίπτωση, το αίτημα δημιουργίας χρήστη δεν γίνεται δεκτό

Τμήμα Βιομηχανικής Πληροφορικής

(9)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξανωνή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

και ένα ενημερωτικό μήνυμα ενημερώνει τον διαχειριστή. Μαζί με την δημιουργία του χρήστη, δημιουργείται και το αντίστοιχο αρχείο ρυθμίσεων για τον συγκεκριμένο χρήστη το οποίο αρχικά είναι ίδιο με το βασικό αρχείο ρυθμίσεων.

Όταν τώρα ο χρήστης επιχειρήσει από τον client να εισέλθει στην εφαρμογή, θα πρέπει να περάσει από μία διαδικασία αναγνώρισης αλφαριθμητικού για να μπορέσει να λάβειτις ρυθμίσεις του. Η διαδικασία έχει ως εξής: Ο χρήστης δίνει username και password, τα στοιχεία του λαμβάνονται από τον server και εν συνεχεία ελέγχεται η ορθότητα τους μέσω της βάσης δεδομένων. Αν ο χρήστης είναι έγκυρος, ο server ανακτά από την βάση έναν μοναδικό κωδικό που αντιστοιχεί στον συγκεκριμένο χρήστη και βρίσκει τσ αρχείο ρυθμίσεων του χρήστη με κωδική ονομασία, ίδια με αυτήν του μοναδικού κωδικού του χρήστη. Στη συνέχεια το αρχείο αποστέλλεται στον client γραμμή προς γραμμή. Όταν ολοκληρωθεί η αποστολή, ο client διαβάζει το αρχείο με την βοήθεια μεθόδου που υπάρχει στην βιβλιοθήκη και αρχικοποιεί το περιβάλλον της εφαρμογής.

Στην περίπτωση που ο χρήστης θέλει να προβεί σε αλλαγές σχετικά με τις ρυθμίσεις του η διαδικασία είναι η εξής: Αρχικά θα πρέπει να έχει αποθηκευτεί ο κωδικός χρήστη ο οποίος αποστέλλεται κατά την διαδικασία εισαγωγής στην εφαρμογή. Αφού προβεί στις αλλαγές, το αρχείο αποστέλλεται γραμμή γραμμή στον server όπου και αντικαθιστά τσ υπάρχον αρχείο.

(10)

Δημιουρνία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

5. Επικοινωνία μέσω TCP/IP δικτύου

Για την μεταφορά των αρχείων από τον client στον server και αντίστροφα, χρειάστηκε να δουλέψουμε σε επίπεδο δικτυακών πρωτοκόλλων. Ο βασικός λόγος ήταν η μεταφορά των αρχείων που έπρεπε να αποθηκευτούν στον server. Μία απ' ευθείας σύνδεση του client στην βάση δεδομένων δεν ήταν επιθυμητή μιας και κάτι τέτοιο περιπλέκει την διαδικασία εγκατάστασης κατά πολύ στην περίπτωση που ο client δεν βρίσκεται στον ίδιο υπολογιστή με την βάση δεδομένων (η χρήση απομακρυσμένων βάσεων δεδομένων απαιτεί εγκατάσταση επιπλέων συνοδευτικών εργαλείων ή δεν είναι αφυκτή σε μερικές περιπτώσεις, όπως με την χρήση των .NET βιβλιοθηκών). Ένας δεύτερος λόγος, ήταν ότι δεν μπορούμε να αποθηκεύσουμε σε πεδίο της βάσης μία τιμή με μέγεθος μεγαλύτερο από 64ΚΒ, μέγεθος όχι και τόσο μεγάλο για ένα αρχείο ρυθμίσεων μίας σχετικά σύνθετής εφαρμογής. Ας μην ξεχνάμε ότι για να εκφράσουμε μία τιμή σε γλώσσα xml απαιτούνται αρκετά byte αφού πρέπει να ορίσουμε την αρχή του στοιχείου, την τιμή του και το τέλος του.(σχετικά με xml στο επόμενο κεφάλαιο).

Το πρωτόκολλο που χρησιμοποιήσαμε είναι το γνωστό TCP. Μαζί με το TCP χρησιμοποιήσαμε όμως και ένα μικρό πρωτόκολλο χειραψίας το οποίο σχεδιάσαμε εμείς.

Ουσιαστικά πρόκειται για μία ανταλλαγή σημάτων προκειμένου να γίνει σωστά η διαβίβαση των αρχείων. Η διαδικασία έχει ως εξής:

1. Ο client κάνοντας χρήση μίας από της τρεις μεθόδους, login, upload ή download, στέλνει στον server ένα string με τιμή "login", "upload" ή "download " αντίστοιχα.

2. Ο server μόλις αντιληφθεί το αίτημα του client, το πρώτο πράγμα που κάνει είναι να εξετάσει την τιμή του string. Στη συνέχεια διαχειρίζεται την κάθε περίπτωση ξεχωριστά.

Τμήμα Βιομηχανικής Πληροφορικής

(11)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

2 .1 . Στην περίπτωση που το string έχει τιμή login, ο server περιμ ένει από τον client να αποστείλει δύο σήματα με το username και το password αντίστοιχα. Στην συνέχεια ο server ελέγχει τα σταλθέντα στοιχεία μέσω της βάσης δεδομένων και αν είναι έγκυρα τότε του αποστέλλει πίσω τον μοναδικό σειριακό αριθμό που αντιστοιχεί στα στοιχεία του χρήστη. Σε αντίθετη περίτττωση αποστέλλεται ο αριθμός -1.

2 .2 . Στην περίπτωση που ο client ζητά να κάνει upload, ο server περιμ ένει από τον client να του αποστείλει τον μοναδικό αριθμό του χρήστη, του οποίου το αρχείο θέλει να αποστείλει. Στην συνέχεια ο σειριακός αριθμός ελέγχεται για την ορθότητά του.

Αμέσως μετά, ο client αποστέλλει τον αριθμό των γραμμών του αρχείου. Ο αριθμός αυτός ελέγχεται από τον server και αν όντως πρόκειται για αριθμό τότε ξεκινάει η λήφη του αρχείου γραμμή προς γραμμή.

2 .3 . Στην περίπτωση που ο client ζητά να κάνει χρήση της μεθόδου download, τότε πρέπει να αποστείλει τον μοναδικό αριθμό του χρήστη. Στην συνέχεια ο server θα ελέγξει τα στοιχεία αν είναι έγκυρα θα καταμετρήσει τον αριθμό γραμμών του αρχείου ρυθμίσεων και θα ξεκινήσει την αποστολή γραμμή προς γραμμή.

Για την TCP επικοινωνία χρησιμοποιήθηκαν δύο κλάσεις που συμπεριλαμβάνονται στο .NET framework. Μιλάμε για τις κλάσεις TcpCIient και TcpListener. Ουσιαστικά όλη η δικτυακή επικοινωνία στηρίζεται σε αυτές τις δύο κλάσεις. Είναι δύο πολύ δυνατές κλάσεις που μας επιτρέπουν την προσπέλαση δικτύου χωρίς να χρειαστεί να πέσουμε σε επίπεδο socket. Ουσιαστικά είναι ένα μικρό επίπεδο πιο ψηλά το οποίο είναι αρκετό για να καλύψει την τυπικότητα και τις λεπτομέρειες των socket. Ας δούμε όμως την κάθε κλάση ξεχωριστά.

5.1 Κλάση TcpListener

Η κλάση Tcp Listen er π αρέχει αττλές μεθόδους με τις οποίες μπορούμε να α κούσουμε και να δεχτούμε εισερχόμενες σ υ νδ έσ εις με σύγχρονο τρόπο.

Μ πορούμε να χρησιμοποιήσουμε είτε έναν TcpCIient ή Socket για να σ υνδεθούμε με έναν Tcp Listener. Μ πορούμε να δ η μιουργήσουμε έναν Tcp Listen er χρησιμοποιώντας ένα IP endPoint. μία τοπική διεύθυνση IP και έναν αριθμό θύρας, ή απλά έναν αριθμό θύρας. Μ πορούμε να ορίσουμε A ny για την τοπική διεύθυνση IP και 0 γ ια την τοπική θύρα αν θέλουμε το υ π οκείμενο service να δώ σει τιμ ές σε αυτά τα π εδ ία για εμάς. Εάν επ ιλέξο υμ ε τον τελευτα ίο τρόπο, μπορούμε να χρησιμοποιήσουμε το LocalEndpoint για να αναγνω ρίσουμε τις δο θ είσ ες τιμ ές.

Μ πορούμε να χρησιμοποιήσουμε την μέθοδο S tart για να ξεκινήσουμε να ακούμε εισερχόμενες σ υνδέσεις. Η S tart θα τοπ οθετήσει σε σ ειρ ά προτεραιότητας τις εισ ερ χό μενες σ υνδέσεις μέχρι να κ α λέσουμε την μέθοδο Stop ή ο ι συνδ έσ εις φτάσουν σε πλήθος να είνα ι ίσες με M axC onnection s. Χ ρησιμ οπ οιούμε είτε την μέθοδο AcceptSocket ή AcceptTcpCIient γ ια να βγά λο υμ ε μία σύνδεση από την ουρά προτεραιότητας. Αυτές ο ι δύο μ έθοδοι θα μπλοκάρουν. Αν θ έλο υ μ ε να αποφ ύγουμε το μπλοκάρισμα μπορούμε να χρησιμοπ οιήσουμε την μέθοδο Pending πρώτα γ ια να ελέγξουμε αν υπάρχουν δ ια θ έσ ιμ ες σ υ νδ έσ εις στην σ ειρά προτεραιότητας.

(12)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξανωγή και αποθήκευση ______________ρυθμίσεων γραφικού περιβάλλοντος εφαρμονών_____________

Παράδειγμα using System;

using System.10;

using System.Net;

using System.Net.Sockets;

using System.Text;

class MyTcpListener {

public static void M a i n O

// Set the TcpListener on port 13000.

Int32 port = 13000;

IPAddress localAddr = IPAddress.Parse("127.0.0.1");

// TcpListener server = new TcpListener(port);

TcpListener server = new TcpListener(localAddr, port);

// Start listening for client requests, server.Start();

// Buffer for reading data Byte[] bytes = new Byte[256];

String data = null;

Console.Write("Waiting for a connection... ");

// Perform a blocking call to accept requests.

// You could also user server.AcceptSocket() hi TcpClient client = server.AcceptTcpClientO;

Console.WriteLine("Connected!");

data = null;

// Translate data bytes to a ASCII string.

data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);

Console.WriteLine(String.Format("Received: (0)", data));

byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

// Send back a response, stream.Write(msg, 0, msg.Length);

Console.WriteLine(String.Format("Sent: (0)", data));

Τμήμα Βιομηχανικής Πληροφορικής

(13)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

catch(SocketException e) 1

Console.WriteLine("SocketException: (0)", e);

(Microsoft, TcpListener Class, 2007)

5.2 Κλάση TcpCIient

H κλάση TcpCIient παρέχει απλές μεθόδους για την σύνδεση, αποστολή και λήψη δεδομένων μέσω δικτύου με σύγχρονο τρόπο. Για να μπορέσει ο TcpCIient να ανταλλάξει δεδομένα, θα πρέπει ένας TcpListener ή ένα Socket να δημιουργηθεί για να ακούει τις εισερχόμενες αιτήσεις. Μπορούμε να συνδεθούμε σε αυτόν τον listener με έναν από τους παρακάτω τρόπους:

i. Δημιουργώντας έναν TcpCIient και καλώντας μία από τις τρεις διαθέσιμες Connect μεθόδους.

ϋ. Δημιουργώντας έναν TcpCIient χρησιμοποιώντας το όνομα του host και τον αριθμό της θύρας του απομακρυσμένου host. Αυτός ο δημιουργός θα επιχειρήσει αυτόματα μία σύνδεση.

Παράδειγμα

static void Connect(String String message)

// Create a TcpCIient.

// Note, for this client to work you need to have a TcpServer // connected to the same address as specified by the server, port // combination.

Int32 port = 13000;

TcpCIient client = new TcpCIient(server, port);

// Translate the passed message into ASCII and store it as a I I array.

Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);

Byte

NetworkStream stream = client.GetStre // Send the message to the connected TcpServer.

stream.Write(data, 0, data.Length);

(14)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

Console.WriteLinei"Sent: (Ο)", message);

// Receive the TcpServer.response.

// Buffer to store the response bytes, data = new B y t e [256];

// String to store the response ASCII representation.

String responseData = String.Empty;

// Read the first batch of the TcpServer response bytes.

Int32 bytes = stream.Read(data, 0, data.Length);

responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

Console.WriteLine("Received: (0)", responseData);

)

catch (ArgumentNullException e) {

Console.WriteLine("ArgumentNullException: (0}

}

catch (SocketException e) (

Console.WriteLine("SocketException: (0)", e);

}

(Microsoft, TcpCIient Class, 2007)

6. Εξαγωγή ρυθμίσεων σε μορφή xml

Η μορφή των xml αρχείων είναι πολύ απλή. Κάθε αρχείο ξεκινάει με ένα ριζικό στοιχείο στο οποίο εμφωλεύονται όλα τα υπόλουια αντικείμενα της εξαγόμενης φόρμας.

Ακολουθούν τα αντικείμενα της φόρμας, ένα προς ένα, των οποίων τα χαρακτηριστικά εμφανίζονται με μορφή στοιχείων και αυτά εμφωλευμένα μέσα στο εκάστοτε στοιχείο. Ένα παράδειγμα θα ήταν αρκετό για να καταλάβουμε την ακριβή δομή του αρχείου. Το παρακάτω κείμενο είναι η αναπαράσταση ενός αρχείου ρυθμίσεων, μίας φόρμας η οποία περιλαμβάνει ένα αντικείμενο μόνο.

<root>

<Object>

<Type>Movable_Controls_Library_Csharp.MovableButton, Text:

Register customer</Type>

<Name>movableButton2</Name>

<Location>

<X>797</X>

<Y>222</y>

</Location>

<Color>

<Red>212</Red>

<Green>208</Green>

<Blue>200</Blue>

Τμήμα Βιομηχανικής Πληροφορικής

(15)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

</Color>

<Text>Register customer</Text>

<Height>54</Height>

<Width>86</Width>

<Visible>True</Visible>

</Object>

</root>

Όπως είπαμε και πριν, ξεκινάμε με το ριζικό στοιχείο "root" στο οποίο εμφωλεύουμε όλα τα υπόλουια στοιχεία. Στη συνέχεια βλέπουμε το στοιχείο "Object", το οποίο καθορίζει ότι από αυτό το σημείο ξεκινάει η περιγραφή κάποιου αντικειμένου.

Αμέσως μετά έχσυμε το στοιχείο :Τγρθ" στο οποίο δηλώνουμε τον τύπο του αντικειμένου.

Στην συγκεκριμένη περίτττωση είναι τύπου MovableButton. Ακολουθούν τα στοιχεία

"Name" και "Location" τα οποία προσδιορίζουν το όνομα και την τοποθεσία τσυ αντικειμένου πάνω στην φόρμα. Συγκεκριμένα για την τοποθεσία, βλέπουμε άλλα δύο εμφωλευμένα στοιχεία με ονόματα "X" και "Υ" αντίστοιχα τα οποία προσδιορίζουν τις συντεταγμένες του αντικειμένου επάνω στην φόρμα. Συνεχίζοντας βλέπουμε το στοιχείο

"Color" το οποίο αναλύεται σε τρία στοιχεία εμφωλευμένα σε αυτό. Αυτά είναι τα στοιχεία

"Red" "Green" "Blue" τα οποία κωδικοποιούν το χρώμα του αντικειμένου σε μορφή RGB.

Τέλος, ακολουθούν τα στοιχεία "Text" "Height" "W idth" και "Visible" τα οποία ορίζουν αντίστοιχα το κείμενο, το ύψος, το πλάτος και την ορατότητα του αντικειμένου.

Για την xml κωδικοποίηση χρησιμοπσιήθηκαν μόνο στοιχεία χωρίς καθόλου χαρακτηριστικά (attributes). Καταλήξαμε σκόπιμα σε αυτή την μορφή για να μπορέσουμε να κάνουμε το αρχείο πιο ευανάγνωστο και κατανοητό. Το μειονέκτημα σε αυτήν την περίπτωση είναι το μέγεθος του αρχείου το οποίο μπορεί να μεγαλώσει αρκετά.

7. Οι κλάσεις της βιβλιοθήκης

Η βιβλιοθήκη είναι εξολοκλήρου γραμμένη με βάση το αντικειμενοστραφές μοντέλο προγραμματισμού. Αυτό σημαίνει ότι ο κώδικας είναι οργανωμένος σε κλάσεις οι οποίες αναλαμβάνουν από ένα ρόλο ανάλογα με τον σχεδίασμά τπον οποίο έχουμε προβεί.

Στην περίπτωση μας έχουμε έξι βασικές κλάσεις οι οποίες αναλαμβάνουν τις κυρίως λειτουργίες όπως μεταφορά δεδομένων μέσω του δικτύου, εξυπηρέτηση των συνδεδεμένων χρητπών, εξαγωγή των ρυθμίσεων κτλ. Επίσης υπάρχουν και δύο δευτερεύουσες κλάσεις οι οποίες χρησιμοποιούνται για συγκεκριμένες εργασίες μέσω των άλλων κλάσεων, όπως και δύο φόρμες οι οποίες χρησιμοποιούνται για την παραμετροποίηση client και server αντίστοιχα. Ας τα πάρουμε όμως όλα με την σειρά.

7.1 Κλάση SendRead

Η κλάση SendRead είναι υπεύθυνη για την λήψη και την διαβίβαση των δεδομένων μέσω του δικτύου. Ως ορίσματα χρησιμοποιούνται αντικείμενα του .NET framework , όπως το TcpCIient και NetworkStream.

(16)

Δημιουρνία δυναμικής βιβλιοθήκης y ia την εξαγωνή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

Η διαδικασία έχει ως εξής: για να αποστείλουμε ένα string , πρέπει να δόσουμε στην μέθοδο το string, μαζί με τον Tcpciient ο οποίος έχει συνδεθεί και απαιτεί αυτήν την αποστολή καθώς και ένα αντικείμενο NetworkStream το οποίο λειτουργεί ως δικτυακό ρεύμα. Αντίστοιχη διαδικασία πραγματοποιείται και στην περίπτωση της λήψης δεδομένων.

ν ExportToXml V ImportFromXml 3 Nested Types

B Fields Φ colorBlue Ψ cobrGreen 0 colorRed Φ name Φ point Φ size Φ text Φ type Φ visible

7.2 Κλάση ImportExport

Είναι η κλάση η οποία είναι υπεύθυνη για την εξαγωγή και αρχικοποίηση των ρυθμίσεων του γραφικού περιβάλλοντος σε μορφή xml. Απαρτίζεται από δύο μεθόδους οι οποίες αναλαμβάνουν από μία από τις δύο παραπάνω διαδικασίες αντίστοιχα. Επιπλέον, υπάρχει ενσωματωμένη μία δομή που ονομάζεται myObject. Τα μέλη της δομής αντιπροσωπεύουν τα στοιχεία των αντικειμένων τα οποία εξάγονται στο αρχείο ρυθμίσεων.

Για την χρήση των μεθόδων θα πρέπει να γνωρίζουμε τον σειριακό αριθμό του χρήστη, του οποίου τις ρυθμίσεις θέλουμε να φορτώσουμε. Ο αριθμός αυτός αποστέλλεται στον client κατά την διαδικασία του login.

Τα ορίσματα των μεθόδων είναι ίδια. Το ένα είναι η φόρμα την οποία θέλουμε να αρχικοποιήσουμε και το δεύτερο είναι ο σειριακός αριθμός.

7.3 Κλάση ThreadedTcpSrvr

Είναι η καρδιά του server μιας και αναλαμβάνει όλο το φόρτο που έχει να κάνει με τις συνδέσεις των client. Η κλάση απαρτίζεται από δύο μέλη. Το μέλος client είναι τύπου TcpListener και χρησιμοποιείται ως δέκτης των εισερχόμενων συνδέσεων. Το μέλος MyTCPserver είναι ένα νήμα το οποίο χρησιμοποιείται από το κυρίως πρόγραμμα για να εκκινήσει τον δικό μας server σε ένα ξεχωριστό νήμα. Αυτό γίνεται λόγω του ότι για να ελεγχθούν οι εισερχόμενες συνδέσεις εκτελείται μία ατέρμονη επανάληψη η οποία θα εμπόδιζε την εκτέλεση του υπόλοιπου προγράμματος (πχ εισαγωγή χρηστών ή παραμετροποίηση της σύνδεσης με την βάση δεδομένων).

ThreadedTcpSrvr

^ client

^ myTCPserver 3 Methods

sv StartTCPserver 5V TQ’serverLoop --'ii TerminateTCPser..

ThreadedTcpSrvr

Για την αρχικοποίηση του server, ο constructor της κλάσης αναλαμβάνει να διαβάσει από το αρχείο port.conf την θύρα επικοινωνίας και να αρχικοποιήσει αναλόγως το μέλος

"client". Στην συνέχεια αρχικοποιεί και το νήμα ορίζοντας ότι θα εκκινήσει μέσω της μεθόδου TCPsen/erLoop, η οποία είναι η

Τμήμα Βιομηχανικής Πληροφορικής

(17)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

μέθοδος η οποία υλοποιεί την ατέρμονη επανάληψη που αναφέραμε παραπάνω. Οι άλλες δύο μέθοδοι απλά εκκινούν και σταματούν το νήμα. Δημιουργήθηκαν απλά για να καλύφουμε την χρήση νημάτων από τον χρήστη της βιβλιοθήκης μιας και η δομή τους αποτελείται από μία μόνο εντολή.

Η μέθοδος TCPserverLoop, μέσω της επανάληψης, κάνει χρήση του μέλους client για να εντοπίσει τις εισερχόμενες συνδέσεις. Αν βρει κάποια, δημιουργεί ένα αντικείμενο της κλάσης ConnectionThread, το οποίο αναλαμβάνει, μέσα σε ένα νέο νήμα το οποίο δημιουργούμε, να εξυπηρετήσει την σύνδεση.

7.4 Κλάση ConnectionThread

Είναι η κλάση η οποία ουσιαστικά εξυπηρετεί τις συνδέσεις των client. Η κλάση έχει ένα μόνο μέλος, το threadedListener, το οποίο είναι τύπου TcpListener και κατά την αρχικοποίηση του παίρνει την ίδια τιμή με το TcpListener μέλος της κλάσης ThreadedTcpSrvr.

ConnectionThread ®

ϋ Fields Ψ threadListener D Methods

=-V HandleConnection ServeDownloed V ServeLogin V ServeUpload

Oi μέθοδοι της κλάσης είναι τέσσερις και χρησιμοποιούνται με τον εξής τρόπο: Η μέθοδος HandleConnection χρησιμοποιείται για να εξετάσουμε το αίτημα της εισερχόμενης σύνδεσης. Οι άλλες τρεις καλούνται από την παραπάνω μέθοδο ανάλογα με το αίτημα της αίτησης. Για παράδειγμα η μέθοδος ServeDownload καλείται όταν θέλουμε να εξυπηρετήσουμε μία σύνδεση η οποία αιτείται λήψης του αρχείου ρυθμίσεων της. Αντιστοίχως οι μέθοδοι ServeUpload και ServeLogin καλούνται όταν μία σύνδεση αιτείται αποστολής ή αναγνώρισης του χρήστη.

7.5 Κλάση Client

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

Τα μέλη της κλάσης είναι δύο και πολύ απλά στην κατανόηση. Είναι το string ConnectTolP το οποίο χρησιμοποιείται για να προσδιορίσουμε την IP στην οποία πρέπει να συνδεθεί ο client για να επικοινωνήσει με τον server. Αντίστοιχο χαρακτήρα έχει και το άλλο μέλος το οποίο χρησιμοποιείται για τον προσδιορισμό της θύρας και ονομάζεται ConnectToPort.

Οι μέθοδοι είναι επίσης πολύ απλές. Το όνομά τους προδίδει την λειτουργία τους. Για παράδειγμα η μέθοδος Download χρησιμοποιείται όταν θέλουμε να κάνουμε λήψη του Ξ Fields

Φ ConnectTolP φ ConnectToPort

(18)

Δημιουρνία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

αρχείου ρυθμίσεων, η Login όταν θέλουμε να κάνουμε αναγνώριση αλφαριθμητικού από τον server και η Upload όταν θέλουμε να αποστείλουμε το αρχείο ρυθμίσεων προς τον server.

7.6 Κλάση SQLRelated

Η κλάση αυτή είναι υπεύθυνη για την σύνδεση του server με την βάση δεδομένων.

Περικλείει όλες τις χρήσιμες μεθόδους που είναι απαραίτητες για την εισαγωγή και διαγραφή χρηστών κτλ.

©

CheckUserExistanceMSSQLServer V CheckUserExistanceMySQL V CheckUserExistanceOrede V CreateAccountMSSQLServer V CreateAccountMySQL V CreateAccountOracle y DeleteAccountMSSQLServer V DeleteAccountMySQL :y DeleteAccountOracle V RetrieveSerialMSSQLServrr V RetrieveSerialMySQL :y RetrieveSerialOracle B Nested Types

SQLstruct

m

Struct Β Fields

Φ password φ username

Όπως θα παρατηρήσουμε και στο διάγραμμα κλάσης, όλες οι μέθοδοι είναι γραμμένες εις τραιλούν. Ο λόγος είναι απλός. Για να μην υποχρεώνεται ο χρήστης της εφαρμογής να χρησιμοποιήσει ένα συγκεκριμένο σύστημα διαχείρισης βάσης δεδομένων, υποθέσαμε ότι τρία είναι τα πιο κύρια συστήματα διαχείρισης βάσης δεδομένων και έτσι χρησιμοποιήσαμε τρεις διαφορετικούς τρόπους σύνδεσης, έναν για κάθε σύστημα.

Όπως φαίνεται και από το διάγραμμα, τα συστήματα διαχείρισης που χρησιμοποιήθηκαν είναι τρία, Oracle, Microsoft SQL Server 2005 και MySQL. Από την λίγη εμπειρία μας, αυτά τα τρία συστήματα διαχείρισης βάσεων δεδομένων είναι τα πιο διαδεδομένα στην αγορά λόγω των δυνατοτήτων τους και του κόστους τους. Θα μπορούσαμε να επεκτείνουμε την κλάση ώστε να περιλαμβάνει και άλλα συστήματα διαχείρισης αλλά κάτι τέτοιο θα ήταν εκτός των ορίων της πτυχιακής. Σκοπός μας ήταν να δείξουμε ότι μπορεί να υπάρξει συμβατότητα με παραπάνω από ένα συστήματα διαχείρισης ώστε να δώσουμε το αίσθημα της ελευθερίας στον χρήστη να επιλέξει αυτός το κατάλληλο.

8. Πως μπορούμε να χρησιμοποιήσουμε την βιβλιοθήκη από γλώσσες εκτός του .NET framev/ork

Εξ ορισμού, η βιβλιοθήκη απευθύνεται σε προγραμματιστές οι οποίοι χρησιμοποιούν το περιβάλλον Visual Studio .NET 2005 της Microsoft αλλά μπορεί με μερικά απλά βήματα να χρησιμοποιηθεί και από προγραμματιστές που κάνουν χρήση άλλων τεχνολογιών και γλωσσών προγραμματισμού. Στο κεφάλαιο αυτά θα δούμε πως μπορούμε

1

Τμήμα Βιομηχανικής Πληροφορικής

(19)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών_____________

να χρησιμοποιήσουμε την βιβλιοθήκη μας σε τεχνολογίες εκτός του Visual Studio .NET 2005. Θα πρέπει να αναφέρουμε ότι η περιγράφουσα δοκιμασία δεν έχει δοκιμαστεί εξ ολοκλήρου στην πράξη. Για τυχών προβλήματα συμβατότητας θα πρέπει να διερευνηθεί η κάθε περίτττωση ξεχωριστά.

Σύμφωνα με τις οδηγίες της Microsoft σε σελίδα του φόρουμ τη ς για την χρήση μικτών τεχνολογιών, οι οποίες κάνουν χρήση και του .NET αλλά και άλλων τεχνολογιών εκτός αυτού, θα πρέπει να έχουμε μία βασική γνώση σχετικά με την σύνδεση διαχειριζόμενου κώδικα (managed code) με μη διαχειριζόμενο (unmanaged code), ΐν α γενικό συμπέρασμα στο οποίο καταλήξαμε είναι ότι ένας κοινά αποδεκτός τρόπος για την χρήση μικτών τεχνολογιών, είναι η χρήση του COM Framework. (Component Object Model) Oi παρακάτω οδηγίες είναι μία μετάφραση από το άρθρο του Mansoor Ahmed Siddiqui που βρήκαμε στο ίντερνετ σε μία αναζήτηση σχετικά με την χρήση βιβλιοθηκών αναπτυγμένες σε .NET framework, μέσα από άλλες γλώσσες προγραμματισμού. Το παράδειγμα του άρθρου δείχνει πώς μπορούμε να χρησιμοποιήσουμε μία βιβλιοθήκη dll γραμμένη σε γλώσσα C# μέσα από γλώσσα Visual Basic 6.0. Προς αποφυγή παρερμηνειών, η γλώσσα Visual Basic 6.0 δεν υποστηρίζει τις ίδιες λειτουργίες με την έκδοση Visual Basic .NET.

Καταχρηστικά θα ήταν καλό να τις θεωρήσουμε δύο διαφορετικές γλώσσες.

8.1 Εισανωνή

Η τεχνολογία .NET μας επιτρέπει την χρήση κώδικα COM μέσα από συνιστώσες .NET. Κάτι τέτοιο θα μπορούσαμε να το πούμε συμβατότητα «προς τα πίσω». Κατά τον ίδιο τρόπο, το .NET μας παρέχει συμβατότητα «προς τα μπρος», που σημαίνει ότι μπορούμε να προσπελάσουμε συνιστώσες .NET μέσα από συνιστώσες COM. (Siddiqui, 2007) 8.2 Διαφορές μεταξύ .NET Framework και COM Framework

ο τρόπος λειτουργίας του .NET Framework είναι τελείως διαφορετικός από αυτόν του COM Framework. Για παράδειγμα, προγράμματα που κάνουν χρήση των στοιχειών του .NET δεν χρειάζεται να ανησυχούν για την διάρκεια ζωής των αντικειμένων τους. Ο Common Language Runtime (CLR) αναλαμβάνει να τα διαχειριστεί για αυτά. Σε αντίθεση με τα παραπάνω, προγράμματα που κάνουν χρήση στοιχείων COM, πρέπει να διαχειριστούν μόνα τους τον κύκλο ζωής των αντικειμένων τους. Στην περίπτωση του .NET τα αντικείμενα ζουν μέσα στο κομμάτι μνήμης το οποίο διαχειρίζεται ο CLR. Ο CLR μπορεί να μεταφέρει τα αντικείμενα μέσα στην μνήμη για λόγους απόδοσης και να ενημερώσει ανάλογα την αναφορά του αντικειμένου. Αντίθετα, τα προγράμματα που κάνουν χρήση αντικειμένων COM κάνουν χρήση της ακριβής θέσης του αντικειμένου και εξαρτάται από αυτά αν θα τους αλλάξουν θέση. (Siddiqui, 2007)

Παρομοίως, το .NET παρέχει πολλές νέες δυνατότητες σε διαχειριζόμενα κομμάτια κώδικα. Για παράδειγμα, μπορούμε να έχουμε παραμετροποιήσημους δημιουργούς, οι συναρτήσεις μπορούν να έχουν χαρακτηριστικά προσβασιμότητας (public, protected, internal και άλλα) ακόμα και στατικές μεθόδους. Όλα τα παραπάνω δεν είναι προσβάσιμα από τα προγράμματα που κάνουν χρήση COM γιατί όλα τα παραπάνω δεν είναι αναγνωρίσιμα από την βασική υλοποίηση του COM. Γι' αυτό τον λόγο, το .NET πρέπει να

(20)

Δημιουργία δυναμικής βιβλιοθήκης για την εξαγωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

τοποθετήσει κάτι ανάμεσα στο .NET κομμάτι και το COM το οποίο θα λειτουργήσει ως μεσάζων. (Siddiqui, 2007)

8.3 Ο μεσάζων του .NET και του COM

Το .NET παρέχει ένα κάλυμμα για την σύνδεση με COM, το οποίο ξεπερνά τις διαφορές μεταξύ των δύο περιβαλλόντων. Για παράδειγμα, σε εκτελέσιμο χρόνο δημιουργούμε μία ύπαρξη του COM Callable Wrapper (CCW) όταν το COM προσπελαύνει ένα .NET κομμάτι κώδικα. Κατά τον ίδιο τρόπο, μία ύπαρξη του Runtime Callable Wrapper (RCW) δημιουργείται όταν ένα .NET κομμάτι κώδικα προσπελαύνει ένα κομμάτι COM. Αυτά τα δύο καλύμματα αφαιρούν τις διαφορές και παρέχουν μία αόρατη ενοποίηση μεταξύ των δύο περιβαλλόντων. Το επόμενο διάγραμμα δείχνει καθαρά τα CCW και RCW. (Siddiqui, 2007)

8.4 Στην πράξη

Για λόγους επίδειξης θα δημιουργήσουμε ένα .NET κομμάτι σε γλώσσα C# το οποίο θα ονομάσουμε CmanagedServer. Για το κομμάτι του μη διαχειριζόμενου κώδικα θα δημιουργήσουμε μία εφαρμογή σε γλώσσα Visual Basic (VB) 6.0 η οποία θα χρησιμοποιήσει τις υπηρεσίες του διαχειριζόμενου κώδικα. (Siddiqui, 2007)

Βήμα 1°

Πρώτα πρέπει να δημιουργήσουμε το διαχειριζόμενο κομμάτι. Το ακόλουθο κομμάτι κώδικα για τον CmanagedServer είναι πολύ απλό και περιέχει μία απλή μέθοδο που ονομάζεται "SaYHello".

public class CManagedServer {

public CManagedServer() { }

public string SayHello(string i {

:_strName ;

Τμήμα Βιομηχανικής Πληροφορικής

(21)

ΔημιουρνΙα δυναμικής βιβλιοθήκης y ia την εξανωγή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

return str ;

Για την μεταγλώττιση και δημιουργία της assembly του ManagedServer χρησιμοποιούμε την παρακάτω εντολή:

CSC /outiManagedServer.dll /target:library ManagedServer.es

Αυτή η εντολή θα δημιουργήσει το αρχείο ManagedServer.dll το οποίο είναι ο διαχειριζόμενος κώδικάς μας. (Siddiqui, 2007)

Βήμα 2°

Η βασική υλοποίηση του COM βασίζεται στην registry των Windows για να βρει τα στοιχεία σχετικά με τις COM συνιστώσες, όπως CLSID, Interface IDs, τη διαδρομή η οποία φιλοξενεί τις συνιστώσες (DLL/exe), το νηματικό μοντέλο των συνιστωσών κτλ. Το .NET Framework δεν εξαρτάται από την registry αλλά χρησιμοποιεί τα λεγάμενα metadata για όλες αυτές τις πληροφορίες. Γι' αυτό το λόγο πρέπει να δημιουργήσουμε τις COM- συμβατές καταχωρήσεις στην registry για τον .NET διαχειριζόμενο κώδικα μας. Οπως το tlbimp.exe, υπάρχει άλλο ένα εργαλείο που ονομάζεται regasm.exe. Αυτό το εργαλείο διαβάζει τις metadata πληροφορίες και προσθέτει τις αντίστοιχες COM-συμβατές εισαγωγές στην registry. Οι κλάσεις μέσα στον κώδικα δεν είναι COM-συμβατές μέχρι να καταχωρηθούν στην registry των Windows.

Το εργαλείο Regasm.exe μπορεί να δημιουργήσει και τις βιβλιοθήκες COM-τύπου.

Θα χρησιμοποιήσουμε αυτές τις COM-τύπου βιβλιοθήκες ιπο VB 6.0 κομμάτι κώδικα.

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

regasm ManagedServer.dll /tib pause

Παρακάτω είναι η έξοδος η οποία θα παραχθεί μετά από επιτυχή εκτέλεση της παραπάνω εντολής:

(22)

Δημιουρνάα δυναμικής βιβλιοθήκης για την εξαγωνή και αποθήκευση ρυθμίσεων γραφικού περιβάλλοντος εφαρμογών

Σε αυτό το σημείο, βασικές COM εγγραφές θα δημιουργηθούν στην registry. Στην παρακάτω εικόνα φαίνονται οι εγγραφές της registry.

Βήμα 3°

Τώρα θα δημιουργήσουμε το VB κομμάτι κώδικα. Στο βήμα 2 δημιουργήσαμε ένα tib και τώρα θα τσ δηλώσουμε στο VB κομμάτι του κώδυια. Η παρακάτω εικόνα δείχνει το ManagedServer tib καταχωρημένο στον διάλογο "References".

Avalable References:

_ J mdsync 1.0 Type Lbrary

miSm

□ Microsoft Access 9.0 Object Lbrary in MkTosoft Active Server Pages Object Library

□ MkTosoft Active Server Pages Object Lbrary

□ Mbrosoft Active Server Pages ObjectContext Object

□ MfcTosof t AcbveMovie Control

□ MkTosoft ActiveX Data Objects (Multi-dknensional) 2.

□ Mkiosoft ActiveX Data Objects 2.0 Lbrary

□ MfcTosoft ActiveX Data Objects 2.1 Lbrary

□ hfaosoft ActiveX Data Objects 2.5 Lbrary n ^ o so ft ActiveX Data Objects |.6 Lbrary

Ί ] Cancel |

Browse.,, |

t Prtority help 1

-ManagedServer—

Location; D:\Net Projects\Article 2 backn)\ManagedServer.tll Language; Standard

Τμήμα Βιομηχανικής Πληροφορικής

(23)

Δημιουρνία δυναμικής βιβλιοθήκης yia την εξανωνή και αποθήκευση ______________ ρυθμίσεων γραφικού περιβάλλοντος εφαρμονών_____________

Παρακάτω είναι ο κώδικας ο οποίος δημιουργεί το αντικείμενο και καλεί την SayHello μέθοδό του.

Private Sub cmdAccessManagedComponent_Click() Dim objServer As New/ ManagedServer.CManagedServer MsgBox objServer.SayHelloC'lS Seconds reader") Set objServer = Nothing

End Sub

O παραπάνω κώδυιας είναι πολύ ατιλός και όλη η πολυπλοκότητα έχει αφαιρεθεί από το COM-κάλυμμα.

Αν τρέξουμε την VB εφαρμογή και πατήσουμε το κουμπί "Access managed component", τότε θα παραχθεί το παρακάτω αποτέλεσμα.

2£ΐ Hello 15 Seconds reader

9. Οδηγίες Εγκατάστασης

Για να εγκατασταθεί σωστά η πτυχιακή θα πρέπει να πληρούνται κάποιες προϋποθέσεις σχετικά με τις ελάχιστες απαιτήσεις. Συγκεκριμένα θα πρέπει να έχουν προεγκατασταθεί στον υπολογιστή το .NET framework 1.0 και .NET framework 2.0. Επίσης ο υπολογιστής θα πρέπει να χρησιμοποιεί ένα από τα παρακάτω λειτουργικά συστήματα;

• Windows 98,

• Windows 2000 SP4,

• Windows Millennium Edition,

• Windows Server 2003,

• Windows XP Media Center Edition,

• Windows XP Professional x64 Edition,

• Windows XP SP2,

• Windows XP Starter Edition

9.1 Οδηγίες εγκατάστασης του client

Για την εγκατάσταση του client θα πρέπει να τρέξουμε το installer αρχείο με όνομα client.msi και να ακολουθήσουμε τις οδηγίες. Μετά το τέλος της διαδικασίας. Στον

Referências

Documentos relacionados

Σε µια προσπάθεια να µειωθεί η αρνητική επιρροή του περιβάλλοντος της φυλακής, και ακριβώς για να προφυλαχθούν τα βρέφη από την εµπειρία του παράλληλου εγκλεισµού µε τη µητέρα τους όσο