Skip to content

Latest commit

 

History

History
410 lines (268 loc) · 12.3 KB

server.md

File metadata and controls

410 lines (268 loc) · 12.3 KB

General Features

Feature Description
Default Listening Port 5566
Protocol Ordinairy socket, UTF-8 encoded
Encoding UTF-8
Message Format JSON objects formatted onto a single line
Message Structure
  • Every packet must contain a "method" field
  • Every packet can also optionally contain a "data" field

Example

You can test that the server is up by using telnet.

telnet babylon.vrsites.com 5566

Copy and paste the examples below to see how it works

=================================

1. Client -> Server Methods:

=================================


1.1 "logon" Method


You need to do this before anything else.

Defined in config.js - authMode

Has three possible options (defaults to 'optional'):

    'none'     - Will not attempt to authenticate users, 

                 anyone can connect with any unused userId.

    'optional' - Anyone can connect, but if userId has been registered

                 a password must be provided.

    'required' - Only users with userids and passwords are allowed to connect.

Client -> Server Message Example:

This is an example of a message to logon with if the userId "LL" has not been registered:

{"method":"logon","data":{"userId":"LL", "version":"23.4","roomId":"345678354764987457"}}

Client -> Server Message Example

{"method":"logon","data":{"userId":"LL", "version":"23.4","roomId":"345678354764987457"}}

Real example from JanusVR 40.3

{"method":"logon","data":{"userId":"ProudMinna333","version":"40.3","roomId":"e562b2e1339fc08d635d28481121857c"}}

This is an example of a message to logon with if the userId "LL" HAS been registered and therefore requires a password (recommend that this is not used until security tightened up in release):

{"method":"logon","data":{"userId":"LL", "version":"23.4","roomId":"345678354764987457","password":"MyPassword"}}

version = the client version

roomId = MD5 hash of the room's URL

password = password associated with userId

Server -> Client Response Example:

If everything is OK and you logged in then you will receive:

{"method":"okay"}

If no roomId was found in the logon request:

{"method":"error", "data":{"message":"Missing roomId in data packet"}}

If no userId was found in the logon request:

{"method":"okay"} if everything was okay or a {"method":"error", "data":{"message": "Some error string"}}
{"method":"error", "data":{"message": "Missing userId in data packet"}}

If the userId is already in use:

{"method":"error", "data":{"message": "User name is already in use"}}

TODO: Reject incompatable clients


1.2 "enter_room" Method


When you pass through a portal:

{"method":"enter_room", "data": { "roomId": "345678354764987457" }}

Real example from JanusVR 40.3:

{"method":"enter_room", "data": {"roomId":"e562b2e1339fc08d635d28481121857c"}}

1.3 "move" Method


When the user position has moved:

{"method":"move", "data": [0,0,0,0,0,0,0] }

Data can be anything you like, it will be passed to observers without validation

Real example from JanusVR 40.3:

JanusVR submits extra information in first move call and every so often after the first call. This is an example of a move call with extra information:

{"method":"move", "data":{"pos":"8.38889 -0.267704 -5.83333","dir":"-1 -1.33e-06 9.42e-07","view_dir":"-1 -1.33e-06 9.42e-07","up_dir":"-1.33e-06 1 1.25e-12","head_pos":"0 0 0","avatar":"<FireBoxRoom><Assets><AssetObject id=^head^ src=^http://avatars.vrsites.com/chibii/head_male.obj^ mtl=^http://avatars.vrsites.com/chibii/mtls/head_male3.mtl^ /><AssetObject id=^body^ src=^http://avatars.vrsites.com/chibii/body_male.obj^ mtl=^http://avatars.vrsites.com/chibii/mtls/body_male3.mtl^ /></Assets><Room><Ghost id=^ProudMinna333^ js_id=^3^ scale=^1.700000 1.700000 1.700000^ head_id=^head^ head_pos=^0.000000 0.750000 0.000000^ body_id=^body^ /></Room></FireBoxRoom>"}}

