Class: M2R::Handler Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/m2r/handler.rb

Overview

This class is abstract.

Subclass and override method hooks to implement your own Handler

Basic handler, scaffold for your own Handler. Overwrite hook methods to define behavior. After calling #listen the Handler will block waiting for request from connection generated by #connection_factory, process them and send reponses back.

Direct Known Subclasses

RackHandler

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection_factory, parser) ⇒ Handler

Returns a new instance of Handler.

Parameters:



21
22
23
24
# File 'lib/m2r/handler.rb', line 21

def initialize(connection_factory, parser)
  @connection = connection_factory.connection
  @parser     = parser
end

Instance Attribute Details

#connectionConnection

Returns used for receiving requests and sending responses.

Returns:

  • (Connection)

    used for receiving requests and sending responses



14
15
16
# File 'lib/m2r/handler.rb', line 14

def connection
  @connection
end

Instance Method Details

#after_all(request, response) ⇒ Object

Note:

‘response` might be nil depending on when exception occured.

Note:

In case of error this callback is called before on_error

Callback after request is processed that is executed even when execption occured. Useful for releasing resources (closing files etc)

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s, nil)

    Response that was sent to Mongrel2 instance



115
116
# File 'lib/m2r/handler.rb', line 115

def after_all(request, response)
end

#after_process(request, response) ⇒ Object

Callback after process_request is done

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s)

    Response that should be sent to Mongrel2 instance



92
93
94
# File 'lib/m2r/handler.rb', line 92

def after_process(request, response)
  return response
end

#after_reply(request, response) ⇒ Object

Callback after sending the response back

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s)

    Response that was sent to Mongrel2 instance



102
103
# File 'lib/m2r/handler.rb', line 102

def after_reply(request, response)
end

#listenObject

Start processing request



27
28
29
30
31
32
# File 'lib/m2r/handler.rb', line 27

def listen
  catch(:stop) do
    loop { one_loop }
  end
  @connection.close
end

#on_disconnect(request) ⇒ Object

Callback executed when response could not be delivered by Mongrel2 because client already disconnected.

Parameters:

  • request (Request)

    Request object



69
70
# File 'lib/m2r/handler.rb', line 69

def on_disconnect(request)
end

#on_error(request, response, error) ⇒ Object

Note:

‘request` and/or `response` might be nil depending on when error occured

Callback when exception occured

Parameters:

  • request (Request, nil)

    Request object

  • response (Response, String, #to_s, nil)

    Response that might have been sent to Mongrel2 instance

  • error (StandardError)


126
127
# File 'lib/m2r/handler.rb', line 126

def on_error(request, response, error)
end

#on_interruptedObject

Callback when ZMQ interrupted by signal



132
133
# File 'lib/m2r/handler.rb', line 132

def on_interrupted
end

#on_request(request) ⇒ Object

Callback when a request is received

Parameters:

  • request (Request)

    Request object



51
52
# File 'lib/m2r/handler.rb', line 51

def on_request(request)
end

#on_upload_done(request) ⇒ Object

Callback when async-upload finished

Parameters:

  • request (Request)

    Request object



83
84
# File 'lib/m2r/handler.rb', line 83

def on_upload_done(request)
end

#on_upload_start(request) ⇒ Object

Callback when async-upload started

Parameters:

  • request (Request)

    Request object



76
77
# File 'lib/m2r/handler.rb', line 76

def on_upload_start(request)
end

#on_waitObject

Callback executed when waiting for a request



44
45
# File 'lib/m2r/handler.rb', line 44

def on_wait()
end

#process(request) ⇒ Response, ...

Override to return a response

Parameters:

  • request (Request)

    Request object

Returns:

  • (Response, String, #to_s)

    Response that should be sent to Mongrel2 instance

Raises:

  • (NotImplementedError)


60
61
62
# File 'lib/m2r/handler.rb', line 60

def process(request)
  raise NotImplementedError
end

#stopObject

Schedule stop after processing request



35
36
37
# File 'lib/m2r/handler.rb', line 35

def stop
  @stop = true
end