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
87
88
89
|
# File 'lib/sockjs/transports/websocket.rb', line 87
def build_error_response(request)
response = response_class.new(request)
end
|
#build_response(request) ⇒ Object
77
78
79
80
81
82
83
84
85
|
# File 'lib/sockjs/transports/websocket.rb', line 77
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
55
56
57
|
# File 'lib/sockjs/transports/websocket.rb', line 55
def disabled?
!options[:websocket]
end
|
135
136
137
138
|
# File 'lib/sockjs/transports/websocket.rb', line 135
def (event)
SockJS.debug "Received message event: #{event.data.inspect}"
event.data
end
|
#finish_response(web_socket) ⇒ Object
130
131
132
133
|
# File 'lib/sockjs/transports/websocket.rb', line 130
def finish_response(web_socket)
SockJS.debug "Finishing response"
web_socket.close
end
|
121
122
123
|
# File 'lib/sockjs/transports/websocket.rb', line 121
def format_frame(response, frame)
frame.to_s
end
|
#handle_request(request) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/sockjs/transports/websocket.rb', line 63
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("Worng 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("Worng 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/sockjs/transports/websocket.rb', line 140
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
91
92
93
94
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
|
# File 'lib/sockjs/transports/websocket.rb', line 91
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
125
126
127
128
|
# File 'lib/sockjs/transports/websocket.rb', line 125
def send_data(web_socket, data)
web_socket.send(data)
return data.length
end
|
#session_key(ws) ⇒ Object
59
60
61
|
# File 'lib/sockjs/transports/websocket.rb', line 59
def session_key(ws)
ws.object_id.to_s
end
|