Class: GBRb::Graphics::ScreenServer

Inherits:
Object
  • Object
show all
Defined in:
lib/gbrb/graphics/screen_server.rb

Defined Under Namespace

Classes: Display, Window

Instance Method Summary collapse

Constructor Details

#initializeScreenServer

Returns a new instance of ScreenServer.



7
8
9
10
# File 'lib/gbrb/graphics/screen_server.rb', line 7

def initialize
  @consumer, @producer = IO.pipe
  create_server
end

Instance Method Details

#create_serverObject



12
13
14
15
# File 'lib/gbrb/graphics/screen_server.rb', line 12

def create_server
  File.unlink SOCKET_PATH if File.exist? SOCKET_PATH
  @server = UNIXServer.new SOCKET_PATH
end

#incoming_handlerObject



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/gbrb/graphics/screen_server.rb', line 17

def incoming_handler
  @consumer.close
  trap(:PIPE) { exit }
  trap(:CHLD) { exit }
  trap(:HUP)  { kill_window }
  Socket.accept_loop(@server) do |connection|
    loop do
      request = connection.gets
      @producer.write request if request
    end
  end
end

#kill_windowObject



41
42
43
44
# File 'lib/gbrb/graphics/screen_server.rb', line 41

def kill_window
  Process.kill :HUP, @window_pid
  Process.wait @window_pid
end

#power_onObject



46
47
48
49
# File 'lib/gbrb/graphics/screen_server.rb', line 46

def power_on
  @window_pid = fork { tk_process }
  incoming_handler
end

#tk_processObject



30
31
32
33
34
35
36
37
38
39
# File 'lib/gbrb/graphics/screen_server.rb', line 30

def tk_process
  @producer.close

  require 'tk'
  require 'thread'

  Thread.abort_on_exception = true

  Window.new @consumer
end