mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 10:45:54 +00:00
chore: got rid of timestamp checking on server
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { MutableRefObject, useCallback, useEffect, useRef } from 'react';
|
||||
import { Command, Commands, MapHandlers } from '@/hooks/Mapper/types';
|
||||
import { MapEvent } from '@/hooks/Mapper/events';
|
||||
import { useThrottle } from '@/hooks/Mapper/hooks';
|
||||
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
|
||||
import { Command, Commands, MapHandlers } from '@/hooks/Mapper/types';
|
||||
import { MutableRefObject, useCallback, useEffect, useRef } from 'react';
|
||||
|
||||
export const useCommonMapEventProcessor = () => {
|
||||
const mapRef = useRef<MapHandlers>() as MutableRefObject<MapHandlers>;
|
||||
@@ -26,9 +27,16 @@ export const useCommonMapEventProcessor = () => {
|
||||
mapRef.current?.command(name, data);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
refQueue.current.forEach(x => mapRef.current?.command(x.name, x.data));
|
||||
const processQueue = useCallback(() => {
|
||||
const commands = [...refQueue.current];
|
||||
refQueue.current = [];
|
||||
commands.forEach(x => mapRef.current?.command(x.name, x.data));
|
||||
}, []);
|
||||
|
||||
const throttledProcessQueue = useThrottle(processQueue, 200);
|
||||
|
||||
useEffect(() => {
|
||||
throttledProcessQueue();
|
||||
}, [systems]);
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './usePageVisibility';
|
||||
export * from './useActualizeSettings';
|
||||
export * from './useClipboard';
|
||||
export * from './useHotkey';
|
||||
export * from './usePageVisibility';
|
||||
export * from './useSkipContextMenu';
|
||||
export * from './useActualizeSettings';
|
||||
export * from './useThrottle';
|
||||
|
||||
13
assets/js/hooks/Mapper/hooks/useThrottle.ts
Normal file
13
assets/js/hooks/Mapper/hooks/useThrottle.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { useCallback, useRef } from 'react';
|
||||
|
||||
export const useThrottle = (callback: any, limit: number) => {
|
||||
const lastCallRef = useRef(0);
|
||||
const throttledCallback = useCallback(() => {
|
||||
const now = Date.now();
|
||||
if (now - lastCallRef.current >= limit) {
|
||||
lastCallRef.current = now;
|
||||
callback();
|
||||
}
|
||||
}, [callback, limit]);
|
||||
return throttledCallback;
|
||||
};
|
||||
@@ -4,8 +4,6 @@ defmodule WandererAppWeb.MapLive do
|
||||
|
||||
require Logger
|
||||
|
||||
@server_event_unsync_timeout :timer.minutes(2)
|
||||
|
||||
@impl true
|
||||
def mount(%{"slug" => map_slug} = _params, _session, socket) when is_connected?(socket) do
|
||||
Process.send_after(self(), %{event: :load_map}, Enum.random(10..800))
|
||||
@@ -96,16 +94,10 @@ defmodule WandererAppWeb.MapLive do
|
||||
|> push_navigate(to: ~p"/tracking/#{map_slug}")}
|
||||
|
||||
@impl true
|
||||
def handle_info(%{timestamp: timestamp} = info, %{assigns: %{map_slug: map_slug}} = socket) do
|
||||
duration = DateTime.diff(DateTime.utc_now(), timestamp, :millisecond)
|
||||
|
||||
if duration > @server_event_unsync_timeout do
|
||||
{:noreply, socket |> push_navigate(to: ~p"/#{map_slug}")}
|
||||
else
|
||||
{:noreply,
|
||||
socket
|
||||
|> WandererAppWeb.MapEventHandler.handle_event(info)}
|
||||
end
|
||||
def handle_info(info, %{assigns: %{map_slug: map_slug}} = socket) do
|
||||
{:noreply,
|
||||
socket
|
||||
|> WandererAppWeb.MapEventHandler.handle_event(info)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
||||
Reference in New Issue
Block a user