Class: SockJS::Transport

Inherits:
SessionEndpoint show all
Defined in:
lib/sockjs/transport.rb

Direct Known Subclasses

ConsumingTransport, DeliveryTransport

Instance Attribute Summary

Attributes inherited from Endpoint

#connection, #options

Attributes included from Endpoint::ClassMethods

#method, #prefix

Instance Method Summary collapse

Methods inherited from SessionEndpoint

routing_prefix

Methods inherited from Endpoint

#build_error_response, #build_response, #call, #empty_string, #error_content_type, #format_frame, #handle, #handle_http_error, #initialize, #inspect, #response_class, #setup_response

Methods included from Endpoint::ClassMethods

#add_route, #add_routes, #endpoints, #register, #route_conditions, #routing_prefix

Constructor Details

This class inherits a constructor from SockJS::Endpoint

Instance Method Details

#exception_response(request, error, status) ⇒ Object



217
218
219
220
221
222
223
224
225
226
# File 'lib/sockjs/transport.rb', line 217

def exception_response(request, error, status)
  SockJS::debug("Handling error #{error.inspect}")
  response = build_response(request)
  response.status = status
  response.set_content_type(:plain)
  response.set_session_id(request.session_id)
  response.write(error.message)
  SockJS::debug("Error response: #{response.inspect}")
  return response
end

#handle_request(request) ⇒ Object



199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/sockjs/transport.rb', line 199

def handle_request(request)
  SockJS::debug({:Request => request, :Transport => self}.inspect)

  response = build_response(request)
  session = get_session(response)

  process_session(session, response)

  return response
rescue SockJS::InvalidJSON => error
  exception_response(request, error, 500)
rescue SockJS::SessionUnavailableError => error
  handle_session_unavailable(request)
end

#handle_session_unavailable(request) ⇒ Object



228
229
230
231
232
233
234
235
236
# File 'lib/sockjs/transport.rb', line 228

def handle_session_unavailable(request)
  SockJS::debug("Handling missing session for #{request.inspect}")
  response = build_response(request)
  response.status = 404
  response.set_content_type(:plain)
  response.set_session_id(request.session_id)
  response.write("Session is not open!")
  return response
end

#request_data(request) ⇒ Object



248
249
250
# File 'lib/sockjs/transport.rb', line 248

def request_data(request)
  request.data.string
end

#response_beginning(response) ⇒ Object



214
215
# File 'lib/sockjs/transport.rb', line 214

def response_beginning(response)
end

#server_key(response) ⇒ Object



238
239
240
241
# File 'lib/sockjs/transport.rb', line 238

def server_key(response)
  request = response.request
  (request.env['rack.routing_args'] || {})[:server_key]
end

#session_key(response) ⇒ Object



243
244
245
246
# File 'lib/sockjs/transport.rb', line 243

def session_key(response)
  request = response.request
  (request.env['rack.routing_args'] || {})[:session_key]
end