Class: P2p2::P2

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

Instance Method Summary collapse

Constructor Details

#initialize(config_path = nil) ⇒ P2

Returns a new instance of P2.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
# File 'lib/p2p2/p2.rb', line 14

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_host = conf[ :p2pd_host ]
  p2pd_port = conf[ :p2pd_port ]
  room = conf[ :room ]
  sdwd_host = conf[ :sdwd_host ]
  sdwd_port = conf[ :sdwd_port ]
  p2_tmp_dir = conf[ :p2_tmp_dir ]

  unless p2pd_host
    raise "missing p2pd host"
  end

  unless room
    raise "missing room"
  end

  unless p2pd_port
    p2pd_port = 2020
  end

  unless sdwd_host
    sdwd_host = '0.0.0.0'
  end

  unless sdwd_port
    sdwd_port = 2222
  end

  unless p2_tmp_dir
    p2_tmp_dir = '/tmp/p2p2.p2'
  end

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

  src_chunk_dir = File.join( p2_tmp_dir, 'src.chunk' )

  unless Dir.exist?( src_chunk_dir )
    Dir.mkdir( src_chunk_dir )
  end

  tun_chunk_dir = File.join( p2_tmp_dir, 'tun.chunk' )

  unless Dir.exist?( tun_chunk_dir )
    Dir.mkdir( tun_chunk_dir )
  end

  title = "p2p2 p2 #{ P2p2::VERSION }"
  puts title
  puts "p2pd host #{ p2pd_host }"
  puts "p2pd port #{ p2pd_port }"
  puts "room #{ room }"
  puts "sdwd host #{ sdwd_host }"
  puts "sdwd port #{ sdwd_port }"
  puts "p2 tmp dir #{ p2_tmp_dir }"
  puts "src chunk dir #{ src_chunk_dir }"
  puts "tun chunk dir #{ tun_chunk_dir }"

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

    pid = fork do
      $0 = 'p2p2 p2 worker'
      worker = P2p2::P2Worker.new( p2pd_host, p2pd_port, room, sdwd_host, sdwd_port, src_chunk_dir, tun_chunk_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::P2Worker.new( p2pd_host, p2pd_port, room, sdwd_host, sdwd_port, src_chunk_dir, tun_chunk_dir ).looping
  end
end