class MemcachedTest::Server

Attributes

server_socket[R]

Public Class Methods

new(socket_address, socket_port) click to toggle source
# File lib/memcached_test/server.rb, line 9
def initialize(socket_address, socket_port)
   @server_socket = TCPServer.open(socket_address, socket_port)
   @memcached = Memcached.new  
end

Public Instance Methods

pass_parameters(reg_exp) click to toggle source
# File lib/memcached_test/server.rb, line 120
def pass_parameters(reg_exp)
   key = reg_exp['key']
   flags = reg_exp['flags'] unless reg_exp['command'] == 'append' || reg_exp['command'] == 'prepend'
   exptime = reg_exp['exptime'] unless reg_exp['command'] == 'append' || reg_exp['command'] == 'prepend'
   bytes = reg_exp['bytes']
   noreply = !reg_exp['noreply'].nil?
   cas = reg_exp['cas'] if reg_exp['command'] == 'cas'
   return key, flags, exptime, bytes, noreply, cas
end
process_entry(input, client) click to toggle source
# File lib/memcached_test/server.rb, line 35
def process_entry(input, client)
   case input
   when Commands_format.get
      keys = $~['keys'].split(' ')
      resultados = @memcached.get(keys)
      if resultados != [] && resultados.is_a?(Array)
         resultados.each do |resultado|
            client.puts ("VALUE #{resultado[0]} #{resultado[1]} #{resultado[3]}\r\n#{resultado[4]}\r\n")
         end
         client.puts ("END\r\n")
      elsif resultados != [] && !resultados.is_a?(Array)
         client.puts ("VALUE #{resultados[0]} #{resultados[1]} #{resultados[3]}\r\n#{resultados[4]}\r\n")
         client.puts ("END\r\n")
      else
         client.puts ("NOT_FOUND\r\n")
      end

   when Commands_format.gets
      keys = $~['keys'].split(' ')
      resultados = @memcached.gets(keys)
      if resultados != [] && resultados.is_a?(Array)
            resultados.each do |resultado|
               client.puts ("VALUE #{resultado[0]} #{resultado[1]} #{resultado[3]} #{resultado[4]}\r\n#{resultado[5]}\r\n")
            end
            client.puts ("END\r\n")
      elsif resultados != [] && !resultados.is_a?(Array)
         client.puts ("VALUE #{resultados[0]} #{resultados[1]} #{resultados[3]} #{resultado[4]}\r\n#{resultados[5]}\r\n")
         client.puts ("END\r\n")
      else
         client.puts ("NOT_FOUND\r\n")
      end

   when Commands_format.set
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.set(key, flags, exptime, bytes, data)
      client.puts response unless noreply

   when Commands_format.add
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.add(key, flags, exptime, bytes, data)
      client.puts response unless noreply

   when Commands_format.replace
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.replace(key, flags, exptime, bytes, data)
      client.puts response unless noreply

   when Commands_format.append
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.append(key, bytes, data)
      client.puts response unless noreply

   when Commands_format.prepend
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.prepend(key, bytes, data)
      client.puts response unless noreply

   when Commands_format.cas
      key, flags, exptime, bytes, noreply, cas = self.pass_parameters($~)
      data = client.gets.chomp
      response = @memcached.cas(key, flags, exptime, bytes, cas, data)
      client.puts response unless noreply

   when Commands_format.flush_all
      response = @memcached.flush_all()
      client.puts response if $~['noreply'].nil?

   else
      client.puts "ERROR\r\n"
   end
end
purge_expired_keys(interval_time) click to toggle source
# File lib/memcached_test/server.rb, line 112
def purge_expired_keys(interval_time)
   loop{
      sleep(interval_time)
      @memcached.flush_all()          
      puts("----------- Expired keys deleted -----------")
   }
end
run() click to toggle source
# File lib/memcached_test/server.rb, line 14
def run
   loop{
      client_connection = @server_socket.accept
      Thread.start(client_connection) do |conn|    
            puts "Connection established #{conn}"
            
            while input = conn.gets
               input = input.chomp
               
               break if input == 'quit'
               self.process_entry(input, conn)
            end

            puts "Connection closed #{conn}"
            conn.puts "Closing connection"
            conn.flush
            conn.close
      end
   }
end