fingerpoken 0.2.20101217123250 → 0.2.20101227000817

Sign up to get free protection for your applications and to get access to all the features.
data/bin/fingerpoken.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ $:.unshift "#{File.dirname(__FILE__)}/../lib"
3
4
  require "rubygems"
4
5
  require "em-websocket"
5
6
  require "json"
@@ -36,19 +37,25 @@ def main(args)
36
37
  case target.scheme
37
38
  when "xdo"
38
39
  require "fingerpoken/#{target.scheme}"
39
- targets << [:Xdo, {}]
40
+ targets << [:Xdo, { }]
40
41
  when "vnc"
41
42
  require "fingerpoken/#{target.scheme}"
42
- targets << [:VNC, {}]
43
+ targets << [:VNC, {
44
+ :host => target.host, :user => target.user,
45
+ :password => target.password, :recenter => (target.query == "recenter")
46
+ }]
43
47
  when "tivo"
44
48
  require "fingerpoken/#{target.scheme}"
45
- targets << [:Tivo, { :host => "192.168.0.134" }]
49
+ targets << [:Tivo, { :host => target.host }]
46
50
  end
47
51
  end
48
52
  end
49
53
  opts.parse(args)
50
54
 
51
- puts targets
55
+ if targets.size == 0
56
+ $stderr.puts "No targets given. You should specify one with -t."
57
+ return 1
58
+ end
52
59
 
53
60
  EventMachine::run do
54
61
  $:.unshift(File.dirname(__FILE__) + "/lib")
@@ -56,13 +63,13 @@ def main(args)
56
63
 
57
64
  targets.each do |klass, args|
58
65
  args.merge!({ :channel => channel })
59
- puts FingerPoken::Target.const_get(klass).new(args)
60
- end
66
+ target = FingerPoken::Target.const_get(klass).new(args)
67
+ target.register
68
+ end # targets.each
61
69
 
62
70
  EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 5001) do |ws|
63
71
  ws.onmessage do |message|
64
72
  request = JSON.parse(message)
65
- puts "Request: #{request.inspect}"
66
73
  channel.push(
67
74
  :request => request,
68
75
  :callback => proc { |message| ws.send(JSON.dump(message)) }
@@ -72,8 +79,8 @@ def main(args)
72
79
 
73
80
  Rack::Handler::Thin.run(
74
81
  Rack::CommonLogger.new( \
75
- Rack::ShowExceptions.new( \
76
- FingerPoken.new)), :Port => 5000)
82
+ Rack::ShowExceptions.new( \
83
+ FingerPoken.new)), :Port => 5000)
77
84
  end # EventMachine::run
78
85
  end
79
86
 
@@ -4,12 +4,14 @@ class FingerPoken::Target
4
4
  def initialize(config)
5
5
  @channel = config[:channel]
6
6
  @logger = Logger.new(STDERR)
7
+ @logger.level = ($DEBUG ? Logger::DEBUG: Logger::WARN)
7
8
  end
8
9
 
9
10
  def register
10
11
  @channel.subscribe do |obj|
11
12
  request = obj[:request]
12
13
  callback = obj[:callback]
14
+ @logger.debug(request)
13
15
  response = case request["action"]
14
16
  when "mousemove_relative"
15
17
  mousemove_relative(request["rel_x"], request["rel_y"])
@@ -29,8 +31,9 @@ class FingerPoken::Target
29
31
  p ["Unsupported action", request]
30
32
  end
31
33
 
32
- p [callback, response]
33
- callback.call(response)
34
+ if response.is_a?(Hash)
35
+ callback.call(response)
36
+ end
34
37
  end
35
38
  end
36
39
 
@@ -1,6 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # TODO(sissel): Refactor the protocol into an EM::Tivo module.
4
+ # Commands
5
+ #
6
+ # IRCODE ...
7
+ # INFO
8
+ # WINDOW - aspect ratio
4
9
 
5
10
  require "rubygems"
6
11
  require "fingerpoken/target"
@@ -11,7 +16,8 @@ class FingerPoken::Target::Tivo < FingerPoken::Target
11
16
  super(config)
12
17
  # TODO(sissel): Make this a config
13
18
  @host = config[:host]
14
- @tivo = EventMachine::connect(@host, 31339, TivoClient, self)
19
+ @port = (config[:port] or 31339)
20
+ @tivo = EventMachine::connect(@host, @port, TivoClient, self)
15
21
 
16
22
  @state = OpenStruct.new # TODO(sissel): Make this not an open struct...
17
23
 
@@ -52,6 +58,7 @@ class FingerPoken::Target::Tivo < FingerPoken::Target
52
58
 
53
59
  def move_end
54
60
  @tivo.send_data("IRCODE PLAY\r\n")
61
+ @state.speed = 0
55
62
  return { "action" => "status", "status" => "\\u25b6" }
56
63
  end
57
64
 
@@ -82,6 +89,7 @@ class FingerPoken::Target::Tivo < FingerPoken::Target
82
89
  when "Return"
