logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma

ping.ex (1064B)


      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