class Server
Public Instance Methods
read_int()
click to toggle source
# File lib/server.rb, line 31 def read_int raise "client not connect #{@host}:#{@port}, please check" if @client == nil begin message = @client.recvfrom(4)[0] msgInt = message.unpack("L")[0] rescue StandardError => e puts e.message puts e.backtrace.inspect end msgInt end
read_message()
click to toggle source
# File lib/server.rb, line 45 def read_message raise "client not connect #{@host}:#{@port}, please check" if @client == nil begin len = read_int if len == ~0 return nil end message = @client.recvfrom(len)[0] rescue StandardError => e puts e.message puts e.backtrace.inspect end message end
run()
click to toggle source
# File lib/server.rb, line 10 def run @server = Socket.new(AF_INET, SOCK_STREAM, 0) ip = Socket.ip_address_list.detect{|intf| intf.ipv4_private?} sockaddr = Socket.sockaddr_in(Config::PORT, ip.ip_address) @server.bind(sockaddr) @server.listen(1) @client, _ = @server.accept end
send_command(command, msg)
click to toggle source
# File lib/server.rb, line 77 def send_command(command, msg) raise "client not connect #{@host}:#{@port}, please check" if @client == nil begin @client.write([command].pack("L")) if msg send_message(msg) end rescue StandardError => e puts e.message puts e.backtrace.inspect end true end
send_file(file)
click to toggle source
# File lib/server.rb, line 93 def send_file(file) raise "client not connect #{@host}:#{@port}, please check" if @client == nil begin send_message(file) command = read_int if command != HRCommandTransferFileNameFinished puts "send file name failed, #{file}" end size = File.size(file) send_message("#{size}") command = read_int if command != HRCommandTransferFileSizeFinished puts "send file size failed, #{size}" end content = "" File.open(file, "r") do |f| f.each_line do |line| content += line if content.bytesize >= 102400 @client.write(content) puts "read size #{content.bytesize} of file:#{file}" content = "" end end end if content.bytesize >= 0 @client.write(content) puts "read size #{content.bytesize} of file:#{file}" end command = read_int if command != HRCommandTransferFileFinished puts "send file failed, #{file}" end rescue StandardError => e puts e.message puts e.backtrace.inspect end end
send_message(msg)
click to toggle source
# File lib/server.rb, line 63 def send_message(msg) raise "client not connect #{@host}:#{@port}, please check" if @client == nil begin @client.write([msg.bytesize].pack("L")) @client.write(msg) rescue StandardError => e puts e.message puts e.backtrace.inspect end true end
stop()
click to toggle source
# File lib/server.rb, line 19 def stop if @client != nil @client.close @client = nil end if @server != nil @server.close @server = nil end end