Βοηθητικές Βιβλιοθήκες
Χρησιμοποιούμε αρκετές βοηθητικές βιβλιοθήκες ως εξαρτήσεις για τα κύρια συστατικά μας.
Δημοσιεύουμε τις βιβλιοθήκες μας χρησιμοποιώντας το JitPack!
Το JitPack.io είναι μια υπηρεσία αποθετηρίου πακέτων που επιτρέπει την εύκολη κοινή χρήση και διανομή βιβλιοθηκών Java μέσω της κατασκευής (building) πηγαίου κώδικα από αποθετήρια Git κατ' απαίτηση (on-demand).
Η διαδικασία δημοσίευσης μιας νέας έκδοσης συνίσταται στη δημιουργία μιας νέας ετικέτας (tag) με το όνομα ως έκδοση του συστατικού και την προώθησή της (push).
Απαιτείται να προσθέσετε αυτή τη δήλωση αποθετηρίου στο έργο σας για να το χρησιμοποιήσετε:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
MMO Core
Το MMOCore είναι ένα θεμελιώδες συστατικό του έργου, είναι μια βιβλιοθήκη που παρέχει μια αφηρημένη υλοποίηση μηχανής δικτύου.
Χρησιμοποιείται από τον Login Server και τον Game Server για την αποστολή/λήψη δεδομένων προς/από τους clients,
υπάρχουν δύο (κύριες) μέθοδοι για κρυπτογράφηση/αποκρυπτογράφηση που πρέπει να υλοποιηθούν στον game server.
Ο χειρισμός του buffer γίνεται στην κλάση SelectorThread.
Χρησιμοποιούμε μια μη μπλοκαρισμένη (non-blocking) πολυπλεγμένη (multiplexed) αρχιτεκτονική single-threaded για είσοδο/έξοδο συν ένα thread-pool για την επεξεργασία των πακέτων που λαμβάνονται. DrHouse
<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-mmocore</artifactId>
<version>2.6.5.0</version>
</dependency>
Συζήτηση σχετικά με Asynchronous I/O, Multi-threaded MMOCore και εδώ
L2J Geo Driver
Είναι η προεπιλεγμένη υλοποίηση της Μηχανής Γεωδεδομένων (Geodata Engine).
<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-geo-driver</artifactId>
<version>2.6.5.0</version>
</dependency>
L2J Commons
Είναι μια βιβλιοθήκη εργαλείων που περιέχει αρκετές κλάσεις που επιλύουν μια ποικιλία προβλημάτων εντός του Login και του Game server.
<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-commons</artifactId>
<version>2.6.7.0</version>
</dependency>
Υπηρεσία UPnP
Το Universal Plug and Play (UPnP) είναι ένα σύνολο πρωτοκόλλων δικτύωσης που επιτρέπει σε συσκευές σε ένα τοπικό δίκτυο να ανακαλύπτουν αυτόματα και να επικοινωνούν μεταξύ τους. Απλοποιεί τη συνδεσιμότητα και τη διαμόρφωση των συσκευών. Το UPnP μπορεί επίσης να χρησιμοποιηθεί για προώθηση θυρών (port forwarding), το οποίο επιτρέπει την απομακρυσμένη πρόσβαση σε συσκευές πίσω από έναν δρομολογητή (router). Με το UPnP, οι συσκευές μπορούν να ζητήσουν από τον δρομολογητή να δημιουργήσει και να διαχειριστεί αυτόματα κανόνες προώθησης θυρών, εξαλείφοντας την ανάγκη για χειροκίνητη διαμόρφωση του δρομολογητή. Αυτό διευκολύνει τους χρήστες να ενεργοποιούν την απομακρυσμένη πρόσβαση στις συσκευές τους χωρίς να απαιτούν εκτεταμένες γνώσεις δικτύωσης ή πολύπλοκες διαδικασίες ρύθμισης.
Ενεργοποιημένο από προεπιλογή.
Εργοστάσιο Σύνδεσης και Δεξαμενή Συνδέσεων (Connection Pool)
Το L2J Server χρησιμοποιεί απλό JDBC (Java Database Connectivity), μπορεί να βελτιώσει την απόδοση σε σχέση με πλαίσια υψηλότερου επιπέδου όπως (high-level frameworks) το JPA (Java Persistence API) ή άλλες επιλογές επειδή παρέχει άμεση και χαμηλού επιπέδου πρόσβαση στη βάση δεδομένων, επιτρέποντας λεπτομερή έλεγχο και βελτιστοποίηση των ερωτημάτων SQL, των στρατηγικών ανάκτησης δεδομένων και των χαρακτηριστικών που αφορούν συγκεκριμένα τη βάση δεδομένων.
Ο L2J Server χρησιμοπο ιεί μια δεξαμενή συνδέσεων (connection pool) για τη διαχείριση μιας ομάδας συνδέσεων βάσης δεδομένων, επιτρέποντας στον server να επαναχρησιμοποιεί και να μοιράζεται συνδέσεις με μια βάση δεδομένων. Βοηθά στη βελτίωση της απόδοσης και της επεκτασιμότητας μειώνοντας το κόστος δημιουργίας νέων συνδέσεων βάσης δεδομένων για κάθε αίτημα.
Από προεπιλογή, ο L2J Server χρησιμοποιεί το HikariCP, μια βιβλιοθήκη δεξαμενής συνδέσεων JDBC υψηλής απόδοσης για εφαρμογές Java. Το HikariCP προσφέρει αρκετά χαρακτηριστικά που το καθιστούν δημοφιλή επιλογή για connection pooling, συμπεριλαμβανομένου του ελαφριού αποτυπώματος (lightweight footprint), της χαμηλής καθυστέρησης (low latency), της υψηλής διεκπερατωτικής ικανότητας (high throughput) και της αυτόματης διαχείρισης συνδέσεων.
Μηχανή Blowfish
Ο αλγόριθμος Blowfish είναι ένας συμμετρικός κρυπτογράφος μπλοκ (symmetric block cipher) που λειτουργεί σε μπλοκ δεδομένων και χρησιμοποιεί κλειδί μεταβλητού μήκους. Σχεδιάστηκε από τον Bruce Schneier το 1993 και είναι γνωστός για την ευελιξία και την ασφάλειά του.
Οι μέθοδοι tryEncryptBlock και tryDecryptBlock εκτελούν έλεγχο σφαλμάτων για να διασφαλίσουν ότι τα buffers εισόδου και εξόδου έχουν επαρκές μέγεθος. Οι μέθοδοι encryptBlock και decryptBlock εκτελούν στην πραγματικότητα τις λειτουργίες κρυπτογράφησης και αποκρυπτογράφησης στα μπλοκ δεδομένων χρησιμοποιώντας τον αλγόριθμο Blowfish.
Εργαλεία (Utils)
HexUtils
Η κλάση HexUtils είναι μια βοηθητική κλάση που παρέχει μεθόδους για τη μετατροπή δεδομένων σε δεκαεξαδικές αναπαραστάσεις χαρακτήρων και την εκτέλεση σχετικών λειτουργιών, όπως η δημιουργία hex dumps. Περιλαμβάνει συναρτήσεις για τη μετατροπή bytes και ακεραίων στις δεκαεξαδικές αναπαραστάσεις τους, τη δημιουργία hex dumps από πίνακες byte και τη μετατροπή πινάκων byte σε χαρακτήρες ASCII.