forked from AkkomaGang/akkoma
55 lines
1.1 KiB
Elixir
55 lines
1.1 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2020 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
|