Rewritten the protocol
Updated Protocol draft 2.0 (markdown)
parent
c3873acd40
commit
f3d7dadce7
1 changed files with 107 additions and 18 deletions
|
@ -1,22 +1,111 @@
|
||||||
The 2.0 specification is quite different from the old one. This one is based on a stable and mature protocol; HTTP. We will borrow certain elements from the protocol, with main focus on HTTP's POST style. Here is a link: http://www.jmarshall.com/easy/http/#http1.1c1 Below is a typical POST message in HTTP.
|
The 2.0 specification is quite different from the old one. This one is based on a stable and mature protocol; HTTP. We will borrow certain elements from the protocol, with main focus on HTTP's POST style. Here is a link: http://www.jmarshall.com/easy/http/#http1.1c1 Below is a typical POST message in HTTP.
|
||||||
|
|
||||||
POST /path/script.cgi HTTP/1.0
|
<pre>POST /path/script.cgi HTTP/1.0
|
||||||
From: frog@jmarshall.com
|
From: frog@jmarshall.com
|
||||||
User-Agent: HTTPTool/1.0
|
User-Agent: HTTPTool/1.0
|
||||||
Content-Type: application/x-www-form-urlencoded
|
Content-Type: application/x-www-form-urlencoded
|
||||||
Content-Length: 32
|
Content-Length: 32
|
||||||
<BLANK LINE>
|
|
||||||
home=Cosby&favorite+flavor=flies
|
|
||||||
|
|
||||||
Our protocol looks like the following:
|
home=Cosby&favorite+flavor=flies</pre>
|
||||||
Token: 1001
|
|
||||||
Command: define
|
|
||||||
Content-Type: text
|
|
||||||
Content-Length: 40
|
|
||||||
<BLAND LINE>
|
|
||||||
function helloWorld(x) {return x + 2 ;}
|
|
||||||
|
|
||||||
The following commands are to be supported:
|
Our protocol is, unlike HTTP, asynchronous and statefull. After initializing a socket you send the hello server command:
|
||||||
define defines new javascript
|
|
||||||
run runs existing javascript
|
<pre>Server-Command: hello
|
||||||
hello request a new token
|
User-Agent: Some Game v 0.2
|
||||||
|
Accept: plaintext</pre>
|
||||||
|
|
||||||
|
You will get an answer with your own client token:
|
||||||
|
|
||||||
|
<pre>Server-Command: token
|
||||||
|
Content-Type: plaintext
|
||||||
|
Content-Length: 45
|
||||||
|
Server-Version: 1.0
|
||||||
|
Accept: gzip,plaintext
|
||||||
|
|
||||||
|
913AB7FD-F795-45E4-B31C-035FD81D0773</pre>
|
||||||
|
|
||||||
|
Then you will define your game, that means, you send the source code of your game to the server:
|
||||||
|
|
||||||
|
<pre>Token: 913AB7FD-F795-45E4-B31C-035FD81D0773
|
||||||
|
Server-Command: define
|
||||||
|
Content-Type: text
|
||||||
|
Content-Length: 666
|
||||||
|
|
||||||
|
function userCommand(user, cmd, args) {
|
||||||
|
if(cmd == "moveUp") {
|
||||||
|
moveUp(user, args);
|
||||||
|
} else if(cmd == "moveDown") {
|
||||||
|
moveDown(user, args);
|
||||||
|
} else if(cmd == "chat") {
|
||||||
|
chat(user, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveUp(user, x) {
|
||||||
|
var key = "userpos_x_" + user.id;
|
||||||
|
var value = GGS.world.get(key);
|
||||||
|
value += x;
|
||||||
|
GGS.world.set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveDown(user, x) {
|
||||||
|
var key = "userpos_x_" + user.id;
|
||||||
|
var value = GGS.world.get(key);
|
||||||
|
value -= x;
|
||||||
|
GGS.world.set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function chat(user, text) {
|
||||||
|
var size = GGS.users.length;
|
||||||
|
for(var i = 0; i<size; i++) {
|
||||||
|
var user = GGS.users.get(i);
|
||||||
|
user.sendCommand("chat", text);
|
||||||
|
}
|
||||||
|
}</pre>
|
||||||
|
|
||||||
|
Now you can call commands in that game:
|
||||||
|
|
||||||
|
<pre>Token: 913AB7FD-F795-45E4-B31C-035FD81D0773
|
||||||
|
Command: moveUp
|
||||||
|
Content-Type: text
|
||||||
|
Content-Length: 40
|
||||||
|
|
||||||
|
5</pre>
|
||||||
|
|
||||||
|
or:
|
||||||
|
|
||||||
|
<pre>Token: 913AB7FD-F795-45E4-B31C-035FD81D0773
|
||||||
|
Command: chat
|
||||||
|
Content-Type: text
|
||||||
|
Content-Length: 90
|
||||||
|
|
||||||
|
Hi guys,
|
||||||
|
|
||||||
|
My name is Mimi and I'm new here. Would be great to here some of
|
||||||
|
your stories.</pre>
|
||||||
|
|
||||||
|
If you are not the first client who connects to the server in this game session, then you will have got a game token which will tell the server to which game you would like to connect (you get the game token from your friends or from the game lobby).
|
||||||
|
|
||||||
|
<pre>Server-Command: hello
|
||||||
|
Game-Session-Token: 018FF079-B383-4523-93A2-6053E7EDC2BC
|
||||||
|
User-Agent: Some Game v 0.2
|
||||||
|
Accept: zip,plaintext</pre>
|
||||||
|
|
||||||
|
Here you would again get an answer with your own Client token.
|
||||||
|
|
||||||
|
If you are already connected to a game and would like to obtain the game token you send the command game-session-token:
|
||||||
|
|
||||||
|
<pre>Token: 913AB7FD-F795-45E4-B31C-035FD81D0773
|
||||||
|
Server-Command: game-session-token
|
||||||
|
User-Agent: Some Game v 0.2
|
||||||
|
Accept: plaintext</pre>
|
||||||
|
|
||||||
|
You will get as an answer just the game session token:
|
||||||
|
|
||||||
|
<pre>Server-Command: game-session-token
|
||||||
|
Content-Type: plaintext
|
||||||
|
Content-Length: 45
|
||||||
|
Server-Version: 1.0
|
||||||
|
Accept: gzip,plaintext
|
||||||
|
|
||||||
|
018FF079-B383-4523-93A2-6053E7EDC2BC</pre>
|
||||||
|
|
Reference in a new issue