Most JanusVR calls only provide a limited data set:

{"method":"move", "data":{"pos":"8.38889 -0.267704 -5.83333","dir":"-1 -1.33e-06 9.42e-07","view_dir":"-1 -1.33e-06 9.42e-07","up_dir":"-1.33e-06 1 1.25e-12","head_pos":"0 0 0"}}

1.4 "chat" Method


When the user wants to send a text message:

{"method":"chat", "data": "The message"}

You can pass anything through the data field and it will be sent to all clients subscribed to the current room.

Real example from JanusVR 40.3:

{"method":"chat", "data": "hello!"}

1.5 "subscribe" Method


When you wish to start receiving events about a room (you are in that room or looking through a portal)

{"method":"subscribe", "data": { "roomId": "345678354764987457" }}

Real example from JanusVR 40.3:

The first "subscribe" call provides extra information:

{"method":"subscribe", "data":{"userId":"ProudMinna333","version":"40.3","roomId":"e562b2e1339fc08d635d28481121857c"}}

Subsequent "subscribe" calls provide less information:

{"method":"subscribe", "data":{"roomId":"69de79e1077103cb59d1a890e96c7ef2"}}

Will receive the following if everything is OK.

{"method":"okay"}

1.6 "unsubscribe" Method


When you no longer wish to receive messages from that room because none of its portals are visible

{"method":"unsubscribe", "data": { "roomId": "345678354764987457" }}

Real example from JanusVR 40.3:

TODO: Grab real example

Will receive the following if everything is OK.

{"method":"okay"} 

1.7 "portal" Method


When a user creates a new portal:

{"method":"portal", "data":{"url":"http://...", "pos":[1,2,4], "fwd":[0,1,0]}}

Real example from JanusVR 40.3:

{"method":"portal", "data":{"url":"http://www.vrsites.com","pos":"-7.16883 -0.267702 -6.57243","fwd":"0.967686 0 -0.234104"}}

Will receive the following if everything is OK.

Will receive: {"method":"okay"}


1.8 "users_online" Method


Get list of connected users.

Defined in config.js: config.maxUserResults = 100.

{"method": "users_online"} 
List all users online up to config.maxUserResults.
{"method": "users_online", "data": {"maxResults": 50}}
List all users online up to ‘maxResults’  or config.maxUserResults, whichever is smaller.
{"method": "users_online", "data": {"roomId": "xyz"}}
List all users in ‘roomId’ up to config.maxUserResults.
{"method": "users_online", "data": {"maxResults": 50, "roomId": "xyz"}}
List all users in ‘roomId’ up to ‘maxResults’  or config.maxUserResults, whichever is smaller.

Reply:

