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">
import { useDialogPluginComponent } from 'quasar';
import { reverseGeocodeRateLimited } from 'functions/reverseGeocode';
import { reverseGeocodeRateLimited } from 'functions/reverseGeocodeSocket';
import { ref, onMounted } from 'vue';
import FormattedAddress from 'components/FormattedAddress.vue';

View File

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

View File

@@ -237,6 +237,13 @@ export interface ClientToServerEvents {
},
callback?: (response: LocationMarkUpdateResponse) => void,
) => void;
reverse_geocode: (
args: {
latitude: number;
longitude: number;
},
callback?: (response: NominatimResponse) => void,
) => void;
}
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,
LocationMarkUpdateResponse,
LocationItemUpdate,
NominatimResponse,
NominatimRequest,
} from 'components/models';
const $q = useQuasar();
@@ -159,9 +161,10 @@ export const useSocketioStore = defineStore('socketio', {
console.log('Location item update received, data: ', inData);
this.locationQueueData[inData.loc_id] = inData.data;
});
/*
socket.onAny((eventName, ...args) => {
console.log('Event received: ', eventName, ' Args: ', args, '');
/* if (serverToClientKnownEvents.includes(eventName)) {
if (serverToClientKnownEvents.includes(eventName)) {
console.log('Known event received: ', eventName, ' Args: ', args, '');
} else {
console.log(
@@ -175,8 +178,9 @@ export const useSocketioStore = defineStore('socketio', {
);
console.log(`Received UNKNOWN Event: ${eventName}`, args);
}
*/
});
*/
},
connect() {
if (debugLog) {
@@ -396,7 +400,7 @@ export const useSocketioStore = defineStore('socketio', {
if (response.command_status === 'ERROR') {
throw new Error(response.message);
} else {
this.simulationState = response.data?.simulation_queue_state
this.simulationState = response.data?.simulation_queue_state;
if (debugLog) {
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');
}
if (!address) {
address = "{latitude}, {longitude}"
address = '{latitude}, {longitude}';
}
socket.emit(
'simulation_control',
{ command: 'add', latitude: latitude, longitude: longitude, delay: delay, address: address },
{
command: 'add',
latitude: latitude,
longitude: longitude,
delay: delay,
address: address,
},
(response) => {
if (response.command_status == 'ERROR') {
throw new Error(response.message);
@@ -575,15 +585,31 @@ export const useSocketioStore = defineStore('socketio', {
setDeviceState(state: boolean) {
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) {
let fnctRtn: { command_status: string, message: string } = { command_status: '', message: '' };
let fnctRtn: { command_status: string; message: string } = {
command_status: '',
message: '',
};
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 (
!this.locationQueueData[loc_id]
) {
fnctRtn = { command_status: 'error', message: 'Location Id: ' + loc_id + ' is not in the simulation queue' };
if (!this.locationQueueData[loc_id]) {
fnctRtn = {
command_status: 'error',
message: 'Location Id: ' + loc_id + ' is not in the simulation queue',
};
throw new Error('loc_id ' + loc_id + 'not found');
}
if (debugLog) {