Merge branch 'main' into pings

This commit is contained in:
Dmitry Popov
2025-05-20 16:08:58 +02:00
4 changed files with 29 additions and 18 deletions
+7 -9
View File
@@ -118,7 +118,10 @@ defmodule WandererApp.Map.ZkbDataFetcher do
|> Enum.map(&elem(&1, 0))
if changed_systems == [] do
Logger.debug(fn -> "[ZkbDataFetcher] No changes in detailed kills for map_id=#{map_id}" end)
Logger.debug(fn ->
"[ZkbDataFetcher] No changes in detailed kills for map_id=#{map_id}"
end)
:ok
else
# Build new details for each changed system
@@ -153,10 +156,7 @@ defmodule WandererApp.Map.ZkbDataFetcher do
changed_data = Map.take(updated_details_map, changed_systems)
@pubsub_client.broadcast!(WandererApp.PubSub, map_id, %{
event: :detailed_kills_updated,
payload: changed_data
})
WandererApp.Map.Server.Impl.broadcast!(map_id, :detailed_kills_updated, changed_data)
:ok
end
@@ -173,6 +173,7 @@ defmodule WandererApp.Map.ZkbDataFetcher do
Enum.filter(all_system_ids, fn system_id ->
new_kills_count = Map.get(new_kills_map, system_id, 0)
old_kills_count = Map.get(old_kills_map, system_id, 0)
new_kills_count != old_kills_count and
(new_kills_count > 0 or (old_kills_count > 0 and new_kills_count == 0))
end)
@@ -187,10 +188,7 @@ defmodule WandererApp.Map.ZkbDataFetcher do
payload = Map.take(new_kills_map, changed_system_ids)
@pubsub_client.broadcast!(WandererApp.PubSub, map_id, %{
event: :kills_updated,
payload: payload
})
WandererApp.Map.Server.Impl.broadcast!(map_id, :kills_updated, payload)
:ok
end
@@ -324,7 +324,11 @@ defmodule WandererApp.Map.Server.Impl do
def broadcast!(map_id, event, payload \\ nil) do
if can_broadcast?(map_id) do
@pubsub_client.broadcast!(WandererApp.PubSub, map_id, %{event: event, payload: payload})
@pubsub_client.broadcast!(WandererApp.PubSub, map_id, %{
event: event,
payload: payload,
timestamp: DateTime.utc_now()
})
end
:ok
@@ -211,10 +211,7 @@ defmodule WandererAppWeb.MapSignaturesEventHandler do
})
end
Phoenix.PubSub.broadcast!(WandererApp.PubSub, map_id, %{
event: :signatures_updated,
payload: solar_system_source
})
WandererApp.Map.Server.Impl.broadcast!(map_id, :signatures_updated, solar_system_source)
{:noreply, socket}
@@ -261,10 +258,7 @@ defmodule WandererAppWeb.MapSignaturesEventHandler do
})
end)
Phoenix.PubSub.broadcast!(WandererApp.PubSub, map_id, %{
event: :signatures_updated,
payload: solar_system_source
})
WandererApp.Map.Server.Impl.broadcast!(map_id, :signatures_updated, solar_system_source)
{:noreply, socket}
+15
View File
@@ -4,6 +4,8 @@ defmodule WandererAppWeb.MapLive do
require Logger
@server_event_unsync_timeout :timer.minutes(5)
@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))
@@ -93,6 +95,19 @@ 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
end
@impl true
def handle_info(info, socket),
do: