kaizen23

kaizen23

Two function in one time

Hi everyone.This is my first post.I’m sorry for newby question but I have problem with invoke two function in one time.I was created client for RabbitMQ. While I was starting this script sequence of execute function depends on which function is implementation first in method START.Talking about features listen_for_messages(channel, queue_data.queue) and wait_for_message(user, channel).I want to both features “listen” in one time.Function wait_for_message it’s responsible for text which user write while listen_for_messages it’s responsible for recieve messages from another client. Please give me any suggestion because i have no idea how solve this problem.This is my CODE:

defmodule ElixirChat do

  def start do
    user = IO.gets("Type in your name: ") |> String.strip
    IO.puts "Hi #{user}, you just joined a chat room! Type your message in and press enter."

    {:ok, conn} = AMQP.Connection.open
    {:ok, channel} = AMQP.Channel.open(conn)
    {:ok, queue_data } = AMQP.Queue.declare(channel, "")

    AMQP.Exchange.fanout(channel, "super.chat")
    AMQP.Queue.bind(channel, queue_data.queue, "super.chat")

		**listen_for_messages(channel, queue_data.queue)**
**		wait_for_message(user, channel)**


		
    
  end
  
  def display_message(user, message) do
    IO.puts "#{user}: #{message}"
  end

  def wait_for_message(user, channel) do
     message = IO.gets("") |> String.strip
     publish_message(user, message, channel)
     wait_for_message(user, channel)
  end

  def listen_for_messages(channel, queue_name) do
	  AMQP.Basic.consume(channel,queue_name,nil,no_ack: true)
  	
  	receive do
  		{:basic_deliver, payload, _meta}->
  		{status, list} = JSON.decode(payload)
		  display_message(list["user"], list["message"])
		  listen_for_messages(channel, queue_name) 
    end	


		
  end

  def publish_message(user, message, channel) do
    { :ok, data } = JSON.encode([user: user, message: message])
    AMQP.Basic.publish channel, "super.chat", "", data
  end

end

ElixirChat.start

Most Liked

OvermindDL1

OvermindDL1

Yeah I’d spool it up in a new Task, which is a simple wrapper around spawn with convenience methods (and can be fit into OTP supervisors, but ignore that part for now)> :slight_smile:

kaizen23

kaizen23

Hi.@mbuhot.Many thanks for help. This is saved me a lot of time.I didn’t think that could be so simple.It’s WORKING:)

mbuhot

mbuhot

Try running the listen_for_messages function in another process using spawn: http://elixir-lang.org/getting-started/processes.html#spawn

Where Next?

Popular in Questions Top

New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New

Other popular topics Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New

We're in Beta

About us Mission Statement