Module: Grueserve::Server::ClientSocket

Includes:
Debuggable, MonitorMixin
Defined in:
lib/grueserve/server.rb

Defined Under Namespace

Classes: PolicyFileRequest

Constant Summary

Constants included from Debuggable

Debuggable::LEVELS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Debuggable

format, level, level=, #method_missing, output, #report, #report_for, #reset, #reset_for, source_part, #time

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Grueserve::Debuggable

Instance Attribute Details

#bufferObject

Returns the value of attribute buffer.



36
37
38
# File 'lib/grueserve/server.rb', line 36

def buffer
  @buffer
end

#bufferSizeObject

Returns the value of attribute bufferSize.



36
37
38
# File 'lib/grueserve/server.rb', line 36

def bufferSize
  @bufferSize
end

#clientObject

Returns the value of attribute client.



36
37
38
# File 'lib/grueserve/server.rb', line 36

def client
  @client
end

#serverObject

Returns the value of attribute server.



36
37
38
# File 'lib/grueserve/server.rb', line 36

def server
  @server
end

Instance Method Details

#handle_inputObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/grueserve/server.rb', line 58

def handle_input
  begin
    @bufferSize = readTo(":").to_i if @bufferSize == 0
    log_trace("Expecting package of size #{@bufferSize}")
    gotten = self.read_nonblock(@bufferSize - @buffer.size)
    log_trace("Received buffer #{gotten.inspect}")
    @buffer += gotten
    if @buffer.size == @bufferSize
      log_debug("Received complete buffer from #{self}: #{@buffer.inspect}")
      doc = XML::Parser.string(@buffer).parse
      client.handle_input(doc)
      @buffer = ""
      @bufferSize = 0
    end
  rescue Exception => e
    server.kill_socket(self)
    raise e
  end
end

#init_client_socket(client, server) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/grueserve/server.rb', line 38

def init_client_socket(client, server)
  mon_initialize
  @client = client
  @server = server
  @buffer = ""
  @bufferSize = 0
end

#readTo(char) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/grueserve/server.rb', line 46

def readTo(char)
  rval = ""
  while (next_char = self.read_nonblock(1)) != char
    rval += next_char
    if rval == "<policy-file-request/>\0"
      log_debug("Received policy file request #{rval.inspect}")
      raise PolicyFileRequest.new
    end 
  end
  return rval
end