Howdy folks,
Today I present you with a project I've been working on for a while now.
I started working on it because I was bored and needed something to do, as AzureJava was discontinued (due to the lack of enthusiasm and updates) and the name got on my nerves, due to my O.C.D when coding high-level OOP languages.
I know what you're going to say, "This is just a copy of AzureJava" --- nothing like it. AzureJava was my first Java Emulator from scratch and I hope you can understand that, your first experience is not always going to be your best, it's not always going to *click* the first time around.
Gaia is to my standards (beware of my O.C.D) clean, documented, and I'd go ahead and say the methods practice is pretty good as well, if you get what I'm trying to say? I don't know how else I would be able to assure you on the fact that I focus on the slightest of detail, from classes I don't have any business being in, look at the GitHub log, random commits titled "Naming Conventions" because that's how I roll
List of dependencies & frameworks used:
- Netty 4 for it's networking. To specify, our networking component basically consist of a TCP Server and an RCON/MUS Server (RCON is not done yet).
- Hibernate ORM along with java.persistence annotations, used for easily querying known database tables.
- Trove for high performance collections
- Log4j Logging of course!
- Reflections class searching for packet registration
- HikariCP connection pooling
- Guice dependency injection
- Governator Guice extensions
- MappedBus low latency interprocess communication (IPC) library used for sharing memory across the JVM. Will go into more detail on that keep reading!
The software design for my emulator was inspired by Scott and Jordan. Somewhat Microservice Architecture, with touches by moi.
Diagram I wrote up along time ago: http://i.imgur.com/yfwIlNU.png
- The workers are basically separate processes from the master
- This increases the scalability of the overall application, thus quickly fixing errors without restarting the whole hotel.
- For example: Navigator runs on a separate process and crashes... just the navigator will go down, and it can be easily worked on and restarted without the users even noticing.
- This improves the stability of the master application because if you think about it, it's basically load-balancing, which avoids the master from performing vast, strenuous calculations.
Positive and negative feedback appreciated! Open source, so if you feel like you could contribute to the development, go ahead!
GitHub: https://github.com/HeyItsKawaii/Gaia
P.S.
Don't talk shit about how I won't finish my project, at least I'll be providing you with a "good" OPEN SOURCE base to work off of?
Credits:
@Wotsuba (Jaden) Lead Developer, King Kawaii
@Caustik (Adil) one of my best mates, help and support along the way!
@scottstamp851 (Scott) i know we've had a falling out, but your cool man! thanks for the help and encouragement.
@Quackster (Alex) encouraging me?? kinda? x's and o's!
@maritnmine (Martin?) i don't know you personally, but you've helped me a lot through the years with your somewhat educational posts i.e. Guide on writing a Habbo Emulator.







