Class: SockJS::Transports::WebSocket
Instance Attribute Summary
Attributes inherited from Endpoint
#connection, #http_origin, #options, #remote_addr
#method, #prefix
Instance Method Summary
collapse
#closing_frame, #get_session, #messages_frame, #opening_frame, #request_closed
#exception_response, #handle_session_unavailable, #request_data, #response_beginning, #server_key
routing_prefix
Methods inherited from Endpoint
#call, #empty_string, #error_content_type, #handle, #handle_http_error, #initialize, #inspect, #response_class, #setup_response
#add_route, #add_routes, #endpoints, #register, #route_conditions, #routing_prefix
Instance Method Details
#build_error_response(request) ⇒ Object
91
92
93
|
# File 'lib/sockjs/transports/websocket.rb', line 91
def build_error_response(request)
response = response_class.new(request)
end
|
#build_response(request) ⇒ Object
81
82
83
84
85
86
87
88
89
|
# File 'lib/sockjs/transports/websocket.rb', line 81
def build_response(request)
SockJS.debug "Upgrading to WebSockets ..."
web_socket = Faye::WebSocket.new(request.env)
web_socket.extend(WSDebuggingMixin)
return web_socket
end
|
#disabled? ⇒ Boolean
59
60
61
|
# File 'lib/sockjs/transports/websocket.rb', line 59
def disabled?
!options[:websocket]
end
|
139
140
141
142
|
# File 'lib/sockjs/transports/websocket.rb', line 139
def (event)
SockJS.debug "Received message event: #{event.data.inspect}"
event.data
end
|
#finish_response(web_socket) ⇒ Object
134
135
136
137
|
# File 'lib/sockjs/transports/websocket.rb', line 134
def finish_response(web_socket)
SockJS.debug "Finishing response"
web_socket.close
end
|
125
126
127
|
# File 'lib/sockjs/transports/websocket.rb', line 125
def format_frame(response, frame)
frame.to_s
end
|
#handle_request(request) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/sockjs/transports/websocket.rb', line 67
def handle_request(request)
if not @options[:websocket]
raise HttpError.new(404, "WebSockets Are Disabled")
elsif request.env["HTTP_UPGRADE"].to_s.downcase != "websocket"
SockJS.debug("Wrong headers! HTTP_UPGRADE = #{request.env["HTTP_UPGRADE"].to_s}")
raise HttpError.new(400, 'Can "Upgrade" only to "WebSocket".')
elsif not ["Upgrade", "keep-alive, Upgrade"].include?(request.env["HTTP_CONNECTION"])
SockJS.debug("Wrong headers! HTTP_CONNECTION = #{request.env["HTTP_CONNECTION"].to_s}")
raise HttpError.new(400, '"Connection" must be "Upgrade".')
end
super
end
|
#heartbeat_frame(web_socket) ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/sockjs/transports/websocket.rb', line 144
def heartbeat_frame(web_socket)
@pong = true if @pong.nil?
if !@pong
@session.suspend if @session
end
@pong = false
web_socket.ping("ping") do
SockJS.debug "pong"
@pong = true
@session.activate
end
super
end
|
#process_session(session, web_socket) ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/sockjs/transports/websocket.rb', line 95
def process_session(session, web_socket)
@session = session
web_socket.on :open do |event|
begin
SockJS.debug "Attaching consumer"
session.attach_consumer(web_socket, self)
rescue Object => ex
SockJS::debug "Error opening (#{event.inspect[0..40]}) websocket: #{ex.inspect}"
end
end
web_socket.on :message do |event|
begin
session.receive_message((event))
rescue Object => ex
SockJS::debug "Error receiving message on websocket (#{event.inspect[0..40]}): #{ex.inspect}"
web_socket.close
end
end
web_socket.on :close do |event|
begin
session.close(1000, "Session finished")
rescue Object => ex
SockJS::debug "Error closing websocket (#{event.inspect[0..40]}): #{ex.inspect} \n#{ex.message} \n#{ex.backtrace.join("\n")}"
end
end
end
|
#send_data(web_socket, data) ⇒ Object
129
130
131
132
|
# File 'lib/sockjs/transports/websocket.rb', line 129
def send_data(web_socket, data)
web_socket.send(data)
return data.length
end
|
#session_key(ws) ⇒ Object
63
64
65
|
# File 'lib/sockjs/transports/websocket.rb', line 63
def session_key(ws)
ws.object_id.to_s
end
|