Class: IMP::Daemon::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/daemon/handler/each.rb,
lib/daemon/handler/close.rb,
lib/daemon/handler/event.rb,
lib/daemon/handler/respond.rb,
lib/daemon/handler/initialize.rb

Constant Summary collapse

@@all =
Array.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(socket) ⇒ Handler

Returns a new instance of Handler.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/daemon/handler/initialize.rb', line 7

def initialize socket

  @sock = socket
  @port = nil
  @user = nil

  # identification
  @sock.puts({
    'imp'     => 'imp',
    'version' => IMP::VERSION,
  }.to_json)

  # add to connected client list
  @@all << self

  # now just receive requests
  listener

end

Class Method Details

.each(&block) ⇒ Object



5
6
7
8
9
# File 'lib/daemon/handler/each.rb', line 5

def self.each &block
  @@all.each do |hand|
    yield hand
  end
end

.event(name, &block) ⇒ Object



5
6
7
# File 'lib/daemon/handler/event.rb', line 5

def self.event name, &block
  define_method("event_#{name}", block)
end

Instance Method Details

#closeObject



5
6
7
# File 'lib/daemon/handler/close.rb', line 5

def close
  @sock&.close
end

#listenerObject



27
28
29
30
31
32
33
34
35
36
# File 'lib/daemon/handler/initialize.rb', line 27

def listener
  loop do
    respond
  rescue IOError
    @all.delete(self)
    close
    break
  rescue
  end
end

#respondObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/daemon/handler/respond.rb', line 5

def respond

  buff  = @sock.gets
  buff  = JSON.parse(buff)
  event = buff["event"]
  data  = buff['data']

  begin

    func = method("event_#{event}")
    data = case func.arity
           when 0
             func.call
           else
             func.call(data)
           end

  rescue => e
    puts e
  end

  pp data
  buff["data"] = data
  @sock.puts buff.to_json

end