Client Websocket Services
In the Webservice/REST API, two websockets are offered to clients. They are:
- /jmapdata
Request a websocket for real-time map overlay updates with trackers, etc. It is open for all, but login- and authorized users can receive different content.
- /notify
Request a websocket for notifications. This is a generic publish/subscribe service.
Websocket for map overlay updates
This service will provide real-time updates of map-information. Typically APRS points and trails. Clients can send SUBSCRIBE commands over the websocket to request updates. When the server receives such a command, it will start sending updates to the client:
SUBSCRIBE filter, x1, x2, x3, x4, scale [, tag]
Where the parameters are:
filter - name of the filter to be used at the server. Corresponds to the filter menu on the webapp2 client.
x1 - upper limit (north) of the area of interest (degrees latitude -90 to 90).
x2 - right limit (east) of the are of interest (degrees longitude).
x3 - lower limit (souith) of the area of interest (degrees latitude -90 to 90).
x4 - left limit (west) of the area of interest (degrees longitude)
scale - scale of the map as it is displayed on the screen.
tag (optional) - limit the selection of tracking-obbjects to items having this tag set.
Update format
Updates are sent to client when there is a change within the area of interest. The frequency of updates is limited to max 1 per 10 seconds. Updates are in JSON format. Note that when the connection is made and before a SUBSCRIBE command is issued, a JsOverlay object is sent to client (where points, delete, lines and pcloud is null). It can be used to see the authorizations.
JsOverlay (top level object):
view |
String |
Filter name |
authorization |
AuthInfo |
Login and authorization info |
sarmode |
boolean |
True if SAR mode is active |
points |
List of JsPoint |
Items (may be null or empty) |
delete |
List of String |
Idents (callsigns) of items to be deleted (may be null or empty) |
lines |
List of JsLine |
Lines to be drawn on map (may be null or empty) |
pcloud |
List of JsTPoint |
Simple points to be plotted on map (may be null or empty) |
AuthInfo (Info about authorization level and services):
servercall |
String |
Callsign of server |
services |
List of String |
Services active on server. ‘basic’ is always there. Plugins may add more… |
userid |
String |
User-id if logged in. null if not logged in. |
groupid |
String |
Group-id if logged in. null if not logged in. |
callsign |
String |
HAM radio callsign of logged in user. null if not set or not logged in. |
tagsAuth |
String |
Authorization based on tags (null if not logged in) |
admin |
boolean |
true if authorized as superuser |
sar |
boolean |
true if authorized as SAR user |
JsPoint (Tracker, etc.):
ident |
String |
Identifier of item (typically this is the callsign) |
pos |
Pair of float |
Position (long, lat) of item. |
title |
String |
Description |
redraw |
boolean |
True if item is changing (need to be redrawn on map) |
own |
boolean |
True if item is an APRS object owned by this server. |
aprs |
boolean |
True if this is APRS |
telemetry |
boolean |
True if point has APRS telemetry |
sarAuth |
boolean |
True if user has authorization to change point. |
icon |
String |
File path of icon |
href |
String |
URL if sign (otherwise null or empty) |
label |
JsLabel |
Label of item (may be null or empty) |
trail |
JsTrail |
Trail (last movements) of moving item (may be null or empty) |
JsLine (Line between two positions):
ident |
String |
Ident of points that are connected by line ( ‘.’ is used as separator) |
from |
Pair of float |
Geographical point where line starts (lon, lat) |
to |
Pair of float |
Geographical point where line ends (lon, lat) |
type |
String |
Some indication what the line represents. |
JsLabel (Label of a tracker point):
id |
String |
Identifier (callsign) or alias (tactical callsign) to be shown in label |
style |
String |
Style (CSS class) to be used with label |
hidden |
boolean |
True if label is to be hidden |
JsTrail (series of points representing movement):
style |
List of String |
Colours (line, point) to be applied to trail when drawn on map |
linestring |
List of JsTPoint |
Trail - list of timestamped points |
JsTPoint (point of a trail):
pos |
Pair of float |
Geographical position (lon, lat) |
time |
Date |
Timestamp (ISO format) |
path |
String |
Digipeater path (if APRS) |
Websocket for notifications
This service will provide various asynchronous messages (events), primarily from servers to clients. Clients can subscribe to different ‘rooms’ provided by servers. Clients that subscribe to a room get messages posted to that room by the server (or other clients). This is a kind of general publish/subscribe service. Clients can send the following commands to the server over the websocket:
SUBSCRIBE room
UNSUBSCRIBE room
PUT room,data
Where the parameters are:
room - name of the room. Rooms can be created by servers.
data - data to be sent to subscribers of the room. Can be JSON encoded.
Rooms offered by aprsd
The aprsd creates the following rooms. Observe that some of the rooms can be created specific for users or specific for APRS callsigns. Events without data-content just indicates that change has happened and client can the use REST API to get updated information.
Room name |
Data content |
Purpose |
|---|---|---|
messages:<userid> |
Message |
Short messages - incoming message |
msgstatus:<userid> |
Status |
Short messages - status |
auth:<userid> |
Change in user role or authorizations |
|
bullboard |
Change in bulletin board content |
|
sign |
Change in signs (db plugin) |
|
object |
Change in JSON objects (db plugin) |
|
sharing |
Change in sharings of objects |
|
telemetry:<callsign> |
Change in telemetry data for a callsign |
|
notify:SYSTEM |
Notification |
General system notications |
notify:ADMIN |
Notification |
User notification for admin-users |
notify:<userid> |
Notification |
User notification for specific user |
User notification events
A special type of events are user-notifications. They are sent to the client-app which can display them on the screen. A typical way to do this is to show a icon showing the count of active notifications. The user can click to see the list of notifications which indicate systems events, that messages has arrived, etc..
User notifications carry a JSON-encoded object with the following fields:
type |
String |
Notification type |
from |
String |
Sender of the event (userid or ‘admin’) |
text |
String |
Content, short text |
time |
Date |
Timestamp |
ttl |
integer |
Time to live (in seconds) |
The type field can be used to identify purposes of events. For example to report errors. Polaric Webapp2 currently recognizes the following: loc, check, chat, mail, system, error, alert or info and uses different icons when displaying those.
Short messages
Logged in users can send messages to each other. Incoming messages can be sent as asynchronous events through the ‘message’ room. A notification is sent in addition. The message has the following fields:
msgId |
integer |
Unique message identifier |
status |
integer |
Delivery status: 0=unknkown, 1=success, -1=failure |
time |
Date |
Timestamp |
from |
String |
Sender (userid@server or callsign@APRS) |
to |
String |
Recipient |
read |
boolean |
True if read? |
outgoing |
boolean |
True if outgoing message |
text |
String |
Content |
The ‘msgstatus’ room can be used to notify about delivery success or failure.
msgId |
integer |
Unique message identifier |
status |
integer |
Delivery status: 0=unknkown, 1=success, -1=failure |
info |
String |
Optional information |
See also REST API for short messages