81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
class MapEventHandler {
|
|
constructor(options, rider_markers, cust_markers) {
|
|
this.options = options;
|
|
this.rider_markers = rider_markers;
|
|
this.cust_markers = cust_markers;
|
|
}
|
|
|
|
connect(user_id, host, port) {
|
|
var d = new Date();
|
|
var client_id = "dash-" + user_id + "-" + d.getMonth() + "-" + d.getDate() + "-" + d.getHours() + "-" + d.getMinutes() + "-" + d.getSeconds() + "-" + d.getMilliseconds();
|
|
console.log(client_id);
|
|
|
|
this.mqtt = new Paho.MQTT.Client(host, port, client_id);
|
|
var options = {
|
|
useSSL: true,
|
|
timeout: 3,
|
|
onSuccess: this.onConnect,
|
|
};
|
|
|
|
this.mqtt.onMessageArrived = this.onMessage;
|
|
|
|
console.log('connecting to mqtt server...');
|
|
this.mqtt.connect(options);
|
|
|
|
return this.mqtt;
|
|
}
|
|
|
|
onConnect() {
|
|
console.log('connected!');
|
|
|
|
this.mqtt.subscribe(this.options.channels.rider_location);
|
|
}
|
|
|
|
onMessage(msg) {
|
|
// console.log(msg);
|
|
console.log('received message');
|
|
|
|
var channel = msg.destinationName;
|
|
var chan_split = channel.split('/');
|
|
var payload = msg.payloadString;
|
|
|
|
// handle different channels
|
|
switch (chan_split[0]) {
|
|
case "rider":
|
|
this.handleRider(chan_split, payload);
|
|
break;
|
|
}
|
|
}
|
|
|
|
handleRider(chan_split, payload) {
|
|
console.log("rider message");
|
|
switch (chan_split[2]) {
|
|
case "location":
|
|
console.log("got location for rider " + chan_split[1] + " - " + payload);
|
|
pl_split = payload.split(':');
|
|
console.log(pl_split);
|
|
|
|
// check for correct format
|
|
if (pl_split.length != 2)
|
|
break;
|
|
|
|
var lat = parseFloat(pl_split[0]);
|
|
var lng = parseFloat(pl_split[1]);
|
|
|
|
// move marker
|
|
console.log(this.rider_markers[chan_split[1]]);
|
|
|
|
// check if marker exists
|
|
if (this.rider_markers.hasOwnProperty(chan_split[1])) {
|
|
// marker's there, move it
|
|
this.rider_markers[chan_split[1]].setLatLng(L.latLng(lat, lng));
|
|
} else {
|
|
// no marker, make one
|
|
console.log('creating marker');
|
|
// TODO: make it add to the correct map layer
|
|
this.rider_markers[chan_split[1]]= L.marker([lat, lng], { icon: this.options.icons.rider_available }).addTo(map);;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|