* Merge HTTP and HTTPS routes builder in coordinator
* Extract HTTP/S routes
* Rename config in coordinator
* Generalize child services
* Extract games library helper function
* Use string address instead of port for HTTP/S
* Use a dedicated port extractor function
* Add missing GA tag templating
* Rename shared server address and port params
* Introduce TLS config parameters
* Simplify HTTP/S server constructors
* Update server auto port roll
* Extract init function in worker
* Reorder return params of address type port fn
* Refactor config handler names
* Update TLS default config params
* Extract HTTP to HTTPS redirect function
* Use httpx in monitoring
* Don't log echo requests
* Remove error return from the abstract server
* Add WSS option to the worker-coordinator connection
* Change default worker config
* Make worker send its internal connection params
* Decouple gamelib from the coordinator
* Expose HTTP/S listener address
* Keep original HTTP/S addresses
* Remove no config handler in worker
* Use HTTP-HTTPS redirection
* Wrap net.Listener into a struct
* Clean http server creation fn
* Redirect to https with a generated address
* Use URL in the redirector
* Use zone address param in worker
* Make use of actual addr and port in the monitoring servers
* Use auto-justified monitoring addresses info
* Add the non-HTTPS worker to HTTPS coordinator connection warning
* Embed TLS struct
* Move connection API struct into cws package
Both worker and coordinator display version number in the console during startup. Coordinator displays its version number in the top right corner of the index.html page.
* Disable CGO (C libs) for coordinator
Needed for static linking.
* Fix "error strings should not be capitalized (ST1005)"
* Fix SA1015
Using time.Tick leaks the underlying ticker, consider using it only in endless functions, tests and the main package, and use time.NewTicker here (SA1015)
* Fix SA9004
Only the first constant in this group has an explicit type (SA9004).
* Remove unused code in the webrtc package
* Fix S1000
Should use a simple channel send/receive instead of select with a single case (S1000).
* Force dir creation/check for core downloader
* Update Makefile release script
* Disable ASLR for worker builds
* Remove WORKER_BUILD_PARAMS flag from the CI
* Don't force recompilation in release
* Add Debian packages installer script
* Build worker app without libopusfile
* Test worker app without libopusfile
* Add opus wrapper without opusfile
* Make install.sh executable
* Add opus lib in Win builds
* Make insecure HTTPS requests when downloading libs
* Add ca-certificates for Docker build stage
go mod download works only with SSL certificates installed.
* Move libx264 wrapper into the repo
That way we can get rid of a lot of not needed external Go dependencies.
* Update the dependencies
(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