GSoC 2019 - Terasology Launcher 4.0

raj

New Member
Project Overview
Terasology uses a desktop launcher to help users manage different game versions and tweak additional settings. The launcher is developed using JavaFX, but the mode of distribution of JavaFX has caused multiple issues for users. This project proposes to enhance the launcher while continuing the use of JavaFX and embedding a runtime to provide a hassle-free experience for end-users who don’t have Java installed.

Mentors: skaldarnar, eviltak, cervator, arpitkamboj, llvieira
Student: raj
Github: https://github.com/orgs/MovingBlocks/projects/18
Trello: https://trello.com/c/EkfSScjw
Slack / Discord: #launcher
Blog: Ovenbyte/GSoC
Proposal: Open in Docs

All weekly status updates for the project are posted in this thread.
 
Last edited:

raj

New Member
Week 1 updates
May 27 - June 2

What I achieved this week
Most of the time was spent learning more about and experimenting with the launcher's architecture as well as laying out plans for the upcoming Server Manager.
  • Got acquainted with Swagger and websockets
  • Created the base layout for the new UI
What I'm currently working on
  • Writing dedicated Controller classes for the new UI
  • Implementing a basic server manager
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Properly managing the GitHub board
  • Using Swagger to generate client SDK
Blog post
GSoC 2019: Week 1 updates
 
Last edited:

raj

New Member
Week 2 updates
June 3 - June 9

What I achieved this week
  • Prepared Gradle task to generate web API client code
  • Replaced the old UI code with new
What I'm currently working on
  • Planning the architecture for the Server Manager
  • Implementing the Game Manager
What problems I'm currently facing
Due to the lack of sufficient experience in multiplayer game architectures and networked apps, I'm having problems deciding how to properly implement the Server Manager, which essentially monitors multiplayer gaming.

Anything blocking me from making progress
The confusion regarding the architecture and plans for properly implementing the Server Manager.

List of PRs and issues
Topics discussed in the weekly meeting
  • Fixed minor Gradle issues on client code generation
  • Server manager designs
  • Plans for upgrading Gradle version
  • Internationalization for the upcoming launcher
Blog post
GSoC 2019: Week 2 updates
 
Last edited:

raj

New Member
Week 3 updates
June 10 - June 16

What I achieved this week
  • Designed the new Settings UI and made it default
  • Connected the old settings API to port all functionalities
What I'm currently working on
  • Checking availability of Jenkins during launcher initialization
  • Replacing the main launcher UI with the new one
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Correctly breaking down chunks of code into separate PRs
  • Reverted some of the complicated code
  • Future plans regarding the launcher
Blog post
GSoC 2019: Week 3 updates
 
Last edited:

raj

New Member
Week 4 updates
June 17 - June 23

What I achieved this week
  • Gradle now bundles a JRE with the launcher packages
  • Running game using the bundled JRE
  • Checking Jenkins availability during initialization and skipping launcher updates if not
What I'm currently working on
  • Moving the JRE bundling tasks into a dedicated GitHub repo
  • Gradle task for shrinking the JRE size by removing unused java packages
  • Making splash screen optional
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Upgrading Gradle to version 5.4.1
  • Jenkins pushing the Terasology zips into Artifactory or GitHub's package repo
  • Separation of JRE-bundling code from Launcher's repo
  • Downloading, caching and shrinking of the JRE by new Jenkins
  • Several cards got rearranged
Blog post
GSoC 2019: Week 4 updates
 
Last edited:

raj

New Member
Week 5 updates
June 24 - June 30

What I achieved this week
  • End of the first phase and evaluations
  • Set up a new repo for customizing JRE builds
  • Tasks for downloading JRE from Bellsoft and for publishing them to our Artifactory
What I'm currently working on
  • Laying out the framework for improving the package management functionality
  • Tasks for launcher download the customized JREs from Artifactory
  • Tasks to shrink the size of JREs to be bundled
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • An advanced game package management functionality
  • Users will be able to download game packages from 3rd parties when specified in the launcher
  • New Jenkins got set up
Blog post
GSoC 2019: Week 5 updates
 
Last edited:

raj

New Member
Week 6 updates
July 1 - July 7

What I achieved this week
  • The base API for the upcoming package manager
  • Caching support for the package manager
  • Documented the TerasologyJRE repo
What I'm currently working on
  • Downloading, installation and removal support for the package manager
  • Replacing old package handling codebase in the launcher
  • 3rd-party package provider support for the package manager
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Design of the new package manager API
Blog post
GSoC 2019: Week 6 updates
 
Last edited:

raj

New Member
Week 7 updates
July 8 - July 14

What I achieved this week
  • Tracked down the cause of weird test failure in TestBaseLauncherSettings and fixed it
  • More work on the package manager API, along with a diagram of it
What I'm currently working on
  • Integrating package manager into the original codebase for a test drive
  • Ensuring the other parts depending on the version classes stay intact while doing those integrations
What problems I'm currently facing
TerasologyGameVersions.java is complicated and hard to understand

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Design of the new package manager API
Blog post
GSoC 2019: Week 7 updates
 
Last edited:

raj

New Member
Week 8 updates
July 15 - July 21

I was inactive around this week because of some serious, untimely issues. I also had to shift to my college's city, as classes were about to restart. So there's no contribution to show in this update. I'll try to make up for the lost time in the upcoming week and take care of the package manager.
 