83
90
  @tivo.send_data("IRCODE SELECT\r\n")
84
91
  end
92
+ return nil
85
93
  end
86
94
 
87
95
  class TivoClient < EventMachine::Connection
@@ -9,10 +9,19 @@ class FingerPoken::Target::VNC < FingerPoken::Target
9
9
 
10
10
  def initialize(config)
11
11
  super(config)
12
- # TODO(sissel): Make this configurable
13
- @password = ENV["VNCPASS"]
14
- @host = "sadness"
15
- @port = 5900
12
+ # TODO(sissel): eventmachine-vnc needs to suppore more auth mechanisms
13
+ @user = config[:user]
14
+ @password = (config[:password] or config[:user])
15
+ @host = config[:host]
16
+ @port = (config[:port] or 5900)
17
+ @recenter = config[:recenter]
18
+
19
+ # For eventmachine-vnc
20
+ ENV["VNCPASS"] = @password
21
+
22
+ if @host == nil
23
+ raise "#{self.class.name}: No host given to connect to"
24
+ end
16
25
 
17
26
  @vnc = EventMachine::connect(@host, @port, VNCClient, self)
18
27
  @x = 0
@@ -21,13 +30,12 @@ class FingerPoken::Target::VNC < FingerPoken::Target
21
30
  end
22
31
 
23
32
  def update
24
- p [@x, @y, @buttonmask]
25
33
  @vnc.pointerevent(@x, @y, @buttonmask)
26
34
 
27
35
  # TODO(sissel): Hack to make it work in TF2.
28
36
  # Mouse movement is always "from center"
29
37
  # So after each move, center the cursor.
30
- if ENV["RECENTER"]
38
+ if @recenter
31
39
  @x = (@vnc.screen_width / 2).to_i
32
40
  @y = (@vnc.screen_height / 2).to_i
33
41
  end
@@ -37,6 +45,7 @@ class FingerPoken::Target::VNC < FingerPoken::Target
37
45
  @x += x
38
46
  @y += y
39
47
  update
48
+ return nil
40
49
  end
41
50
 
42
51
  def mousedown(button)
@@ -44,6 +53,7 @@ class FingerPoken::Target::VNC < FingerPoken::Target
44
53
  return if @buttonmask & button != 0
45
54
  @buttonmask |= button
46
55
  update
56
+ return nil
47
57
  end
48
58
 
49
59
  def mouseup(button)
@@ -51,6 +61,7 @@ class FingerPoken::Target::VNC < FingerPoken::Target
51
61
  return if @buttonmask & button == 0
52
62
  @buttonmask &= (~button)
53
63
  update
64
+ return nil
54
65
  end
55
66
 
56
67
  class VNCClient < EventMachine::Connection
@@ -25,32 +25,29 @@ class FingerPoken::Target::Xdo < FingerPoken::Target
25
25
  if @xdo.null?
26
26
  raise "xdo_new failed"
27
27
  end
28
- register
29
28
  end
30
29
 
31
30
  def mousemove_relative(x, y)
32
- @logger.info("move #{x},#{y}")
33
31
  return LibXdo::xdo_mousemove_relative(@xdo, x, y)
34
32
  end
35
33
 
36
34
  def click(button)
37
- LibXdo::xdo_click(@xdo, 0, button.to_i)
35
+ return LibXdo::xdo_click(@xdo, 0, button.to_i)
38
36
  end
39
37
 
40
38
  def mousedown(button)
41
- LibXdo::xdo_mousedown(@xdo, 0, button.to_i)
39
+ return LibXdo::xdo_mousedown(@xdo, 0, button.to_i)
42
40
  end
43
41
 
44
42
  def mouseup(button)
45
- LibXdo::xdo_mouseup(@xdo, 0, button.to_i)
43
+ return LibXdo::xdo_mouseup(@xdo, 0, button.to_i)
46
44
  end
47
45
 
48
46
  def type(string)
49
- LibXdo::xdo_type(@xdo, 0, string, 12000)
47
+ return LibXdo::xdo_type(@xdo, 0, string, 12000)
50
48
  end
51
49
 
52
50
  def keypress(key)
53
- p "Pressing: #{key}"
54
51
  if key.is_a?(String)
55
52
  if key.length == 1
56
53
  # Assume letter
@@ -74,5 +71,6 @@ class FingerPoken::Target::Xdo < FingerPoken::Target
74
71
  end # case key
75
72
  end # if 32.upto(127).include?(key)
76
73
  end # if key.is_a?String
74
+ return nil
77
75
  end # def keypress
78
76
  end # class FingerPoken::Target::Xdo
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fingerpoken
3
3
  version: !ruby/object:Gem::Version
4
- hash: 40202434246515
4
+ hash: 40202454001653
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 20101217123250
10
- version: 0.2.20101217123250
9
+ - 20101227000817
10
+ version: 0.2.20101227000817
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jordan Sissel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-17 00:00:00 -08:00
18
+ date: 2010-12-27 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency