48 lines
1.4 KiB
Ruby
48 lines
1.4 KiB
Ruby
# encoding: BINARY
|
|
|
|
module EventMachine
|
|
module WebSocket
|
|
module MessageProcessor03
|
|
def message(message_type, extension_data, application_data)
|
|
case message_type
|
|
when :close
|
|
@close_info = {
|
|
:code => 1005,
|
|
:reason => "",
|
|
:was_clean => true,
|
|
}
|
|
if @state == :closing
|
|
# TODO: Check that message body matches sent data
|
|
# We can close connection immediately since there is no more data
|
|
# is allowed to be sent or received on this connection
|
|
@connection.close_connection
|
|
else
|
|
# Acknowlege close
|
|
# The connection is considered closed
|
|
send_frame(:close, application_data)
|
|
@connection.close_connection_after_writing
|
|
end
|
|
when :ping
|
|
# Pong back the same data
|
|
send_frame(:pong, application_data)
|
|
@connection.trigger_on_ping(application_data)
|
|
when :pong
|
|
@connection.trigger_on_pong(application_data)
|
|
when :text
|
|
if application_data.respond_to?(:force_encoding)
|
|
application_data.force_encoding("UTF-8")
|
|
end
|
|
@connection.trigger_on_message(application_data)
|
|
when :binary
|
|
@connection.trigger_on_binary(application_data)
|
|
end
|
|
end
|
|
|
|
# Ping & Pong supported
|
|
def pingable?
|
|
true
|
|
end
|
|
end
|
|
end
|
|
end
|