end
end
+def upload_request(bs_ip, bs_port, dock, transporter, package )
+ client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
+ if client.nil? then
+ raise RuntimeError, "Can't access server #{bs_ip}:#{bs_port}"
+ end
+ msg = "UPLOAD|#{dock}"
+ client.send( msg )
+ result = client.send_file(package, transporter)
+ client.terminate
+ if not result then
+ raise RuntimeError, "Uploading file failed!.. #{result}"
+ else
+ puts "Uploading file success!.. #{result}"
+ end
+end
+
# if "--os" is not specified, use pe
if option[:os].nil? then
transporter = FileTransferDirect.new( nil )
end
- # upload
- client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
- if client.nil? then
- puts "Can't access server #{bs_ip}:#{bs_port}"
- exit(-1)
- end
- dock = Utils.create_uniq_name()
- msg = "UPLOAD|#{dock}"
- client.send( msg )
- result = client.send_file(option[:package], transporter)
- client.terminate
- if not result then
- puts "Uploading file failed!.. #{option[:package]}"
- exit(-1)
- end
-
# register
client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
if client.nil? then
puts "Can't access server #{bs_ip}:#{bs_port}"
exit(-1)
end
- client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}")
- if not client.print_stream then
- puts "ERROR: #{client.get_error_msg()}"
- end
- client.terminate
+ begin
+ dock = Utils.create_uniq_name()
+ client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}")
+ client.read_lines do |line|
+ if line.eql?("WAITFORUPLOAD") then
+ # upload
+ thread = Thread.new do
+ begin
+ upload_request(bs_ip, bs_port, dock, transporter, option[:package])
+ rescue => e
+ puts "Transfering file failed!"
+ puts e.message
+ puts e.backtrace.inspect
+ end
+ end
+
+ thread.join
+ client.send("REGISTERCONTINUE")
+ else
+ puts line
+ end
+ end
+ ensure
+ client.terminate
+ end
else
raise RuntimeError, "input option incorrect : #{option[:cmd]}"
end
"ERR013" => "Project from file-name/distribution not found!",
"ERR014" => "Job cancel failed!",
"ERR015" => "Server password not matched!",
+ "ERR016" => "Can't received register file!",
"ERR900" => "Cancel event received!",
"ERR901" => "Job already upload status. Cancel failed!"
def handle_cmd_register( line, req )
@log.info "Received REQ: #{line}"
- begin
- handle_cmd_register_internal( line, req )
- rescue BuildServerException => e
- @log.error(e.message)
- BuildCommServer.send(req, e.err_message())
- BuildCommServer.send_end(req)
- BuildCommServer.disconnect(req)
+ Thread.new do
+ begin
+ handle_cmd_register_internal( line, req )
+ rescue BuildServerException => e
+ @log.error(e.message)
+ BuildCommServer.send(req, e.err_message())
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
+ rescue => e
+ @log.error "Transfering file failed!"
+ @log.error e.message
+ @log.error e.backtrace.inspect
+ end
end
+
@log.info "Handled REQ: #{line}"
end
# check passwd
check_project_password(prj, passwd, req)
+ # save thread and wait uplaod
+ BuildCommServer.send(req, "WAITFORUPLOAD")
+ req_line = req.gets
+ if req_line.nil? or not req_line.strip.eql?("REGISTERCONTINUE") then
+ raise BuildServerException.new("ERR016"), req_line
+ else
+ @log.info "register file is received successfully"
+ end
+
# create new job
@log.info "Received a request for uploading binaries : #{filename}"
new_job = create_new_upload_job( prj.name, filename, dock, dist_name, req )