Merge remote-tracking branch 'origin/develop' into global-status-expiration
[akkoma] / lib / pleroma / web / streamer / ping.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.Streamer.Ping do
6 use GenServer
7 require Logger
8
9 alias Pleroma.Web.Streamer.State
10 alias Pleroma.Web.Streamer.StreamerSocket
11
12 @keepalive_interval :timer.seconds(30)
13
14 def start_link(opts) do
15 ping_interval = Keyword.get(opts, :ping_interval, @keepalive_interval)
16 GenServer.start_link(__MODULE__, %{ping_interval: ping_interval}, name: __MODULE__)
17 end
18
19 def init(%{ping_interval: ping_interval} = args) do
20 Process.send_after(self(), :ping, ping_interval)
21 {:ok, args}
22 end
23
24 def handle_info(:ping, %{ping_interval: ping_interval} = state) do
25 State.get_sockets()
26 |> Map.values()
27 |> List.flatten()
28 |> Enum.each(fn %StreamerSocket{transport_pid: transport_pid} ->
29 Logger.debug("Sending keepalive ping")
30 send(transport_pid, {:text, ""})
31 end)
32
33 Process.send_after(self(), :ping, ping_interval)
34
35 {:noreply, state}
36 end
37 end