twitter - How to create GenServer child process from spawn function? -


i'm using extwitter stream track tweets in realtime , broadcast them via channel endpoint. create 1 process per event , assign 1 twitter stream listener, when new subscriber join same event previous stream state , receive , broadcast new tweets.

how create genserver process from:

stream = extwitter.stream_filter(track: hashtags) pid = spawn(fn ->   tweet <- stream     io.puts tweet.text     myapp.endpoint.broadcast! "stream", "tweet", %{tweet: tweet.text}   end end) 

and assign event_id child in following module:

defmodule myapp.twitterstream.monitor   require iex   @moduledoc """   store twitter stream per event_id   """   use genserver    def create(event_id, hashtags, coords)     case genserver.whereis(ref(event_id))       nil ->         supervisor.start_child(myapp.twitterstream.supervisor, [event_id, hashtags, coords])       _twitter_stream ->         iex.pry         # return previous extwitter stream state , broadcast new tweets         {:error, :twitter_stream_already_exists}     end   end    def start_link(event_id, hashtags, coords)     # stream = extwitter.stream_filter(track: hashtags)     # pid = spawn(fn ->     #   tweet <- stream     #     io.puts tweet.text     #     myapp.endpoint.broadcast! "stream", "tweet", %{tweet: tweet.text}     #   end     # end)     genserver.start_link(__module__, %{hashtags: hashtags, coords: coords}, name: ref(event_id))   end    def stop(event_id)     try_call(event_id, :stop)   end    def info(event_id)     try_call(event_id, :info)   end    def handle_call(:stop, _from, state)     # extwitter.stream_control(pid, :stop)     {:stop, :normal, :ok, state}   end    def handle_call(:info, _from, state)     {:reply, state, state}   end    defp try_call(event_id, call_function)     case genserver.whereis(ref(event_id))       nil ->         {:error, :invalid_twitter_stream}       twitter_stream ->         genserver.call(twitter_stream, call_function)     end   end    defp ref(event_id)     {:global, {:twitter_stream, event_id}}   end end 

how receive new tweets or stop twitter stream outside event monitor?

supervisor:

defmodule myapp.twitterstream.supervisor   use supervisor    def start_link     supervisor.start_link(__module__, :ok, name: __module__)   end    def init(:ok)     children = [       worker(myapp.twitterstream.monitor, [], restart: :temporary)     ]      supervise(children, strategy: :simple_one_for_one)   end end 


Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

unity3d - Fatal error- Monodevelop-Unity failed to start -