Jump to content


Photo

Extension: 39js (Socket.io)


  • Please log in to reply
71 replies to this topic

#1 TGMG

TGMG

    G-java creator

  • New Member
  • 706 posts
  • Version:GM8

Posted 27 September 2011 - 04:56 PM

39js
39js is a javascript implementation of the 39dll for GMhtml5. The overall aim is to allow current Game maker games based on 39dll the ability to convert to Html5 with minimal (if any) code changes. Currently 39js is still in a very early alpha stage but includes most of the functionality needed to make multiplayer html5 games in Game Maker. It uses Socket.io to support the widest possible range of browsers and devices (tested and working on iphone and most major Browsers).

Example (if my computer is on):
http://amorri40.gith...js/examplegame/

The example is made by Revel from this topic: http://gmc.yoyogames...howtopic=332957 the client gmk was simply imported into gmhtml5 and runs just like it would with 39dll, but the server was slightly changed and made into a javascript file running on nodeJs.

Download from Github:
https://github.com/amorri40/39js

At the moment i'm currently investigating alternative ways of developing the server in Game Maker rather than rewriting slightly for Javascript. Only the basic functions have been implemented so far, the rest of the functions will be implemented when the server can be developed in GM with minimal changes from the original example.

You can download the client example in the github (import in gmhtml5) and you can run the server by running the bat file in the server folder. The API is the same as 39dll (or will be when the rest are implemented).

Let me know if you need any help
  • 9

#2 HighQuality

HighQuality

    Wuka World Creator

  • GMC Member
  • 610 posts
  • Version:GM:HTML5

Posted 27 September 2011 - 05:15 PM

Would love to see this getting finished, if you somehow could get it working with a non-modified 39dll-based server that'd be amazing.

Anyways, great work so far, looking forward to updates :)
  • 0

#3 BlaXun

BlaXun

    Slime Online Creator

  • GMC Member
  • 2717 posts
  • Version:GM:Studio

Posted 27 September 2011 - 05:29 PM

...impressive. Damn, trying this right now. You made my day <3

I'll check this thread regulary
  • 0

#4 TerraFriedSheep

TerraFriedSheep

    GMC Member

  • GMC Member
  • 3134 posts
  • Version:GM:Studio

Posted 27 September 2011 - 05:57 PM

Nice to see some online multiplayer progress made so early on after the release of beta, it's satisfying seeing the little squares move around in their first grasp for multiplayer life :thumbsup:
  • 0

#5 True Valhalla

True Valhalla

    ಠ_ಠ

  • GMC Member
  • 5277 posts
  • Version:Unknown

Posted 27 September 2011 - 11:19 PM

Well, doesn't seem to do anything beyond showing me some messages boxes when I try your link directly, and when I downloaded it and followed your instructions by running the batch file, it threw an error (something to do with process.nextTick).

Also, the example you're using is somewhat...average. It doesn't even check to see if the connection was successful. If you'd like to work with something more established, the Basic Network example I made a while ago might be better: http://bit.ly/oRbCNa

Additionally, the way you've setup the server is quite strange. Personally I'm thinking using PHP with a MySQL database as the back-end is a more logical way to go...perhaps it's time the GMC outgrew 39dll a little ;)
  • 0

#6 pedrosorio

pedrosorio

    GMC Member

  • GMC Member
  • 971 posts

Posted 27 September 2011 - 11:27 PM

Additionally, the way you've setup the server is quite strange. Personally I'm thinking using PHP with a MySQL database as the back-end is a more logical way to go...perhaps it's time the GMC outgrew 39dll a little ;)


That is probably too slow for real-time games, no?
  • 0

#7 True Valhalla

True Valhalla

    ಠ_ಠ

  • GMC Member
  • 5277 posts
  • Version:Unknown

Posted 28 September 2011 - 01:31 AM

I don't see why it would be...the main issue for both 39dll or PHP is the time it takes for the message to travel from the client's PC to the server. No matter which method you use, there's still that ping time.

If you organize the structure well enough, it becomes irrelevant if it's a real-time game or not ;)
  • 0

#8 Dangerous_Dave

Dangerous_Dave

    GMC Member

  • Global Moderators
  • 9402 posts
  • Version:Unknown

Posted 28 September 2011 - 02:06 AM

The difference in connection type means an HTTP request is quite a bit slower than a socket connection.

However, the trick is to make the game fake while it waits.
  • 0

#9 Seki

Seki

    GMC Member

  • GMC Member
  • 226 posts
  • Version:GM:Studio

Posted 28 September 2011 - 02:08 AM

OMG, just what i needed, thanks... this might help out... Trying to make a native app work with this xDD... gonna be interesting :D
  • 0

#10 pedrosorio

