You can contact me through social media links connected to this profile
"Believe you can and you're halfway there." - Theodore Roosevelt
Open Source implementation of GOG Galaxy Communication Service for SDK bundled with GOG games.
License: GNU General Public License v3.0
When running Windows-based games through Proton (tested on 7.0 and Experimental) via the Heroic launcher, the following error tends to happen:
1)(deck@steamdeck comet_pyinstaller_version)$ ./main --from-heroic
INFO:comet_main:started listening on port 9977
INFO:comet_main:waiting for connection
45925
Accepting connection
Traceback (most recent call last):
File "aiohttp/connector.py", line 980, in _wrap_create_connection
File "asyncio/base_events.py", line 1050, in create_connection
File "asyncio/base_events.py", line 1080, in _create_connection_transport
File "asyncio/sslproto.py", line 529, in data_received
File "asyncio/sslproto.py", line 189, in feed_ssldata
File "ssl.py", line 944, in do_handshake
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify
failed: unable to get local issuer certificate (_ssl.c:1131)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "main.py", line 87, in <module>
File "asyncio/runners.py", line 44, in run
File "asyncio/base_events.py", line 616, in run_until_complete
File "comet/handlers.py", line 91, in handle_connection
File "comet/api/notification_pusher.py", line 34, in setup
File "aiohttp/client.py", line 779, in _ws_connect
File "aiohttp/client.py", line 536, in _request
File "aiohttp/connector.py", line 540, in connect
File "aiohttp/connector.py", line 901, in _create_connection
File "aiohttp/connector.py", line 1206, in _create_direct_connection
File "aiohttp/connector.py", line 1175, in _create_direct_connection
File "aiohttp/connector.py", line 982, in _wrap_create_connection
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host
notifications-pusher.gog.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CE
RTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer cer
tificate (_ssl.c:1131)')]
[14660] Failed to execute script 'main' due to unhandled exception!
This has been tested on several games:
The Windows versions of these games running will give the SSL certificate verification error from the get-go.
If any further testing is needed for debugging, please let me know. I'll happily cooperate to get this sorted.
Note: This is done on a PyInstaller-packaged version of Comet as I try to make it compatible for Steam Deck users via Heroic. See #9.
Tested on Absolute Drift (Windows version over Proton Experimental), exiting the game within the menus works fine, but closing it with SIGTERM crashes Comet.
40661
Accepting connection
INFO:handler:handle_message:Header 1|3
INFO:notification_pusher:handling_connection:started
INFO:notification_pusher:notification_message:2|2
INFO:notification_pusher:subscribing to chat, presence, friends
INFO:handler:handle_auth_request:authenticated the user redacted
INFO:handler:handle_message:responded with 1|4
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:friends
INFO:handler:handle_message:responded with 2|4
INFO:notification_pusher:notification_message:2|4
INFO:notification_pusher:subscribed_to:chat
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:presence
INFO:handler:handle_message:responded with 2|4
INFO:notification_pusher:notification_message:2|4
INFO:notification_pusher:subscribed_to:presence
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:chat
INFO:handler:handle_message:responded with 2|4
INFO:handler:handle_message:Header 1|15
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/serg/builds/comet/comet/main.py", line 86, in <module>
asyncio.run(con_handler.handle_connection())
File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/home/serg/builds/comet/comet/handlers.py", line 131, in handle_connection
await self.handle_message(header_size_bytes)
File "/home/serg/builds/comet/comet/handlers.py", line 198, in handle_message
self.connection.sendmsg([res_header_data_size, res_header_data, res.data])
BrokenPipeError: [Errno 32] Broken pipe
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f8f47958c90>
ERROR:asyncio:Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7f8f479260b0>, 15330.591777046)]', '[(<aiohttp.client_proto.ResponseHandler object at 0x7f8f479256a0>, 15330.763322233)]', '[(<aiohttp.client_proto.ResponseHandler object at 0x7f8f47925940>, 15333.26935718)]']
connector: <aiohttp.connector.TCPConnector object at 0x7f8f47958e10>
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f8f47b32cd0>
New to Comet, but when I downloaded it and installed the requirements, the program crashed every time I tried to run it. Googling the error message indicated the protobuf
library as the main culprit, upgrading to 4.24.3
resolved the issue. Not sure exactly which version the initial install pulled the first time, but it might be a good idea to pin the requirements file to 4.24.3 or later
Hi! I wanted to test Comet in its current state with games installed using nicohman/wyvern.
Obtaining access token, refresh token (using underscore in README.MD, please fix) and user ID was easy enough reading ~/.config/wyvern/wyvern.toml
, which worked:
INFO:comet_main:started listening on port 9977
However, starting a game (Cyberpunk 2077) gave the same results as Comet not running. This leads me to believe the launcher is also involved in establishing a session.
Will it be possible to play without a launcher? Have I made a mistake in testing?
The work has already begun and is available on separate branch https://github.com/imLinguin/comet/tree/rust
I had to rewrite comet nevertheless, as current code-base has some wrong assumptions and is not offline ready at all.
That said I might as well switch to the language I'm learning at the moment.
While I'm keeping track of supported calls in the README, here's the list of what else will be possible with new comet.
Crazy ideas that I might work on someday
If you have any other cool ideas, don't hesitate to share them.
Thanks for interest in the project!
While testing, I found that two common scenarios print a traceback rather than a descriptive error message, and it results in Comet aborting operation, which is obviously not ideal for a daemon.
notifications-pusher.gog.com
and gameplay.gog.com
are not reachable (no Internet connection, hosts blocked, etc.)INFO:comet_main:started listening on port 9977
41173
Accepting connection
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 980, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection
raise exceptions[0]
File "/usr/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection
sock = await self._connect_sock(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock
await self.sock_connect(sock, address)
File "/usr/lib/python3.11/asyncio/selector_events.py", line 634, in sock_connect
return await fut
^^^^^^^^^
File "/usr/lib/python3.11/asyncio/selector_events.py", line 674, in _sock_connect_cb
raise OSError(err, f'Connect call failed {address}')
ConnectionRefusedError: [Errno 111] Connect call failed ('0.0.0.0', 443)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/redacted/builds/comet/comet/main.py", line 86, in <module>
asyncio.run(con_handler.handle_connection())
File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/home/redacted/builds/comet/comet/handlers.py", line 90, in handle_connection
await self.notification_pusher.setup()
File "/home/redacted/builds/comet/comet/api/notification_pusher.py", line 34, in setup
self.connection = await self.session.ws_connect(self.url)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/client.py", line 779, in _ws_connect
resp = await self.request(
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/client.py", line 536, in _request
conn = await self._connector.connect(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 540, in connect
proto = await self._create_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 901, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 1206, in _create_direct_connection
raise last_exc
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 1175, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 988, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host notifications-pusher.gog.com:443 ssl:default [Connect call failed ('0.0.0.0', 443)]
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fdf9dddd850>
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fdf9dddd990>
INFO:comet_main:started listening on port 9977
38489
Accepting connection
INFO:handler:handle_message:Header 1|3
INFO:notification_pusher:handling_connection:started
INFO:notification_pusher:notification_message:2|2
INFO:notification_pusher:subscribing to chat, presence, friends
Error obtaining user data
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/redacted/builds/comet/comet/main.py", line 86, in <module>
asyncio.run(con_handler.handle_connection())
File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/home/redacted/builds/comet/comet/handlers.py", line 131, in handle_connection
await self.handle_message(header_size_bytes)
File "/home/redacted/builds/comet/comet/handlers.py", line 162, in handle_message
res = await self.handle_auth_request(message_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/redacted/builds/comet/comet/handlers.py", line 214, in handle_auth_request
res_data.user_id = int(user_info["galaxyUserId"])
~~~~~~~~~^^^^^^^^^^^^^^^^
TypeError: 'NoneType' object is not subscriptable
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fe9a8f39a50>
ERROR:asyncio:Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7fe9a8f25630>, 12558.577621949)]', '[(<aiohttp.client_proto.ResponseHandler object at 0x7fe9a8f25470>, 12558.622148064)]']
connector: <aiohttp.connector.TCPConnector object at 0x7fe9a8f39a90>
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fe9a94e24d0>
Exception ignored in: <function ClientResponse.__del__ at 0x7fe9a8fff420>
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 811, in __del__
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 178, in release
File "/usr/lib/python3.11/site-packages/aiohttp/connector.py", line 663, in _release
File "/usr/lib/python3.11/site-packages/aiohttp/client_proto.py", line 63, in close
File "/usr/lib/python3.11/asyncio/sslproto.py", line 112, in close
File "/usr/lib/python3.11/asyncio/sslproto.py", line 619, in _start_shutdown
File "/usr/lib/python3.11/asyncio/base_events.py", line 727, in call_later
File "/usr/lib/python3.11/asyncio/base_events.py", line 740, in call_at
File "/usr/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed
Steam Deck users can not easily use Comet due to SteamOS using an immutable filesystem. To allow Python's pip to be installed, users would have to unlock the filesystem. The changes made to said file system could be wiped in a future update, making it unsuitable for long-term use.
To get around this issue, I have been tinkering with using PyInstaller to package the application into a bootable executable for immutable file systems.
To get a bootable executable, do the following steps:
api
, classes
, proto
folders and the handlers.py
script into a single folder called comet
pyinstaller main.py
dist/main
folder, and simply run ./main
.While the application boots fine on Steam Deck by calling it with ./main --from-heroic
, it seems to currently fail at SSL Certificate verification (#8).
Once this issue has been resolved, I will create a Pull Request to deal with the GitHub Actions automation for building Steam Deck-compatible releases along with instructions how to use it on Steam Deck.
Hi, have some issues with My Rewards in Witcher 3. I want to use cross progression for switch/PC. When enter My rewards, there is a banner - "Open GOG Galaxy 2.0 and start the game".
I downlaod Heroic (MacOS), installed the game.
Before launch: comet --token <token> --refresh-token <token>. --user-id <user>
Logs seems fine, but i can't access my rewards section.
Accepting connection
INFO:handler:handle_message:Header 1|3
INFO:notification_pusher:handling_connection:started
INFO:notification_pusher:notification_message:2|2
INFO:notification_pusher:subscribing to chat, presence, friends
INFO:handler:handle_auth_request:authenticated the user <user>
INFO:handler:handle_message:responded with 1|4
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:friends
INFO:handler:handle_message:responded with 2|4
INFO:notification_pusher:notification_message:2|4
INFO:notification_pusher:subscribed_to:chat
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:presence
INFO:handler:handle_message:responded with 2|4
INFO:notification_pusher:notification_message:2|4
INFO:notification_pusher:subscribed_to:presence
INFO:handler:handle_message:Header 2|3
INFO:handler:handle_subscribe_topic:stub:chat
INFO:handler:handle_message:responded with 2|4
INFO:notification_pusher:notification_message:2|4
INFO:notification_pusher:subscribed_to:friends
INFO:handler:handle_message:Header 1|15
INFO:handler:handle_message:responded with 1|16
INFO:handler:handle_message:Header 1|23
INFO:handler:handle_message:responded with 1|24
Thanks, for such amazing tools!
While testing Baldur's Gate 3
I found that game may initialize multiple connections to Galaxy, one from Larian launcher and one for game itself. This is sort of heads up for people who tried using comet with it.
Comet is currently able to handle one connection at the time
Still says to launch using galaxy 2.0 to receive the unlocks.
(Does get the expansion working though, did you know that comet is the only way to play the gog version with the dlc right now? The game crashes if the galaxy services dlls are present, and without them the dlc doesnt appear, they drm'd it! So thanks for letting me play)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.