{"method": "users_online", "data": {"results": 3, "roomId": "xyz", "users": ["Arthur Dent", "Data", "Lore"]}

======================================

2. Server -> Client Notifications:

======================================


2.1 "user_moved" notification


When a user moves in any room that you are subscribed too, will recive notification about your own movement.

{"method":"user_moved","data":{"roomId":"fgdgd","userId":"LL","position":[0,0,0,0,0,0,0]}}

Real example from interaction with JanusVR 40.3:

Some user_moved notifications will contain extra information:

{"method":"user_moved","data":{"roomId":"e562b2e1339fc08d635d28481121857c","userId":"ProudMinna333","position":{"pos":"8.38889 -0.267704 -5.83333","dir":"-1 -1.33e-06 9.42e-07","view_dir":"-1 -1.33e-06 9.42e-07","up_dir":"-1.33e-06 1 1.25e-12","head_pos":"0 0 0","avatar":"<FireBoxRoom><Assets><AssetObject id=^head^ src=^http://avatars.vrsites.com/chibii/head_male.obj^ mtl=^http://avatars.vrsites.com/chibii/mtls/head_male3.mtl^ /><AssetObject id=^body^ src=^http://avatars.vrsites.com/chibii/body_male.obj^ mtl=^http://avatars.vrsites.com/chibii/mtls/body_male3.mtl^ /></Assets><Room><Ghost id=^ProudMinna333^ js_id=^3^ scale=^1.700000 1.700000 1.700000^ head_id=^head^ head_pos=^0.000000 0.750000 0.000000^ body_id=^body^ /></Room></FireBoxRoom>"}}}

However, most will only contain something like the following:

{"method":"user_moved","data":{"roomId":"e562b2e1339fc08d635d28481121857c","userId":"ProudMinna333","position":{"pos":"8.38889 -0.267704 -5.83333","dir":"-1 -1.33e-06 9.42e-07","view_dir":"-1 -1.33e-06 9.42e-07","up_dir":"-1.33e-06 1 1.25e-12","head_pos":"0 0 0"}}}

2.2 "user_chat" notification


When a user says something in text chat.

{"method":"user_chat", "data":{"message":"The message", "userId":"LL"}}

Real example from interaction with JanusVR 40.3:

{"method":"user_chat", "data":{"roomId":"69de79e1077103cb59d1a890e96c7ef2","userId":"ProudMinna333","message":"hello!"}}

2.3 "user_leave"/"user_enter" notification


When a user changes room:

{"method":"user_leave", "data":{"userId":"LL","roomId":"oldRoomId"}}
{"method":"user_enter", "data":{"userId":"LL","roomId":"newRoomId"}}

The followed up with a move "user_moved" event

Real example from interaction with JanusVR 40.3:

TODO: Grab example of "user_leave"

TODO: Grab example of "user_enter"


2.4 "user_portal" notification


When a user creates a portal:

{"method":"user_portal", "data":{"userId":"LL","roomId":"345678354764987457","url":"http://...", "pos":[0,0,0], "fwd":[0,1,0]}}

Real example from interaction with JanusVR 40.3:

{"method":"user_portal", "data":{"roomId":"e562b2e1339fc08d635d28481121857c","userId":"ProudMinna333","url":"http://www.vrsites.com","pos":"-7.16883 -0.267702 -6.57243","fwd":"0.967686 0 -0.234104"}}

2.4 "user_disconnected" notification


When a user disconnects:

{"method":"user_disconnected","data":{"userId":"LL"}}

Server APIs

Below are the various JanusVR server APIs available for developers to take advantage of.

Popular Rooms API

The Popular Rooms API allows developers to find commonly visited webspaces. It can be found here

getPopularRooms URL Parameters

  • desc = true/false- Whether or not the output is sorted in ascending or descending order. Defaults to false.
  • orderBy = lastSeen/weight - When set to weight, output will be sorted by popularity (their weight). When set to lastSeen, entries most recently visited by a user will be shown first. Defaults to weight.
  • offset = # - Which starting entry to begin outputting from. Defaults to 0.
  • limit = # - How many entries above the starting offset to output. Defaults to 20.
  • urlContains = {domainname} - Only displays entries that contain a certain url. For instance, ?urlContains=vesta.janusvr.com.

JSON returned from this API

  • roomName - The title of the specified room.
  • thumbnail - The thumbnail associated with this room.
  • roomURL - The url of the specified room.
  • weight - How popular the room is. This value raises as more people visit the room, and drops exponentially over time.
  • count - The number of visits the specified room has received.
  • lastEntered - When someone last visited this room, output in time since epoch.

PartyMode API

The PartyMode API allows developers to find users broadcasting their location in real time. It can be found here

partymodeAPI URL Parameters

There are currently no parameters for this API. Check back in the future.

JSON returned from this API

  • userId - The broadcaster's userId.
  • roomId - A hashed version of the broadcaster's current url.
  • url - The broadcaster's current url.
  • name - The broadcaster's current location's title.