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; } } }