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