pedrosorio

    GMC Member

  • GMC Member
  • 971 posts

Posted 28 September 2011 - 02:16 AM

The difference in connection type means an HTTP request is quite a bit slower than a socket connection.

However, the trick is to make the game fake while it waits.


I was thinking about this too when I wrote that. But PHP supports sockets.
  • 0

#11 TGMG

TGMG

    G-java creator

  • New Member
  • 706 posts
  • Version:GM8

Posted 28 September 2011 - 02:48 AM

Thanks HighQuality , BlaXun and Soulsnatcher was nice seeing you guys check out the example, even if it was just a rectangle moving on screen :thumbsup:

@True Valhalla : Sorry I switched off nodeJS for a while. I don't currently have a server/vps that i can let nodeJS run so it will be off at times.
It was just a very simple example which was supposed to look like this if my server was up:
Spoiler

The players weren't being destroyed as the game end event doesn't seem to work :confused:

Any chance I could distribute your basic networking example with 39js? It looks great :biggrin:

I setup the server in a strange way or a number of reasons, but mainly I wanted to keep most of the original code from the server example, so most of the code is the same, I also prefer javascript to php and would like to be able to run gmhtml5 as servers in nodeJS (with a simulated browser environment).

Also the output from nodeJS would be very useful as i can't reproduce it (works on mac and windows for me).

Also about using a php server instead of nodeJS, there is a websocket library for php here: http://code.google.com/p/phpwebsocket/ which would be a good starting place.

@Seki what do you mean by native app? If you need any help give me a shout
  • 0

#12 Barling

Barling

    GMC Member

  • New Member
  • 122 posts

Posted 28 September 2011 - 02:58 AM

server no work!

node.js:208
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'socket.io-client'
    at Function._resolveFilename (module.js:327:11)
    at Function._load (module.js:272:25)
    at Module.require (module.js:350:17)
    at require (module.js:361:17)
    at Module._compile (module.js:425:26)
    at Object..js (module.js:443:10)
    at Module.load (module.js:344:31)
    at Function._load (module.js:303:12)
    at Module.require (module.js:350:17)

Edited by Barling, 28 September 2011 - 03:00 AM.

  • 0

#13 True Valhalla

True Valhalla

    ಠ_ಠ

  • GMC Member
  • 5277 posts
  • Version:Unknown

Posted 28 September 2011 - 03:02 AM

Any chance I could distribute your basic networking example with 39js? It looks great :biggrin:


Absolutely, feel free to. Please leave as much of the original code and comments in place though.
  • 0

#14 Seki

Seki

    GMC Member

  • GMC Member
  • 226 posts
  • Version:GM:Studio

Posted 28 September 2011 - 03:03 AM

Its easy as to make a HTML5 into a Native App, to sell on App Store, for Android and iOS (Blackberry and Symbian aswell), just need the tools, ive made a few games already... xD (just testing ones for the iPhone)
  • 0

#15 xot

xot

    GMC Dismember

  • GMC Member
  • 4772 posts
  • Version:GM:Studio

Posted 28 September 2011 - 03:20 AM

The difference in connection type means an HTTP request is quite a bit slower than a socket connection.


As I understand it, the point of WebSockets (and by extension Node.js with Socket.io) is that an HTTP request is required only to establish the connection. After that the connection is held open and data flows without the need for futher HTTP requests. If it is working correctly, it should be just as fast as any other netcode. I've read of latency as low as 10ms using Node.js and Socket.io. That should be adequate for anything.
  • 0

#16 Dangerous_Dave

Dangerous_Dave

    GMC Member

  • Global Moderators
  • 9402 posts
  • Version:Unknown

Posted 28 September 2011 - 03:51 AM

As I understand it, the point of WebSockets (and by extension Node.js with Socket.io) is that an HTTP request is required only to establish the connection. After that the connection is held open and data flows without the need for futher HTTP requests. If it is working correctly, it should be just as fast as any other netcode. I've read of latency as low as 10ms using Node.js and Socket.io. That should be adequate for anything.

That sounds very promising, I can't wait to try out games made with this (and GM). I don't really have motivation to make my own MMORPG though.
  • 0

#17 Barling

Barling

    GMC Member

  • New Member
  • 122 posts

Posted 28 September 2011 - 04:08 AM

Server still isnt working i downloaded again just incase the guy updated it but nope.
  • 0

#18 TGMG

TGMG

    G-java creator

  • New Member
  • 706 posts
  • Version:GM8

Posted 28 September 2011 - 04:24 AM

How long ago did you download? Try now the server should be working.
  • 0

#19 Barling

Barling

    GMC Member

  • New Member
  • 122 posts

Posted 28 September 2011 - 05:28 AM

