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