Class: P2p2::P2pd

Inherits:
Object
  • Object
show all
Defined in:
lib/p2p2/p2pd.rb

Instance Method Summary collapse

Constructor Details

#initialize(config_path = nil) ⇒ P2pd

Returns a new instance of P2pd.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/p2p2/p2pd.rb', line 58

def initialize( config_path = nil )
  unless config_path
    config_path = File.expand_path( '../p2p2.conf.json', __FILE__ )
  end

  unless File.exist?( config_path )
    raise "missing config file #{ config_path }"
  end

  conf = JSON.parse( IO.binread( config_path ), symbolize_names: true )
  p2pd_port = conf[ :p2pd_port ]
  p2pd_tmp_dir = conf[ :p2pd_tmp_dir ]

  unless p2pd_port
    p2pd_port = 2020
  end

  unless p2pd_tmp_dir
    p2pd_tmp_dir = '/tmp/p2p2.p2pd'
  end

  unless File.exist?( p2pd_tmp_dir )
    Dir.mkdir( p2pd_tmp_dir )
  end

  title = "p2p2 p2pd #{ P2p2::VERSION }"
  puts title
  puts "p2pd port #{ p2pd_port }"
  puts "p2pd tmp dir #{ p2pd_tmp_dir }"

  if RUBY_PLATFORM.include?( 'linux' )
    $0 = title

    pid = fork do
      $0 = 'p2p2 p2pd worker'
      worker = P2p2::P2pdWorker.new( p2pd_port, p2pd_tmp_dir )

      Signal.trap( :TERM ) do
        puts 'exit'
        worker.quit!
      end

      worker.looping
    end

    Signal.trap( :TERM ) do
      puts 'trap TERM'

      begin
        Process.kill( :TERM, pid )
      rescue Errno::ESRCH => e
        puts e.class
      end
    end

    Process.waitall
  else
    P2p2::P2pdWorker.new( p2pd_port, p2pd_tmp_dir ).looping
  end
end