This commit is contained in:
2026-04-18 08:08:47 -04:00
parent 32c4f2a835
commit d72550b3c1
5 changed files with 70 additions and 13 deletions

View File

@@ -33,7 +33,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useDialogPluginComponent } from 'quasar'; import { useDialogPluginComponent } from 'quasar';
import { reverseGeocodeRateLimited } from 'functions/reverseGeocode'; import { reverseGeocodeRateLimited } from 'functions/reverseGeocodeSocket';
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import FormattedAddress from 'components/FormattedAddress.vue'; import FormattedAddress from 'components/FormattedAddress.vue';

View File

@@ -32,7 +32,7 @@ function handleEmit() {
const event = sockEvent.value; const event = sockEvent.value;
const jsonArgs = eventArgs.value; const jsonArgs = eventArgs.value;
socket.emit(event as keyof ClientToServerEvents, jsonArgs, (resp: unknown) => { socket.emit(event as keyof ClientToServerEvents, jsonArgs, (resp: unknown) => {
console.log('Server Reponse: ' + String(resp)); console.log('Server Response: %s', resp);
}); });
sockEvent.value = ''; sockEvent.value = '';
eventArgs.value = ''; eventArgs.value = '';

View File

@@ -237,6 +237,13 @@ export interface ClientToServerEvents {
}, },
callback?: (response: LocationMarkUpdateResponse) => void, callback?: (response: LocationMarkUpdateResponse) => void,
) => void; ) => void;
reverse_geocode: (
args: {
latitude: number;
longitude: number;
},
callback?: (response: NominatimResponse) => void,
) => void;
} }
export interface SimulationControlResponse { export interface SimulationControlResponse {

View File

@@ -0,0 +1,24 @@
// services/nominatimService.ts
import { useSocketioStore } from 'stores/socketio';
import type { NominatimResponse, NominatimRequest } from 'components/models';
const socketStore = useSocketioStore();
let lastRequestTime = 0;
export const reverseGeocodeRateLimited = async (
lat: number,
lon: number,
): Promise<NominatimResponse> => {
const now = Date.now();
const timeSinceLast = now - lastRequestTime;
// Wait if less than 1000ms has passed
if (timeSinceLast < 1000) {
await new Promise((resolve) => setTimeout(resolve, 1000 - timeSinceLast));
}
const response: NominatimResponse = await socketStore.revGeoCode({latitude: lat, longitude: lon} as NominatimRequest);
lastRequestTime = Date.now();
return response;
};

View File

@@ -14,6 +14,8 @@ import type {
SimulationStatus, SimulationStatus,
LocationMarkUpdateResponse, LocationMarkUpdateResponse,
LocationItemUpdate, LocationItemUpdate,
NominatimResponse,
NominatimRequest,
} from 'components/models'; } from 'components/models';
const $q = useQuasar(); const $q = useQuasar();
@@ -159,9 +161,10 @@ export const useSocketioStore = defineStore('socketio', {
console.log('Location item update received, data: ', inData); console.log('Location item update received, data: ', inData);
this.locationQueueData[inData.loc_id] = inData.data; this.locationQueueData[inData.loc_id] = inData.data;
}); });
/*
socket.onAny((eventName, ...args) => { socket.onAny((eventName, ...args) => {
console.log('Event received: ', eventName, ' Args: ', args, ''); console.log('Event received: ', eventName, ' Args: ', args, '');
/* if (serverToClientKnownEvents.includes(eventName)) { if (serverToClientKnownEvents.includes(eventName)) {
console.log('Known event received: ', eventName, ' Args: ', args, ''); console.log('Known event received: ', eventName, ' Args: ', args, '');
} else { } else {
console.log( console.log(
@@ -175,8 +178,9 @@ export const useSocketioStore = defineStore('socketio', {
); );
console.log(`Received UNKNOWN Event: ${eventName}`, args); console.log(`Received UNKNOWN Event: ${eventName}`, args);
} }
*/
}); });
*/
}, },
connect() { connect() {
if (debugLog) { if (debugLog) {
@@ -396,7 +400,7 @@ export const useSocketioStore = defineStore('socketio', {
if (response.command_status === 'ERROR') { if (response.command_status === 'ERROR') {
throw new Error(response.message); throw new Error(response.message);
} else { } else {
this.simulationState = response.data?.simulation_queue_state this.simulationState = response.data?.simulation_queue_state;
if (debugLog) { if (debugLog) {
console.log('response from simulate_control_test-mode: ', response); console.log('response from simulate_control_test-mode: ', response);
} }
@@ -495,11 +499,17 @@ export const useSocketioStore = defineStore('socketio', {
throw new Error('latitude or longitude not set'); throw new Error('latitude or longitude not set');
} }
if (!address) { if (!address) {
address = "{latitude}, {longitude}" address = '{latitude}, {longitude}';
} }
socket.emit( socket.emit(
'simulation_control', 'simulation_control',
{ command: 'add', latitude: latitude, longitude: longitude, delay: delay, address: address }, {
command: 'add',
latitude: latitude,
longitude: longitude,
delay: delay,
address: address,
},
(response) => { (response) => {
if (response.command_status == 'ERROR') { if (response.command_status == 'ERROR') {
throw new Error(response.message); throw new Error(response.message);
@@ -575,15 +585,31 @@ export const useSocketioStore = defineStore('socketio', {
setDeviceState(state: boolean) { setDeviceState(state: boolean) {
this.deviceConnected = state; this.deviceConnected = state;
}, },
revGeoCode(nomRequest: NominatimRequest): Promise<NominatimResponse> {
return new Promise((resolve) => {
socket.emit('reverse_geocode', { latitude: nomRequest.latitude, longitude: nomRequest.longitude }, (response) => {
resolve(response);
});
});
},
updateLocationMark(loc_id: string, key: string, value: string | number) { updateLocationMark(loc_id: string, key: string, value: string | number) {
let fnctRtn: { command_status: string, message: string } = { command_status: '', message: '' }; let fnctRtn: { command_status: string; message: string } = {
command_status: '',
message: '',
};
if (debugLog) { if (debugLog) {
console.log('socketStore: Update LocationMark request, loc_id: %s, key: %s, new value: %s', loc_id, key, value); console.log(
'socketStore: Update LocationMark request, loc_id: %s, key: %s, new value: %s',
loc_id,
key,
value,
);
} }
if ( if (!this.locationQueueData[loc_id]) {
!this.locationQueueData[loc_id] fnctRtn = {
) { command_status: 'error',
fnctRtn = { command_status: 'error', message: 'Location Id: ' + loc_id + ' is not in the simulation queue' }; message: 'Location Id: ' + loc_id + ' is not in the simulation queue',
};
throw new Error('loc_id ' + loc_id + 'not found'); throw new Error('loc_id ' + loc_id + 'not found');
} }
if (debugLog) { if (debugLog) {