Sha256: d051b4132d1818e26e41131a470b075b14d766374c4dfe13502445f0887901c7
Contents?: true
Size: 1.24 KB
Versions: 2
Compression:
Stored size: 1.24 KB
Contents
require "nio" require "plux/reactor" module Plux class Server attr_reader :name, :pid Active = {} at_exit{ Active.values.each(&:close) } def initialize(name, thread: ) @name = name @thread = thread end def boot(worker) Plux.lock_pid_file(name) do |file| start_server_if_not_pid(file, worker) end self end def close Process.kill('TERM', pid) rescue Errno::ESRCH end def connect Client.new(name) end private def start_server_if_not_pid(file, worker) @pid = file.read.to_i return unless pid == 0 child, parent = IO.pipe @pid = fork do at_exit{ delete_server } file.close child.close UNIXServer.open(Plux.server_file(name)) do |serv| parent.close worker.prepare reactor = Reactor.new(@thread, worker) loop{ reactor.register(serv.accept) } end end parent.close child.read child.close file.rewind file.write(pid) Process.detach(pid) Active[name] = self end def delete_server [:server_file, :pid_file].each do |file| File.delete(Plux.send(file, name)) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
plux-0.1.8 | lib/plux/server.rb |
plux-0.1.7 | lib/plux/server.rb |