Class: P2p2::P1

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

Instance Method Summary collapse

Constructor Details

#initialize(config_path = nil) ⇒ P1

Returns a new instance of P1.



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/p1.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 ]
  appd_host = conf[ :appd_host ]
  appd_port = conf[ :appd_port ]
  p1_tmp_dir = conf[ :p1_tmp_dir ]

  unless p2pd_host
    raise "missing p2pd host"
  end

  unless room
    raise "missing room"
  end

  unless p2pd_port
    p2pd_port = 2020
  end

  unless appd_host
    appd_host = '127.0.0.1'
  end

  unless appd_port
    appd_port = 22
  end

  unless p1_tmp_dir
    p1_tmp_dir = '/tmp/p2p2.p1'
  end

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

  dst_chunk_dir = File.join( p1_tmp_dir, 'dst.chunk' )

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

  tund_chunk_dir = File.join( p1_tmp_dir, 'tund.chunk' )

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

  title = "p2p2 p1 #{ P2p2::VERSION }"
  puts title
  puts "p2pd host #{ p2pd_host }"
  puts "p2pd port #{ p2pd_port }"
  puts "room #{ room }"
  puts "appd host #{ appd_host }"
  puts "appd port #{ appd_port }"
  puts "p1 tmp dir #{ p1_tmp_dir }"
  puts "dst chunk dir #{ dst_chunk_dir }"
  puts "tund chunk dir #{ tund_chunk_dir }"

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

    pid = fork do
      $0 = 'p2p2 p1 worker'
      worker = P2p2::P1Worker.new( p2pd_host, p2pd_port, room, appd_host, appd_port, dst_chunk_dir, tund_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::P1Worker.new( p2pd_host, p2pd_port, room, appd_host, appd_port, dst_chunk_dir, tund_chunk_dir ).looping
  end
end