From 5560d4b462e10c5430d7a74f445ffe0d1611d0cc Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 4 Oct 2015 23:11:57 +0000 Subject: player: cleanup command dispatch We can generate many command calls easily and dynamically, so avoid the code and cognitive overhead for the majority of commands. --- lib/dtas/player.rb | 62 +++++++++++++-------------------------- lib/dtas/player/client_handler.rb | 32 ++++++++++++-------- 2 files changed, 39 insertions(+), 55 deletions(-) (limited to 'lib/dtas') diff --git a/lib/dtas/player.rb b/lib/dtas/player.rb index a1e2040..554a53f 100644 --- a/lib/dtas/player.rb +++ b/lib/dtas/player.rb @@ -190,7 +190,7 @@ class DTAS::Player # :nodoc: io.emit("OK") end - def do_enq_head(io, msg) + def dpc_enq_head(io, msg) # check @queue[0] in case we have no sinks if need_to_queue @queue.unshift(msg) @@ -207,55 +207,33 @@ class DTAS::Player # :nodoc: case command when "enq" enq_handler(io, msg[0]) - when "enq-head" - do_enq_head(io, msg) when "enq-cmd" enq_handler(io, { "command" => msg[0]}) when "pause", "play", "play_pause" play_pause_handler(io, command) - when "seek" - do_seek(io, msg[0]) - when "clear" - @queue.clear - wall("clear") - io.emit("OK") - when "rg" - rg_handler(io, msg) - when "cue" - cue_handler(io, msg) - when "skip" - skip_handler(io, msg) - when "sink" - sink_handler(io, msg) - when "current" - current_handler(io, msg) - when "watch" - @watchers[io] = true - io.emit("OK") - when "format" - format_handler(io, msg) - when "env" - env_handler(io, msg) - when "restart" - restart_pipeline - io.emit("OK") - when "source" - source_handler(io, msg) - when "state" - state_file_handler(io, msg) - when "cd" - chdir_handler(io, msg) when "pwd" io.emit(Dir.pwd) - when "tl" - tl_handler(io, msg) - when "trim" - trim_handler(io, msg) - when "queue" - msg[0] == "cat" and io.emit(@queue.to_yaml) + else + m = "dpc_#{command.tr('-', '_')}" + __send__(m, io, msg) if respond_to?(m) end end + def dpc_clear(io, msg) + @queue.clear + wall('clear') + io.emit('OK') + end + + def dpc_queue(io, msg) + 'cat' == msg[0] and io.emit(@queue.to_yaml) + end + + def dpc_watch(io, _) + @watchers[io] = true + io.emit('OK') + end + def event_loop_iter @srv.run_once do |io, msg| # readability handler, request/response case io @@ -309,7 +287,7 @@ class DTAS::Player # :nodoc: return unless sink.active if (@current || @queue[0]) && !@paused - # we get here if source/sinks are all killed in restart_pipeline + # we get here if source/sinks are all killed in dpc_restart __sink_activate(sink) next_source(_next) unless @current end diff --git a/lib/dtas/player/client_handler.rb b/lib/dtas/player/client_handler.rb index b04872b..fab60f3 100644 --- a/lib/dtas/player/client_handler.rb +++ b/lib/dtas/player/client_handler.rb @@ -117,7 +117,7 @@ module DTAS::Player::ClientHandler # :nodoc: end # returns a wait_ctl arg - def sink_handler(io, msg) + def dpc_sink(io, msg) name = msg[1] case msg[0] when "ls" @@ -240,7 +240,7 @@ module DTAS::Player::ClientHandler # :nodoc: out_samples(in_samples, @current.format, @format) end - def rg_handler(io, msg) + def dpc_rg(io, msg) return io.emit(@rg.to_hsh.to_yaml) if msg.empty? before = @rg.to_hsh msg.each do |kv| @@ -277,7 +277,7 @@ module DTAS::Player::ClientHandler # :nodoc: # show current info about what's playing # returns non-blocking iterator retval - def current_handler(io, msg) + def dpc_current(io, msg) tmp = {} if @current tmp["current"] = s = @current.to_hsh @@ -321,7 +321,7 @@ module DTAS::Player::ClientHandler # :nodoc: @srv.wait_ctl(buf, :wait_readable) end - def skip_handler(io, msg) + def dpc_skip(io, msg) __current_drop wall("skip") io.emit("OK") @@ -371,7 +371,8 @@ module DTAS::Player::ClientHandler # :nodoc: end end - def do_seek(io, offset) + def dpc_seek(io, msg) + offset = msg[0] if @current if @current.respond_to?(:infile) begin @@ -408,7 +409,12 @@ module DTAS::Player::ClientHandler # :nodoc: stop_sinks end - def format_handler(io, msg) + def dpc_restart(io, _) + restart_pipeline + io.emit('OK') + end + + def dpc_format(io, msg) new_fmt = @format.dup msg.each do |kv| k, v = kv.split(/=/, 2) @@ -443,7 +449,7 @@ module DTAS::Player::ClientHandler # :nodoc: io.emit("OK") end - def env_handler(io, msg) + def dpc_env(io, msg) if msg.empty? # this may fail for large envs due to SEQPACKET size restrictions # do we care? @@ -465,7 +471,7 @@ module DTAS::Player::ClientHandler # :nodoc: io.emit("OK") end - def source_handler(io, msg) + def dpc_source(io, msg) map = @source_map op = msg.shift case op @@ -509,7 +515,7 @@ module DTAS::Player::ClientHandler # :nodoc: end end - def chdir_handler(io, msg) + def dpc_cd(io, msg) msg.size == 1 or return io.emit("ERR usage: cd DIRNAME") begin Dir.chdir(msg[0]) @@ -520,7 +526,7 @@ module DTAS::Player::ClientHandler # :nodoc: io.emit("OK") end - def state_file_handler(io, msg) + def dpc_state(io, msg) case msg.shift when "dump" dest = msg.shift @@ -546,7 +552,7 @@ module DTAS::Player::ClientHandler # :nodoc: __current_drop end - def tl_handler(io, msg) + def dpc_tl(io, msg) case msg.shift when "add" path = msg.shift @@ -663,7 +669,7 @@ module DTAS::Player::ClientHandler # :nodoc: io.emit("OK") end - def cue_handler(io, msg) + def dpc_cue(io, msg) cur = @current if cur.respond_to?(:cuebreakpoints) bp = cur.cuebreakpoints @@ -684,7 +690,7 @@ module DTAS::Player::ClientHandler # :nodoc: end end - def trim_handler(io, msg) + def dpc_trim(io, msg) case msg.size when 0 io.emit({ 'trim' => @trim }.to_yaml) -- cgit v1.2.3-24-ge0c7