33 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Pleroma.Web.Streamer.Ping do
 | |
|   use GenServer
 | |
|   require Logger
 | |
| 
 | |
|   alias Pleroma.Web.Streamer.State
 | |
|   alias Pleroma.Web.Streamer.StreamerSocket
 | |
| 
 | |
|   @keepalive_interval :timer.seconds(30)
 | |
| 
 | |
|   def start_link(opts) do
 | |
|     ping_interval = Keyword.get(opts, :ping_interval, @keepalive_interval)
 | |
|     GenServer.start_link(__MODULE__, %{ping_interval: ping_interval}, name: __MODULE__)
 | |
|   end
 | |
| 
 | |
|   def init(%{ping_interval: ping_interval} = args) do
 | |
|     Process.send_after(self(), :ping, ping_interval)
 | |
|     {:ok, args}
 | |
|   end
 | |
| 
 | |
|   def handle_info(:ping, %{ping_interval: ping_interval} = state) do
 | |
|     State.get_sockets()
 | |
|     |> Map.values()
 | |
|     |> List.flatten()
 | |
|     |> Enum.each(fn %StreamerSocket{transport_pid: transport_pid} ->
 | |
|       Logger.debug("Sending keepalive ping")
 | |
|       send(transport_pid, {:text, ""})
 | |
|     end)
 | |
| 
 | |
|     Process.send_after(self(), :ping, ping_interval)
 | |
| 
 | |
|     {:noreply, state}
 | |
|   end
 | |
| end
 | 
