electric_slide 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/electric_slide/call_queue.rb +14 -11
- data/lib/electric_slide/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: baa91eec756c74ee16f54754dc6e3233d112ea1d
|
4
|
+
data.tar.gz: 9082bca23ef76e4d3c746bbc379ffb4806fd9c26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 753e438b9d3fdf9d8f9b28ffbe6c230b71b82bca4ca79353e02a1746dc82e20fb1dd8826062acbc146c7ad9a5ce1cbec7d8ea9b55d65ebdc95894e99d83e294f
|
7
|
+
data.tar.gz: 47457cd3078318a5977e3361c63ee1d1409928bdf11856477bfdfeea085d7304987f66ade7e9c655acbe836673b37d05555ddf5b2167ac54f659e8b30af6235c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# [develop](https://github.com/adhearsion/electric_slide)
|
2
2
|
|
3
|
+
# [0.4.1](https://github.com/adhearsion/electric_slide/compare/v0.4.0...v0.4.1) - [2016-01-04](https://rubygems.org/gems/adhearsion/versions/0.4.1)
|
4
|
+
* Bugfix: Don't hand out internal CallQueue references to Agents - thread-safety
|
5
|
+
|
3
6
|
# [0.4.0](https://github.com/adhearsion/electric_slide/compare/v0.3.0...v0.4.0) - [2015-12-17](https://rubygems.org/gems/adhearsion/versions/0.4.0)
|
4
7
|
* Change `ElectricSlide::Agent` `#presence=` method name to `#update_presence`. It will also accept one more parameter called `extra_params`, a hash that holds application specific parameters that are passed to the presence change callback.
|
5
8
|
* `ElectricSlide::CallQueue#add_agent` will no longer wait for a connection attempt to complete before returning
|
@@ -164,7 +164,7 @@ class ElectricSlide
|
|
164
164
|
abort ArgumentError.new("#add_agent called with nil object") if agent.nil?
|
165
165
|
abort DuplicateAgentError.new("Agent is already in the queue") if get_agent(agent.id)
|
166
166
|
|
167
|
-
agent.queue =
|
167
|
+
agent.queue = current_actor
|
168
168
|
|
169
169
|
case @connection_type
|
170
170
|
when :call
|
@@ -177,7 +177,7 @@ class ElectricSlide
|
|
177
177
|
@agents << agent
|
178
178
|
@strategy << agent if agent.presence == :available
|
179
179
|
# Fake the presence callback since this is a new agent
|
180
|
-
agent.callback :presence_change,
|
180
|
+
agent.callback :presence_change, current_actor, agent.call, agent.presence, :unavailable
|
181
181
|
|
182
182
|
async.check_for_connections
|
183
183
|
end
|
@@ -304,7 +304,7 @@ class ElectricSlide
|
|
304
304
|
ignoring_ended_calls do
|
305
305
|
if agent.call && agent.call.active?
|
306
306
|
logger.warn "Dead call exception in #connect but agent call still alive, reinserting into queue"
|
307
|
-
agent.callback :connection_failed,
|
307
|
+
agent.callback :connection_failed, current_actor, agent.call, queued_call
|
308
308
|
|
309
309
|
return_agent agent
|
310
310
|
end
|
@@ -367,8 +367,10 @@ class ElectricSlide
|
|
367
367
|
# Stash the caller ID so we don't have to try to get it from a dead call object later
|
368
368
|
queued_caller_id = remote_party queued_call
|
369
369
|
|
370
|
+
queue = current_actor
|
371
|
+
|
370
372
|
# The call controller is actually run by #dial, here we skip joining if we do not have one
|
371
|
-
dial_options = agent.dial_options_for(
|
373
|
+
dial_options = agent.dial_options_for(queue, queued_call)
|
372
374
|
unless dial_options[:confirm]
|
373
375
|
agent_call.on_answer { ignoring_ended_calls { agent_call.join queued_call.uri if queued_call.active? } }
|
374
376
|
end
|
@@ -394,12 +396,12 @@ class ElectricSlide
|
|
394
396
|
|
395
397
|
agent.call = nil
|
396
398
|
|
397
|
-
agent.callback :disconnect,
|
399
|
+
agent.callback :disconnect, queue, agent_call, queued_call
|
398
400
|
|
399
401
|
unless connected
|
400
402
|
if queued_call.active?
|
401
403
|
ignoring_ended_calls { priority_enqueue queued_call }
|
402
|
-
agent.callback :connection_failed,
|
404
|
+
agent.callback :connection_failed, queue, agent_call, queued_call
|
403
405
|
|
404
406
|
logger.warn "Call did not connect to agent! Agent #{agent.id} call ended with #{end_event.reason}; reinserting caller #{queued_caller_id} into queue"
|
405
407
|
else
|
@@ -408,7 +410,7 @@ class ElectricSlide
|
|
408
410
|
end
|
409
411
|
end
|
410
412
|
|
411
|
-
agent.callback :connect,
|
413
|
+
agent.callback :connect, queue, agent_call, queued_call
|
412
414
|
|
413
415
|
agent_call.execute_controller_or_router_on_answer dial_options.delete(:confirm), dial_options.delete(:confirm_metadata)
|
414
416
|
|
@@ -420,8 +422,9 @@ class ElectricSlide
|
|
420
422
|
queued_caller_id = remote_party queued_call
|
421
423
|
agent.call[:queued_call] = queued_call
|
422
424
|
|
425
|
+
queue = current_actor
|
423
426
|
agent.call.register_tmp_handler :event, Punchblock::Event::Unjoined do
|
424
|
-
agent.callback :disconnect,
|
427
|
+
agent.callback :disconnect, queue, agent.call, queued_call
|
425
428
|
ignoring_ended_calls { queued_call.hangup }
|
426
429
|
ignoring_ended_calls { conditionally_return_agent agent if agent.call && agent.call.active? }
|
427
430
|
agent.call[:queued_call] = nil if agent.call
|
@@ -431,13 +434,13 @@ class ElectricSlide
|
|
431
434
|
queued_call[:electric_slide_connected_at] = event.timestamp
|
432
435
|
end
|
433
436
|
|
434
|
-
agent.callback :connect,
|
437
|
+
agent.callback :connect, current_actor, agent.call, queued_call
|
435
438
|
|
436
439
|
agent.join queued_call if queued_call.active?
|
437
440
|
rescue *ENDED_CALL_EXCEPTIONS
|
438
441
|
ignoring_ended_calls do
|
439
442
|
if agent.call && agent.call.active?
|
440
|
-
agent.callback :connection_failed,
|
443
|
+
agent.callback :connection_failed, current_actor, agent.call, queued_call
|
441
444
|
|
442
445
|
logger.info "Caller #{queued_caller_id} failed to connect to Agent #{agent.id} due to caller hangup"
|
443
446
|
conditionally_return_agent agent, :auto
|
@@ -458,7 +461,7 @@ class ElectricSlide
|
|
458
461
|
abort ArgumentError.new("Agent has no active call") unless agent.call && agent.call.active?
|
459
462
|
unless agent.call[:electric_slide_callback_set]
|
460
463
|
agent.call[:electric_slide_callback_set] = true
|
461
|
-
queue =
|
464
|
+
queue = current_actor
|
462
465
|
agent.call.on_end do
|
463
466
|
agent.call = nil
|
464
467
|
queue.return_agent agent, :unavailable
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: electric_slide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Klang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: adhearsion
|