1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.Streamer.Ping do
9 alias Pleroma.Web.Streamer.State
10 alias Pleroma.Web.Streamer.StreamerSocket
12 @keepalive_interval :timer.seconds(30)
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__)
19 def init(%{ping_interval: ping_interval} = args) do
20 Process.send_after(self(), :ping, ping_interval)
24 def handle_info(:ping, %{ping_interval: ping_interval} = state) do
28 |> Enum.each(fn %StreamerSocket{transport_pid: transport_pid} ->
29 Logger.debug("Sending keepalive ping")
30 send(transport_pid, {:text, ""})
33 Process.send_after(self(), :ping, ping_interval)