(experimental feature)
Before a worker can start, it should have a configuration file. In case if such a file is not found it may request configuration from the coordinator to which it connected.
Added example logic if a worker is needed to be blocked until a successful packet exchange with a coordinator is being made.
* Add error return for config loader
* Add config loaded flag to worker
* Add zone flag
* Add a custom mutex lock with timout
* Refactor worker runtime
* Refactor internal api
* Extract monitoring server config
* Extract worker HTTP(S) server
* Add generic sub-server interface
* Add internal coordinator API
* Add internal routes and handlers to worker
* Add internal worker API
* Refactor worker run
* Migrate serverId call to new API
* Add packet handler to cws
* Extract handlers for internal worker routes in coordinator
* Pass worker to the worker internal heandlers
* Cleanup worker handlers in coordinator
* Add closeRoom packet handler to the API
* Add GetRoom packet handler to the API
* Add RegisterRoom packet handler to the API
* Add IceCandidate packet handler to the API (internal and browser)
* Add Heartbeat packet handler to the API (internal and browser)
* Rename worker routes init function
* Extract worker/coordinator internal ws handlers
* Update timed locker
* Allow sequential timed locks
* Add config request from workers
* Add nil check for the route registration functions
* Add initial external configuration files support.
These external configuration files allow changing app params at the runtime without recompilation.
* Find config files with specified directory in the tests
* Add aspect ratio recalculation config
* Clean code
* Add new configuration files into the Docker container image
* Add shared core and config paths into the Libretro cores config
* Split ROM <-> Emulator mapping between workers and coordinators
* Extract coordinator config
* Add shared worker/coordinator server config
* Add explicit embedded shared worker/coordinator struct for auto-config reflection fill
* Remove default stun/turn servers from the config
* Extract and add new ice servers config structures
* Update coordinator config params
* Add auto emulation lib loader based on the runtime OS/arch
* Update configuration structures
* Remove shared config embedding
* Add missing network config params
* Add game library external config
* Remove unused config parameters
* Add WebRTC encoder external options
* Add user dir for config search
* Update config loader
* Update config
* Add generic downloader with Grab lib implementation
* Add a simple file downloader backed by the grab lib
* Add initial Libretro core repos abstractions
* Expose compression info for Libretro cores repository records
* Add pipe-based abstract file downloader
* Refactor downloader
* Refactor Libretro repos
* Add worker coresync stubs
* Add multiprocess-safe HTTP-based core manager implementation
* Remove Libretro cores from the repo
* Keep custom N64 cores in te repo for now
* Add Libretro cores repo select in the config
* Fix http manager repo switch
* Cleanup code
* Add greedy Libretro lib loader
* Don't crash when arch map is not set
* Disable dynamic recompiler for pcsx core by default since it's could cause a crash
* Use global Libretro dynalib handler
* Shorten the default Libretro cores store path
* Update zip extractor implementation
* Remove explicit fig lib field markings
* Add config note to the README file
* Add GitHub repo backend for the core downloader
* Fix GitHub repo param list in the manager factory
* Add env variables reader with CLOUD_GAME prefix
* Re-optimize ice server info struct custom marshaler
* Follow Go standard for naming constants
* Use reformatted pixFormats for Libretro cores
* Use OpenGL 2.1 Core profile bindings for render instead 4.1
* Cleanup the code
* SDL attributes should be set before the sdl.Init call
* Use simple vertical frame flip function instead imaging lib with OpenGL renderer
* Use the separate control flow for the macOS OpenGL context handling
* Add OpenGL pixel type/format switch based on cores callback
* Use unified log instead of fmt
* Clean code
* Remove unnecessary SDL init flag
* Printout errors with SDL / OpenGL functions
* Add CGO Libretro logging output
* Use main thread lock for windows and OpenGL context
* Remove Darwin OS switch
* Add extended OpenGL version info print
* Update Libretro cores info print
* Add game library module (#232)
* Add game library
* Add missing local game lib files
* Add missing return statement
* Use v2 suffix
* Bump the dependencies
* Update Libretro modules to support headless test runners
* Port old savestates tests as example for Libretro cores runner testing
* Add n64 core example game and a test
* Update room tests for various games
* Add frame dump support for CI builds
* Add frame rendering to image output for core testing
* Update ROM frame exporter in tests
* Disable Docker image publishing
* Add frame rendering output for non-gl cores for CI
* Add auto GL context override for headless, gpu-less machines (e.g. Github CI Xeon)
* Add Windows CI headless cores frame render config
* Add missing Mesa OpenGL drivers to Ubuntu CI
* Add mupen n64 core download into CI tests
* Add Linux, macOS, Windows core frame render tests into CI
* Remove unnecessary var
* Add some comments
* Revert Y flip
* Move OpenGL into a separate package
* Add SDL package
* Update modules
* Add frame scaling support (#107)
* Update README.md with additional info about Windows builds
* Add frame scaling
* Add and enable bilinear scaling (#109)
* Add and enable bilinear scaling
* Use Go x/image lib for interpolation
* Reformat the code goimport/gofmt
* Move worker config into the pkg/worker directory
* Change separator in the save file path allowing it to work on Windows (#113)
* Introduce Makefile and go vendor directory for faster build
* WIP: Refactor cloud-game codebase with spliting overlord and worker binary
* Fix all issues and have a running build
* Complete first version of refactor
* WIP
* Add libretro
* Update input retro
* Update cloud retro input:
* Integrate libretro remove GL
* Launch emulator by game type
* Save and load
* Update deeplink to game directly
* Done channel for naemulator
* each server handle only one session
* Only provide available clients
* Emulator based on game
* Remove all OpenGL related
* Retroarch audio
* Audio encoding mono
* Experiment with libretro audio
* Audio without datachannel
* Audio opus internal
* Remove unnecessary code
* Resampled
* Limit time frame
* Start Room and Audio by game
* Dynamic video image allocation
* Dynamic Video buffer allocation based on video resolution
* Move encoder to room
* width and height from emulator
* Padding images to fix multipler of 64
* Remove OpenGL
* Remove Open AL
* Remove OpenGL from Go mod
* Move away nanoarch logic in naemulator
* Remove unecessary savefiles.go
* Optimize Docker for caching
* Update ReadME
* Update README to introduce Retro
* Update README
* Update README.md