Skip to content

Instantly share code, notes, and snippets.

@binarytemple-external
Forked from jhowarth/push_collector.ex
Created December 27, 2016 10:31
Show Gist options
  • Save binarytemple-external/9be80adab3b5acd298a9dff38de62179 to your computer and use it in GitHub Desktop.
Save binarytemple-external/9be80adab3b5acd298a9dff38de62179 to your computer and use it in GitHub Desktop.
defmodule GCM.PushCollector do
use GenStage
# Client
def push(pid, push_requests) do
GenServer.cast(pid, {:push, push_requests})
end
# Server
def init(_args) do
# Run as producer and specify the max amount
# of push requests to buffer.
{:producer, :ok, buffer_size: @max_buffer_size}
end
def handle_cast({:push, push_requests}, state) do
# Dispatch the push_requests as events.
# These will be buffered if there are no consumers ready.
{:noreply, push_requests, state}
end
def handle_demand(_demand, state) do
# Do nothing. Events will be dispatched as-is.
{:noreply, [], state}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment