Skip to content

Commit

Permalink
Merge pull request signalwire#42 from signalwire/feature/handle-blade…
Browse files Browse the repository at this point in the history
…-failure

Blade error handling
  • Loading branch information
bryanrite authored Aug 19, 2019
2 parents 5c37c96 + df03096 commit 0da31a0
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 16 deletions.
12 changes: 11 additions & 1 deletion lib/signalwire/blade/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,20 @@ def receive(message)
end

def write_command(command, &block)
once(:message, id: command.id, &block) if block_given?
if block_given?
once :message, id: command.id do |event|
handle_execute_response(event, &block)
end
end

transmit(command.build_request.to_json)
end

def handle_execute_response(event, &block)
logger.error("Blade error occurred, code #{event.error_code}: #{event.error_message}") if event.error?
block.call(event)
end

def execute(params, &block)
block_given? ? write_command(Execute.new(params), &block) : write_command(Execute.new(params))
end
Expand Down
12 changes: 12 additions & 0 deletions lib/signalwire/blade/message.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,17 @@ def self.from_json(json_hash)
def to_s
inspect
end

def error?
@payload.has_key?(:error)
end

def error_code
@payload.dig(:error, :code)
end

def error_message
@payload.dig(:error, :message)
end
end
end
38 changes: 23 additions & 15 deletions lib/signalwire/relay/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def relay_execute(command, timeout = Signalwire::Relay::COMMAND_TIMEOUT, &block)
block.call(event, success) if block_given?
logger.error "Relay command failed with code #{code} and message: #{message}" unless success
else
logger.error 'Unknown Relay command failure, result code not found'
logger.error("Relay error occurred, code #{event.error_code}: #{event.error_message}") if event.error?
block.call(event, :failure) if block_given?
end
else
Expand Down Expand Up @@ -121,7 +121,11 @@ def setup_handlers
@session.on :connected do |event|
logger.debug 'Relay client connected'
broadcast :connecting, event
protocol_setup
if event.error?
logger.error("Error setting up Blade connection")
else
protocol_setup
end
end
end

Expand All @@ -137,19 +141,23 @@ def protocol_setup
setup[:params][:protocol] = @protocol if @protocol

@session.execute(setup) do |event|
@protocol = event.dig(:result, :result, :protocol)
logger.debug "Protocol set up as #{protocol}"

notification_request = {
"protocol": @protocol,
"command": 'add',
"channels": ['notifications']
}

@session.subscribe(notification_request) do
logger.debug "Subscribed to notifications for #{protocol}"
@connected = true
broadcast :ready, self
if event.error?
logger.error("Error setting up Relay protocol")
else
@protocol = event.dig(:result, :result, :protocol)
logger.debug "Protocol set up as #{protocol}"

notification_request = {
"protocol": @protocol,
"command": 'add',
"channels": ['notifications']
}

@session.subscribe(notification_request) do
logger.debug "Subscribed to notifications for #{protocol}"
@connected = true
broadcast :ready, self
end
end
end
end
Expand Down
17 changes: 17 additions & 0 deletions spec/signalwire/blade/message_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,21 @@
expect(msg[:someval]).to eq 'foo'
end
end

describe 'error?' do
let(:error_hash) do
{ error: { code: '-9999', message: 'Something went horribly wrong' } }
end

it "returns true if error" do
obj = described_class.new(error_hash)
expect(obj.error?).to eq true
expect(obj.error_code).to eq error_hash[:error][:code]
expect(obj.error_message).to eq error_hash[:error][:message]
end

it "returns false if not an error" do
expect(subject.error?).to eq false
end
end
end
14 changes: 14 additions & 0 deletions spec/signalwire/relay/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,20 @@
end
end

describe '#setup_handlers' do
let(:error_event) { Signalwire::Blade::Message.new({ error: { code: '-9999', message: 'Something went horribly wrong' } }) }
let(:result_event) { Signalwire::Blade::Message.new({ result: { code: '200', message: 'All good' } }) }
it "does not setup protocol on a failed login" do
expect(subject).to receive(:protocol_setup).never
subject.session.broadcast(:connected, error_event)
end

it "does setup protocol on a successful login" do
expect(subject).to receive(:protocol_setup).once
subject.session.broadcast(:connected, result_event)
end
end

describe '#relay_execute' do
let(:receive_message) { {
"protocol": 'myprotocol',
Expand Down

0 comments on commit 0da31a0

Please sign in to comment.