greenheartgames / greenworks

a node.js plugin to integrate nw.js/electron games with steamworks
MIT License
1.48k stars 152 forks source link

The version of NODE_MODULE_VERSION dose not match. #304

Closed roblade closed 2 years ago

roblade commented 2 years ago

The version of the greenworks that i used is lastnew. Node version is v16.13.0. An error was produced when is used it in my project.

error info: App threw an error during load Error: The module '\?\G:\ElectronDemo\greenworks\lib\greenworks-win64.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 93. This version of Node.js requires NODE_MODULE_VERSION 98. Please try re-compiling or re-installing the module (for instance, using npm rebuild or npm install). at process.func [as dlopen] (node:electron/js2c/asar_bundle:5:1800) at Object.Module._extensions..node (node:internal/modules/cjs/loader:1170:18) at Object.func [as .node] (node:electron/js2c/asar_bundle:5:1800) at Module.load (node:internal/modules/cjs/loader:982:32) at Module._load (node:internal/modules/cjs/loader:823:12) at Function.c._load (node:electron/js2c/asar_bundle:5:13331) at Module.require (node:internal/modules/cjs/loader:1006:19) at require (node:internal/modules/cjs/helpers:93:18) at Object. (G:\ElectronDemo\greenworks\greenworks.js:15:18) at Module._compile (node:internal/modules/cjs/loader:1110:14) [6800:1230/140440.323:ERROR:gpu_init.cc(453)] Passthrough is not supported, GL is disabled, ANGLE is

ceifa commented 2 years ago

Try using my fork of greenworks

Gurigraphics commented 2 years ago

Try using my fork of greenworks

Hi Gabriel . In your fork the lobby methods works?

In this repo the last update/releases/version was in 2018. And there is no none method lobby in last greenworks-v0.13.0.

In the last build from this site/repo exist Lobby methods https://greenworks-prebuilds.armaldio.xyz/

Even so, there are still essential methods missing. The method "greenworks.setLobbyData" work only with lobby owner. Then, it is not possible to have communication in a lobby

There needs use/export these two methods:

ISteamMatchmaking::GetLobbyMemberData  = greenworks.getLobbyMemberData
ISteamMatchmaking::SetLobbyMemberData = greenworks.setLobbyMemberData

Then, when other user updates the data, it can be accessed here

  greenworks.on('lobby-data-update', function(m_ulSteamIDLobby, m_ulSteamIDMember, m_bSuccess ) { 
    log('lobby-data-update'); 
    log( m_ulSteamIDLobby );  //String: the Steam ID of the Lobby.
    log( m_ulSteamIDMember ); //String: Steam ID of either the member whose data changed, or the room itself.
    log( m_bSuccess );   //Boolean: whatever the lobby data was successfully changed.
  });

I've been in this role for a week. Thought about trying to find a way to use emscripten. Or run a separate C++/C# application. For now what can i do is open a new TCP connection, because the P2P connection is useless without the methods GetLobbyMemberData, SetLobbyMemberData. I can't even create a new handshaking because there's no communication.

References:

https://partner.steamgames.com/doc/features/multiplayer/matchmaking https://github.com/greenheartgames/greenworks/blob/master/docs/matchmaking.md https://github.com/greenheartgames/greenworks/blob/master/docs/events.md

ceifa commented 2 years ago

Hi Gabriel . In your fork the lobby methods works?

My fork has no changes in the matchmaking/lobby part.

Thought about trying to find a way to use emscripten.

I'm not an steamworks sdk expert but I think this is very hard to achieve since the sdk uses multiple processes and probably uses in-process communication, not supported by emscripten. If it uses TCP you will have to handle through a WebSockify server.

Or run a separate C++/C# application.

Yeah, it's a very good approach. Maybe edge.js does the job.

Gurigraphics commented 2 years ago

Good suggestion. All I needed was just 3 communications to perform a Webrtc handshake. I had created a build with the C++ code that ended up with only 13kb. I know little C++, I just create the delta loop and managed to get the name and ID. I didn't even finish not even one TCP because the problem of separate application with TCP/gRPC/etc or this Edge is that Steam overlay will be missing.

I also had created TCP with node js/NET to use with Greenworks. As the owner can publish in the lobby, he can send the ip and port for everyone to connect. With that, later it would be possible scale to create another WEbrtc connection if necessary.

However, I realized that there is another essential function missing. It is not possible to list and join non-friends' lobbies. So that rules out using Greenworks in my case.

I kept searching and found GodotSteam, a Steamworks Module for Godot Engine. I found it better than Steamworks.NET and Facepunch.Steamworks for Unity. It is the only one with all methods implemented and with current SDK 1.53. Another advantage is the 30Mb single executable

Godot also allows JS<>Godot communication It is possible to use an Axios within Godot if exporting in HTML5 However, with the Steam SDK I could not export to HTML5 Maybe because of this problem you highlighted

Anyway, it is much easier and faster to learn GDScript than C++, or export, or acess, all these functions from the SDK. And it's also something better tested than making a gambiarra. ^^

Thanks for reply

roblade commented 2 years ago

i rebuild it in https://www.electronjs.org/docs/latest/tutorial/using-native-node-modules

ceifa commented 2 years ago

@Gurigraphics I started a new project to enable steamworks on JS: https://github.com/ceifa/steamworks.js And yes, steam overlays it's working :D

Gurigraphics commented 2 years ago

@Gurigraphics I started a new project to enable steamworks on JS: https://github.com/ceifa/steamworks.js And yes, steam overlays it's working :D

I'll test this... \o/

Dumphydra commented 2 years ago

...--Diese Nachricht wurde von meinem Android Mobiltelefon mit GMX Mail gesendet.Am 17.01.22, 13:42 schrieb Gurigraphics @.***>:

@Gurigraphics I started a new project to enable steamworks on JS: https://github.com/ceifa/steamworks.js And yes, steam overlays it's working :D

I'll test this... \o/ —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>