diff --git a/libs/esl/ruby/server3.rb b/libs/esl/ruby/server3.rb new file mode 100644 index 0000000000..2d2cb4a8a4 --- /dev/null +++ b/libs/esl/ruby/server3.rb @@ -0,0 +1,66 @@ +#!/usr/bin/ruby + +# Simple Ruby ESL example that forks a new process for every connection. +# Called like this: +# +# Try pressing 5, 8 or 9 when the file is played and see what happens +# +# Contributed by Mikael Bjerkeland + +require "ESL" +require 'socket' +include Socket::Constants +bind_address = "127.0.0.1" +bind_port = 8086 + +def time_now + Time.now.strftime("%Y-%m-%d %H:%M:%S") +end + +socket = Socket.new(AF_INET, SOCK_STREAM, 0) +sockaddr = Socket.sockaddr_in(bind_port, bind_address) +socket.bind(sockaddr) +socket.listen(5) +puts "Listening for connections on #{bind_address}:#{bind_port}" +loop do + client_socket, client_sockaddr = socket.accept #_nonblock + pid = fork do + @con = ESL::ESLconnection.new(client_socket.fileno) + info = @con.getInfo + uuid = info.getHeader("UNIQUE-ID") + @con.sendRecv("myevents") + @con.sendRecv("divert_events on") + + puts "#{time_now} [#{uuid}] Call to [#{info.getHeader("Caller-Destination-Number")}]" + @con.execute("log", "1, Wee-wa-wee-wa") + @con.execute("info", "") + @con.execute("answer", "") + @con.execute("playback", "/usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav") + + while @con.connected + e = @con.recvEvent + + if e + name = e.getHeader("Event-Name") + puts "EVENT: #{name}" + break if name == "SERVER_DISCONNECTED" + if name == "DTMF" + digit = e.getHeader("DTMF-DIGIT") + duration = e.getHeader("DTMF-DURATION") + puts "DTMF DIGIT #{digit} (#{duration})" + if digit == "5" + @con.execute("log", "1, WHA HA HA. User pressed 5") + elsif digit == "8" + # TODO: close connection without hangup in order to proceed in dialplan. How? + elsif digit == "9" + @con.execute("transfer", "99355151") + end + end + + end + end + puts "Connection closed" + end + + Process.detach(pid) +end