Last edited:

raj

New Member
Week 9 updates
July 22 - July 28

What I achieved this week
  • The launcher now successfully starts up, integrating with the package manager
  • Clean stream-based code inside TerasologyGameVersions to interoperate with the package manager
  • The package manager wrapper can now successfully load cached TerasologyGameVersion objects, or create them if not found
What I'm currently working on
  • Improving the integration, and trying to restore the functionalities broken by the package manager wrapper
  • Adding more functionalities to the package manager
What problems I'm currently facing
The attempt on integrating TerasologyGameVersions with the package manager is quite hard due to its complicated structure.

Anything blocking me from making progress
Nothing yet

List of PRs and issues
No new items

Topics discussed in the weekly meeting
  • Separation of the package manager into its own dedicated project, due to the absence of similar tools in java world
  • Rewriting the game package handling codebase from scratch, instead of replacing TerasologyGameVersions bit-by-bit
Blog post
GSoC 2019: Week 9 updates
 
Last edited:

raj

New Member
Week 10 updates
July 29 - August 4

What I achieved this week
  • The package manager now provides all the build numbers, whether they were successful or not
  • The launcher setup can detect previously installed games
  • Added the latest placeholder object in the version list, just as it previously used to be
  • Tested the launcher to be fully functional: Downloading, starting and removing games work fine now
What I'm currently working on
  • Adding more functionalities to the package manager
  • Replacing the old TerasologyGameVersions codebase bit by bit
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
No new items

Topics discussed in the weekly meeting
  • Improving the package manager architecture to be more domain-specific
  • Separate PRs for each package manager functionality
Blog post
GSoC 2019: Week 10 updates
 
Last edited:

raj

New Member
Week 11 updates
August 5 - August 11

What I achieved this week
  • A fair amount of research on how package managers like apt, pacman and npm work
  • Upgraded architecture plans for the new package manager
What I'm currently working on
  • Implementing the new package manager architecture
  • Third-party package repository support
  • Replacing the old codebase (TerasologyGameVersions).
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Rearranging cards in the project board
  • Upgraded package manager architecture
Blog post
GSoC 2019: Week 11 updates
 
Last edited:

raj

New Member
Week 12 updates
August 12 - August 18

What I achieved this week
  • Implementation of PackageDatabase, as per the revised architecture plans
  • JenkinsHandler class to enable support for our Jenkins
What I'm currently working on
  • Integrating PackageDatabase with the PackageManager
  • Downloading and caching of packages
  • Handling local installations and cache
What problems I'm currently facing
Nothing yet

Anything blocking me from making progress
Nothing yet

List of PRs and issues
Topics discussed in the weekly meeting
  • Testing out the PackageDatabase
  • Proper submissions for last GSoC evaluation
Blog post
GSoC 2019: Week 12 updates
 
Last edited:

raj

New Member
End of GSoC 2019
The launcher has been through some major changes over the entire GSoC period. Given below is an overview of all achievements and another of unfinished work, that may be used as a starting point for extending the launcher even further.

What was achieved
  • Bundled Java Runtime
    This was probably the most important feature that came out of GSoC. Now the launcher packages can be distributed with a bundled Java runtime and users do not need to separately install any JRE for running the launcher. It even lets the game run using the bundled runtime. A Gradle task was created to bundle any JRE from a given path (see #441 and #444). Another side-project called TerasologyJRE was set up with an aim to customize OpenJDK binaries and publish them to our Artifactory to be bundled later with the launcher.

  • Package Manager
    Package Manager aimed to simplify the maintenance of game packages and provide a cleaner and more extensible approach than the older package management methods. It has an architecture inspired by classic Linux package managers like apt and pacman and took the longest time period to develop. It currently supports our Jenkins as a package source but third-party repository support has also been planned. This was the last feature being developed until the end of GSoC. See #448, #451 and #452 for more details on its design, goals, and implementation.

  • ServerFacade Web API client generation
    This was a part of the Server Manager sub-project and it provides a Gradle task to generate client-side code for interacting with ServerFacade's web API. It makes use of the Swagger config file for code generation. See #442 for more details.

  • UI redesign
    Initial UI makeover attempts started during the first month. New JavaFX-based interfaces were designed for the launcher, although some of the work was discontinued due to some tight dependencies on internal API structure. The new Settings UI implementation can be found in #431.

  • Miscellaneous
    Many other parts of the project were updated to improve functionality and fix bugs, including fixing a unit test that had been failing for weeks (#449) and checking for Jenkins availability before performing other online tasks (#434 and #437).
What is left to do
  • Game Manager
    As soon as the Package Manager API becomes fully functional, the Game Manager can be implemented as a simple graphical frontend to the API. The UI needs to be properly designed to provide information for all game packages before downloading, as well as functionalities like uninstallation of game packages and clearing the cache storage.

  • Server Manager
    It was originally mentioned in the proposal, but work was discontinued due to problems in deciding a proper architecture. It was supposed to make use of the client code generated for ServerFacade to provide game server management features. This is a long-term project goal, and development can be continued by building upon the generated client code to provide better integration with ServerFacade.

  • Complete Dark UI theme
    UI makeover should be done only after all the internal API features are fixed and properly implemented. A decent dark theme with a greenish hue can be implemented using CSS and FXML, to make it look similar to mockups in the original proposal.
 
Top