Spaces:
Runtime error
HapticTouch Server
Instructions
git clone https://github.com/AnujPanthri/HapticLink
cd HapticLink/server
npm install
npm run dev
To build use:
npm run build
To run use:
npm start
Documentation
Both HTTP and WebSocket server are running on the same port
WORK IN PROGRESS
WebSocket API
WebSockets payload will be in JSON and require atleast a route property
Types can be client -> server, server -> client <private | room>.
Private messages are sent directly to client
Room messages are sent to everyone in a room
Test Connection
Type: client -> server
Payload:
{
"route": "test_connection"
}
Type: server -> client <private>
Response:
{
"message": "test_connection_response",
}
Set Username
Type: client -> server
Payload:
{
"route": "set_username",
"username": string,
}
Type: server -> client <private>
Payload:
{
"message": "set_username_response",
"status": string,
}
Get User Info
Type: client -> server
Payload:
{
"route": "get_user_info",
}
Type: server -> client <private>
Payload:
{
"message": "set_username_response",
"status": string,
"user": {
"username": string,
"id": string,
"currentRoom": string,
}
}
Join Room
Type: client -> server
Description: Used to enter a room. Join an existing room by including roomId, or if room doesn't exist, create one with that roomId
Payload:
{
"route": "join_room",
"roomId"?: string, // Room Id, optional
"username"?: string,
}
Type: server -> client <private>
Payload (If error):
{
"message": "enter_room_response",
"status": string,
}
Leave Room
Type: client -> server
Description: Used to enter a room.
Payload:
{
"route": "leave_room",
"roomId": string; // Room Id, optional
}
Type: server -> client <private>
Payload:
{
"route": "leave_room_response",
"status": string,
}
Get Rooms
Type: client -> server
Description: Used to get list of joined rooms
Payload:
{
"route": "get_rooms"
}
Type: server -> client <private>
Payload:
{
"message": "get_rooms_response",
"rooms": [{id: string, userCount: number}]
}
Room Update
Type: server -> client <room>
Description: Server message that is sent when the room gets updated such as someone joins or leaves
Payload:
{
"message": "room_update",
"roomId": string,
"users": [{
username: string,
id: string,
online: boolean,
lastOnline: number, // ms epoch time
}],
}
Send Touch
Type: client -> server
Description: Used to send touch/vibration data to room. Client assigns a number for an ID. That ID is then used to update the vibration. Re-use send_touch to update previous vibration. Use "type": "disable" to disable the vibration. If an update isn't sent within 1 second of creation/last update it will automatically be disabled.
Payload:
{
"route": "send_touch",
"id": number, // Used to indentify vibrations for updating or disabling them
"type": "enable" | "disable", // Whether the vibration is active or not.
"position": {
x: number,
y: number,
},
"color"?: string, // Hex value. Default: random
"intensity"?: number, // Vibration intensity. Default: 1
}
Receive Touch
Type: server -> client <room>
Description:
Payload:
{
"message": "receieve_touch",
"id": string, // format: [userID]_[id]
"type": "enable" | "disable", // Whether the vibration is active or not.
"user": {
username: string,
id: string,
},
"position": {
x: number,
y: number,
},
"color": string, // Hex value.
"intensity": number, // Vibration intensity.
}
API
GET /
Responds with homepage.