well now when i run the server the command line is just blank.
is something supposed to happen when I connect to the server? because my HTML5 game just shows a grey screen after I register/login.
  • 0

#20 TGMG

TGMG

    G-java creator

  • New Member
  • 706 posts
  • Version:GM8

Posted 28 September 2011 - 05:39 AM

Its supposed to be plank for now, I modified Socket.io as it was displaying too much terminal output but I will fix that.
Yes its supposed to say you have logged in, try again and check your javascript console (on chrome its view->Developer->Developer tools) it should say what is wrong.

You could test out my example to see what its supposed to do.
  • 0

#21 Manuel777

Manuel777

    InvaderGames

  • GMC Member
  • 3534 posts
  • Version:GM:Studio

Posted 28 September 2011 - 11:20 AM

Would be great if you finish this.. i didnt even know socket.io existed, and it looks liike a really nice bunch of codes ;)
  • 0

#22 Armisticdoom

Armisticdoom

    GMC Member

  • New Member
  • 73 posts

Posted 28 September 2011 - 03:57 PM

**** OMG THANK YOU MAN GOTTA SEE IF THIS WORKS
  • 0

#23 BlaXun

BlaXun

    Slime Online Creator

  • GMC Member
  • 2717 posts
  • Version:GM:Studio

Posted 28 September 2011 - 03:58 PM

It does work. however, the server right now is (must be?) a java file....Hope this will be changed though, but I think I read that he (the creator of this) is trying it atm.
  • 0

#24 Armisticdoom

Armisticdoom

    GMC Member

  • New Member
  • 73 posts

Posted 28 September 2011 - 04:33 PM

hmm still needs a lot more data types
  • 0

#25 Barling

Barling

    GMC Member

  • New Member
  • 122 posts

Posted 28 September 2011 - 06:27 PM

Are we able to connect this to any server?
I mean wouldn't we be able to connect it to a GM server running 39dll?
  • 0

#26 pedrosorio

pedrosorio

    GMC Member

  • GMC Member
  • 971 posts

Posted 28 September 2011 - 08:35 PM

It does work. however, the server right now is (must be?) a java file....Hope this will be changed though, but I think I read that he (the creator of this) is trying it atm.


Javascript
  • 0

#27 True Valhalla

True Valhalla

    ಠ_ಠ

  • GMC Member
  • 5277 posts
  • Version:Unknown

Posted 28 September 2011 - 10:18 PM

To run the server, will a typical web server suffice or do you need a proper server like a VPS? I suspect a VPS? The main reason I'm edging towards PHP for my game is it's not real time and I'd like to use a web server rather than my VPS to host.
  • 0

#28 TGMG

TGMG

    G-java creator

  • New Member
  • 706 posts
  • Version:GM8

Posted 29 September 2011 - 12:47 AM

You can't directly connect to a GM server running 39dll as socket.io uses websockets and doesn't allow raw tcp connections. However i'm looking into 2 options to make this possible. 1) modifying the 39dll to use websockify which translates websockets to normal socket traffic 2) rewriting 39dll as a websocket server.
Which both would require you to use a custom dll rather than plain 39dll, option 1 would potentially allow both players from gmhtml5 and normal gm to connect to the same server, whereas number 2 wouldn't (well unless they also connected over websockets).

Currently you have to rewrite your server into javascript and run on node.js, currently i'm writing code to allow gmhtml5 servers to run in node.js, so no rewrite is required.

But I do realise that node.JS isn't ideal for everyone and will also look into a php websocket server (which will require you to write all the server code in php). But it is worth mentioning the only advantage of this is it allows you to write in php, you can't just upload to a shared hosting service and expect it to work.

Its also worth mentioning that there are Java, Go, Perl, Ruby, Erlang and Python versions of socket.io which you can already use to write servers for your gmhtml5 games.

Edited by TGMG, 29 September 2011 - 12:55 AM.

  • 0

#29 Dangerous_Dave

Dangerous_Dave

    GMC Member

  • Global Moderators
  • 9402 posts
  • Version:Unknown

Posted 29 September 2011 - 03:35 AM

The main reason I'm edging towards PHP for my game is it's not real time and I'd like to use a web server rather than my VPS to host.

If the game isn't real time, then the latency of an HTTP connection would probably not be noticeable. If it's turn based, then it should be fine. If it requires seeing anything in real time, like seeing other players moving around, then it would be less suitable (but can be faked in some situations).
  • 0

#30 Armisticdoom

Armisticdoom

    GMC Member

  • New Member
  • 73 posts

Posted 01 October 2011 - 04:09 PM

It would be nice if tcpaccept returned a value less than 0 if the connection failed, like 39dll.
  • 0




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users