Class: SockJS::Endpoint
Overview
If I had it to do over again, Endpoint wouldn’t have subclasses - we’d subclass Response and instances of Endpoint would know what kind of Response to create for their mount point
Defined Under Namespace
Modules: ClassMethods
Classes: MethodMap, MethodNotSupportedApp
Instance Attribute Summary collapse
Attributes included from ClassMethods
#method, #prefix
Instance Method Summary
collapse
add_route, add_routes, endpoints, register, route_conditions, routing_prefix
Constructor Details
#initialize(connection, options) ⇒ Endpoint
Returns a new instance of Endpoint.
105
106
107
108
109
|
# File 'lib/sockjs/transport.rb', line 105
def initialize(connection, options)
@connection, @options = connection, options
options[:websocket] = true unless options.has_key?(:websocket)
options[:cookie_needed] = true unless options.has_key?(:cookie_needed)
end
|
Instance Attribute Details
#connection ⇒ Object
104
105
106
|
# File 'lib/sockjs/transport.rb', line 104
def connection
@connection
end
|
#http_origin ⇒ Object
How is this used? Thread safety?
132
133
134
|
# File 'lib/sockjs/transport.rb', line 132
def http_origin
@http_origin
end
|
#options ⇒ Object
104
105
106
|
# File 'lib/sockjs/transport.rb', line 104
def options
@options
end
|
#remote_addr ⇒ Object
How is this used? Thread safety?
132
133
134
|
# File 'lib/sockjs/transport.rb', line 132
def remote_addr
@remote_addr
end
|
Instance Method Details
#build_error_response(request) ⇒ Object
187
188
189
|
# File 'lib/sockjs/transport.rb', line 187
def build_error_response(request)
build_response(request)
end
|
#build_response(request) ⇒ Object
181
182
183
184
185
|
# File 'lib/sockjs/transport.rb', line 181
def build_response(request)
response = response_class.new(request)
setup_response(request, response)
return response
end
|
#call(env) ⇒ Object
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/sockjs/transport.rb', line 133
def call(env)
@remote_addr = env["REMOTE_ADDR"]
@http_origin = env["HTTP_ORIGIN"]
SockJS.debug "Request for #{self.class}: #{env["REQUEST_METHOD"]}/#{env["PATH_INFO"]}"
request = ::SockJS::Request.new(env)
EM.next_tick do
handle(request)
end
return Thin::Connection::AsyncResponse
end
|
#empty_string ⇒ Object
120
121
122
|
# File 'lib/sockjs/transport.rb', line 120
def empty_string
"\n"
end
|
#error_content_type ⇒ Object
167
168
169
|
# File 'lib/sockjs/transport.rb', line 167
def error_content_type
:plain
end
|
124
125
126
127
128
|
# File 'lib/sockjs/transport.rb', line 124
def format_frame(session, payload)
raise TypeError.new("Payload must not be nil!") if payload.nil?
"#{payload}\n"
end
|
#handle(request) ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# File 'lib/sockjs/transport.rb', line 144
def handle(request)
handle_request(request)
rescue SockJS::HttpError => error
SockJS.debug "HttpError while handling request: #{([error.inspect] + error.backtrace).join("\n")}"
handle_http_error(request, error)
rescue Object => error
SockJS.debug "Error while handling request: #{([error.inspect] + error.backtrace).join("\n")}"
begin
response = response_class.new(request, 500)
response.write(error.message)
response.finish
return response
rescue Object => ex
SockJS.debug "Error while trying to send error HTTP response: #{ex.inspect}"
end
end
|
#handle_http_error(request, error) ⇒ Object
171
172
173
174
175
176
177
178
179
|
# File 'lib/sockjs/transport.rb', line 171
def handle_http_error(request, error)
response = build_error_response(request)
response.status = error.status
response.set_content_type(error_content_type)
SockJS::debug "Built error response: #{response.inspect}"
response.write(error.message)
response
end
|
#handle_request(request) ⇒ Object
161
162
163
164
165
|
# File 'lib/sockjs/transport.rb', line 161
def handle_request(request)
response = build_response(request)
response.finish
return response
end
|
#inspect ⇒ Object
111
112
113
|
# File 'lib/sockjs/transport.rb', line 111
def inspect
"<<#{self.class.name} #{options.inspect}>>"
end
|
#response_class ⇒ Object
115
116
117
|
# File 'lib/sockjs/transport.rb', line 115
def response_class
SockJS::Response
end
|
#setup_response(request, response) ⇒ Object
191
192
193
|
# File 'lib/sockjs/transport.rb', line 191
def setup_response(request, response)
response.status = 200
end
|