JavaScript API
To include the Scaledrone client library in your website, add the Scaledrone JavaScript library script tag to the <head> section of your HTML file.
You can choose between two JS library versions:
<script src='https://cdn.scaledrone.com/scaledrone.min.js' type='text/javascript'></script>
<script src='https://cdn.scaledrone.com/scaledrone-lite.min.js' type='text/javascript'></script>
Connecting
To connect to a channel you need to first create it in the admin panel of Scaledrone's website. One instance of Scaledrone establishes a single connection.
const drone = new Scaledrone('CHANNEL_ID_FROM_DASHBOARD');
Scaledrone Events
open event
A connection has been opened. The error argument indicates a problem with the connection.
drone.on('open', error => {
  // Connection has been opened if no error
});
error event
An error has occurred with the connection.
drone.on('error', error => {
  // An error has occurred with the connection
});
close event
Connection to Scaledrone has been closed. After this event, Scaledrone will not try to automatically reconnect.
drone.on('close', event => {
  // Connection has been closed
});
disconnect event
User has disconnected and Scaledrone is trying to reconnect.
drone.on('disconnect', () => {
  // User has disconnected, Scaledrone will try to reconnect soon
});
reconnect event
User has successfully reconnected after disconnecting.
drone.on('reconnect', () => {
  // User has been reconnected
});
Listening to messages
All messages move within rooms. To listen to messages, you need to subscribe to a specific room. 
 Users can connect to multiple rooms (this does not create extra connections).
// Subscribe after the 'open' or 'authenticate' event from the Scaledrone instance
const room = drone.subscribe('room_name');
room.on('open', error => {
  if (error) {
    return console.error(error);
  }
  // Connected to room
});
room.on('message', message => {
  // Received message from room
});
Room Events
message event
Received a message that was sent to the room. The message object structure looks like this:
| Property | Datatype | Example value | Always exists | Comment | 
|---|---|---|---|---|
| data | object, string, number | "Hello" | ✓ | The actual data that was sent to the room | 
| id | string | "oNx1aglcnb" | ✓ | Unique ID of the message | 
| timestamp | integer | 1547049305 | ✓ | Unix timestamp | 
| clientId | string | "pfH6Al1v0i" | ✗ | ID of the socket client who sent the message. Is undefined when message was sent using a REST API. | 
| member | object | ✗ | The member who sent the message. Exists when using <a href="/docs/api-clients/observable-rooms">observable rooms.</a> | 
room.on('message', message => {
  const {data, id, timestamp, clientId, member} = message;
});
Sending messages
All users subscribed to the room will receive the message (also the publishing user, if it's subscribed). You don't have to be subscribed to a room when publishing to it.
The message can be anything that can be stringified as JSON and then parsed (for example a Number, String or an Object).
drone.publish({
  room: 'room_name',
  message: {hello: 'world'}
});
Closing the connection
Closes the connection to Scaledrone.
drone.close();
Unsubscribing from a room
Stops listening to messages from the room.
room.unsubscribe();
Who's online functionality
To keep track of users that are connected to a room see the observable rooms documentation.
Authentication
Client authentication is an optional step and can only be used when you have set up a JWT server. Read more about this from the authentication documentation
Full example
Make sure you replace the CHANNEL_ID string with your Scaledrone channel's ID from the dashboard.
const drone = new Scaledrone('CHANNEL_ID');
drone.on('error', error => console.error(error));
const room = drone.subscribe('my-room');
room.on('message', message => console.log('Received message:', message));
const drone = new Scaledrone('CHANNEL_ID');
drone.on('open', error => {
  if (error) {
    return console.error(error);
  }
  drone.publish({
    room: 'my-room',
    message: {message: 'Hello world!', score: 42}
  });
});
const room = drone.subscribe('my-room');
room.on('open', error => {
  if (error) {
    console.error(error);
  } else {
    console.log('Connected to room');
  }
});
room.on('message', message => console.log('Received message:', message));
drone.on('error', error => console.error(error));