55 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Web.Streamer do
 | |
|   alias Pleroma.Web.Streamer.State
 | |
|   alias Pleroma.Web.Streamer.Worker
 | |
| 
 | |
|   @timeout 60_000
 | |
|   @mix_env Mix.env()
 | |
| 
 | |
|   def add_socket(topic, socket) do
 | |
|     State.add_socket(topic, socket)
 | |
|   end
 | |
| 
 | |
|   def remove_socket(topic, socket) do
 | |
|     State.remove_socket(topic, socket)
 | |
|   end
 | |
| 
 | |
|   def get_sockets do
 | |
|     State.get_sockets()
 | |
|   end
 | |
| 
 | |
|   def stream(topics, items) do
 | |
|     if should_send?() do
 | |
|       Task.async(fn ->
 | |
|         :poolboy.transaction(
 | |
|           :streamer_worker,
 | |
|           &Worker.stream(&1, topics, items),
 | |
|           @timeout
 | |
|         )
 | |
|       end)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def supervisor, do: Pleroma.Web.Streamer.Supervisor
 | |
| 
 | |
|   defp should_send? do
 | |
|     handle_should_send(@mix_env)
 | |
|   end
 | |
| 
 | |
|   defp handle_should_send(:test) do
 | |
|     case Process.whereis(:streamer_worker) do
 | |
|       nil ->
 | |
|         false
 | |
| 
 | |
|       pid ->
 | |
|         Process.alive?(pid)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   defp handle_should_send(:benchmark), do: false
 | |
| 
 | |
|   defp handle_should_send(_), do: true
 | |
| end
 | 
