function getPacket(channel, type, payload) { let packet = { channel: channel, data: { type: type, payload: payload } } return JSON.stringify(packet) } function getClickPacket(uuid, item_id) { return getPacket( 'SERVER_IN_OPERATOR_CLICK', 'nl.iobyte.parkplus.api.packet.payloads.operator.ClientOperatorClickPayload', { uuid: uuid, item_id: item_id } ) } $(document).on('click', "div.panel[id^='button-'] > div.panel-body > img", function() { const parent = $(this).parent().parent(); const id = parent.attr("id").replace("button-", ""); if(!socket || hasConnected !== true) return socket.emit( 'data', getClickPacket( fixUUID(window.settings.uuid), id ) ); }); window.sendMessage = function(message) { if(hasConnected) socket.send(message); } let hasConnected = false let socket = null $(() => { socket = io('websocket.iobyte.nl', { query: "type=client&id=" + window.settings.id + "&uuid=" + fixUUID(window.settings.uuid) + "&attraction=" + window.settings.attraction + "&token=" + window.settings.pin, autoConnect: false, withCredentials: false }) socket.on('connect', () => { setTimeout(() => { if(hasConnected) return socket.close() }, 5 * 1000) }) socket.on('disconnect', () => { const control = $("span#control"); control.removeClass(); control.addClass("control-status"); control.addClass("status-closed"); control.html("Lost Connection"); setTimeout(() => { if(hasConnected) return socket.close() }, 5 * 1000) }) socket.on('error', e => { socket.close() console.log(e) }) socket.on('close', () => { hasConnected = true const control = $("span#control"); control.removeClass(); control.addClass("control-status"); control.addClass("status-closed"); control.html("Disconnected"); }) socket.on('data', payload => { try { payload = JSON.parse(payload) } catch (e) { return } if(!payload) return if(!payload.hasOwnProperty('channel')) return let channel = payload.channel; if(channel === 'CLIENT_KICK') { socket.close() return } let data; if(payload.hasOwnProperty('data')) { data = payload.data.payload; } else { data = payload.data } handlePacket(channel, data) }) }) function fixUUID(i) { return i.substr(0,8) + "-" + i.substr(8,4) + "-" + i.substr(12,4) + "-" + i.substr(16,4) + "-" + i.substr(20) } function handlePacket(channel, payload) { switch (channel) { case 'CLIENT_NOTIFICATION': handleNotification(payload.title, payload.message) break case 'CLIENT_OPERATOR_REQUEST_REPLY': handleReply(payload) break case 'CLIENT_ATTRACTION_STATE': handleStatus(payload.status) break case 'CLIENT_OPERATOR_STATE': handleState(payload.item_id, payload.state) break } } function handleNotification(title, message) { const msg = $("div#message"); msg.html('