site

personal website, served at mordaunt.dev/site
Log | Files | Refs

plato-desktop-client.md (3347B)


      1 +++
      2 date = '2025-07-17T11:21:04-03:00'
      3 draft = false
      4 title = 'Plato Desktop Client'
      5 description = "Desktop game client in Go."
      6 authors = ["Jack Mordaunt"]
      7 tags = ["Go", "Gio", "Native", "Portfolio"]
      8 categories = ["development"]
      9 +++
     10 
     11 <style>
     12 .carousel {
     13   display: flex;
     14   overflow: scroll;
     15 }
     16 </style>
     17 
     18 <div class="carousel">
     19   <img src="/images/Plato/PlatoHome.webp" alt="Home Page" />
     20   <img src="/images/Plato/PlatoGame.webp" alt="Game Page" />
     21   <img src="/images/Plato/PlatoMulti.webp" alt="Multi Window" />
     22 </div>
     23 
     24 
     25 ## Overview
     26 
     27 A cross-platform desktop game client built for **Plato Team Inc.**, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.
     28 
     29 The application was built in **Go**, using the **Gio** immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including **ANGLE** (OpenGL ES), **V8** (JavaScript engine), **SQLite**, and **libwebp** for image decoding.
     30 
     31 ---
     32 
     33 ### My Role
     34 
     35 As one of two primary developers, I contributed across the full stack, with a focus on architecture, performance, and cross-platform integration.
     36 
     37 - **Reactive GUI Architecture**  
     38   Co-developed a highly concurrent, fully reactive GUI system using **Gio** and **SQLite**. Built a declarative state model with the database as the single source of truth, enabling seamless multi-window synchronization.
     39 
     40 - **Tooling & Abstractions**  
     41   Created reusable libraries and tooling ([skel](https://git.sr.ht/~gioverse/skel)) for stream-based data handling and safe inter-window communication. This enabled clean separation of concerns and race-free concurrency.
     42 
     43 - **Auto-Updater System**  
     44   Designed and implemented a binary patch-based self-updater for seamless client updates with minimal bandwidth usage.
     45 
     46 - **Embedded Game Logic**  
     47   Integrated game runtime logic using **V8**, communicating over a custom binary protocol with a proprietary backend.
     48 
     49 - **Deep OS Integration**  
     50   Delivered native features on both Windows and macOS:  
     51   - Implemented **Windows COM interfaces in pure Go** for AAC audio decoding and system toast notifications.  
     52   - Used **Objective-C and C** on macOS for native audio and system notification support.
     53 
     54 ---
     55 
     56 This project demanded **low-level systems programming**, **high-concurrency architecture**, and custom GUI tooling—all within the Go ecosystem. It reflects my ability to deliver **production-ready, cross-platform software** with deep OS integration and thoughtful abstractions.
     57 
     58 ### Platforms
     59 
     60 <div style="display: flex; flex-wrap: wrap; gap: 2rem;">
     61   <i class="fa-4x fa-brands fa-windows"></i>
     62   <i class="fa-4x fa-brands fa-apple"></i>
     63   <i class="fa-4x fa-brands fa-linux"></i>
     64 </div>
     65 
     66 ### Languages
     67 
     68 <div style="display: flex; flex-wrap: wrap; gap: 2rem;">
     69   <img style="max-height: 100px;" src="/images/brands/go.svg"/>
     70   <img style="max-height: 100px;" src="/images/brands/c.png"/>
     71 </div>
     72 
     73 ### Tech
     74 
     75 <div style="display: flex; flex-wrap: wrap; gap: 2rem;">
     76   <img style="max-height: 100px;" src="/images/brands/gio.svg" class="invert-me"/>
     77   <img style="max-height: 100px;" src="/images/brands/sqlite.svg"/>
     78   <img style="max-height: 100px;" src="/images/brands/opengl.svg"/>
     79   <img style="max-height: 100px;" src="/images/brands/v8.svg"/>
     80 </div>
     81