cassia-ruby 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.circleci/config.yml +50 -0
- data/.env.sample +3 -0
- data/.gitignore +12 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +79 -0
- data/LICENSE.txt +21 -0
- data/README.md +377 -0
- data/Rakefile +2 -0
- data/bin/console +17 -0
- data/bin/setup +8 -0
- data/cassia-ruby.gemspec +38 -0
- data/lib/cassia/access_controller.rb +111 -0
- data/lib/cassia/api.rb +39 -0
- data/lib/cassia/characteristic.rb +14 -0
- data/lib/cassia/configuration.rb +9 -0
- data/lib/cassia/default_logger.rb +11 -0
- data/lib/cassia/device.rb +14 -0
- data/lib/cassia/requests/close_ap_state.rb +31 -0
- data/lib/cassia/requests/close_connection_state.rb +38 -0
- data/lib/cassia/requests/close_notify.rb +38 -0
- data/lib/cassia/requests/close_scan.rb +38 -0
- data/lib/cassia/requests/combined_sse.rb +27 -0
- data/lib/cassia/requests/connect_device.rb +38 -0
- data/lib/cassia/requests/connect_local.rb +44 -0
- data/lib/cassia/requests/disconnect_device.rb +36 -0
- data/lib/cassia/requests/disconnect_local.rb +33 -0
- data/lib/cassia/requests/discover_all_char.rb +33 -0
- data/lib/cassia/requests/discover_all_services.rb +33 -0
- data/lib/cassia/requests/discover_all_services_and_chars.rb +33 -0
- data/lib/cassia/requests/discover_char_of_service.rb +34 -0
- data/lib/cassia/requests/discover_descriptor_of_char.rb +34 -0
- data/lib/cassia/requests/get_all_routers_status.rb +33 -0
- data/lib/cassia/requests/get_connected_devices_router.rb +34 -0
- data/lib/cassia/requests/get_token.rb +34 -0
- data/lib/cassia/requests/open_ap_state.rb +31 -0
- data/lib/cassia/requests/open_connection_state.rb +38 -0
- data/lib/cassia/requests/open_notify.rb +38 -0
- data/lib/cassia/requests/open_scan.rb +50 -0
- data/lib/cassia/requests/switch_autoselect.rb +37 -0
- data/lib/cassia/requests/write_char_by_handle.rb +35 -0
- data/lib/cassia/response_handlers/close_ap_state.rb +31 -0
- data/lib/cassia/response_handlers/close_connection_state.rb +32 -0
- data/lib/cassia/response_handlers/close_notify.rb +32 -0
- data/lib/cassia/response_handlers/close_scan.rb +32 -0
- data/lib/cassia/response_handlers/connect_device.rb +29 -0
- data/lib/cassia/response_handlers/connect_local.rb +32 -0
- data/lib/cassia/response_handlers/disconnect_device.rb +28 -0
- data/lib/cassia/response_handlers/disconnect_local.rb +31 -0
- data/lib/cassia/response_handlers/discover_all_char.rb +33 -0
- data/lib/cassia/response_handlers/discover_all_services.rb +33 -0
- data/lib/cassia/response_handlers/discover_all_services_and_chars.rb +41 -0
- data/lib/cassia/response_handlers/discover_char_of_service.rb +37 -0
- data/lib/cassia/response_handlers/discover_descriptor_of_char.rb +23 -0
- data/lib/cassia/response_handlers/get_all_routers_status.rb +32 -0
- data/lib/cassia/response_handlers/get_connected_devices_router.rb +33 -0
- data/lib/cassia/response_handlers/get_token.rb +29 -0
- data/lib/cassia/response_handlers/open_ap_state.rb +31 -0
- data/lib/cassia/response_handlers/open_connection_state.rb +32 -0
- data/lib/cassia/response_handlers/open_notify.rb +32 -0
- data/lib/cassia/response_handlers/open_scan.rb +32 -0
- data/lib/cassia/response_handlers/switch_autoselect.rb +29 -0
- data/lib/cassia/response_handlers/write_char_by_handle.rb +28 -0
- data/lib/cassia/router.rb +75 -0
- data/lib/cassia/ruby/version.rb +5 -0
- data/lib/cassia/service.rb +13 -0
- data/lib/cassia.rb +82 -0
- metadata +252 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DiscoverCharOfService
|
4
|
+
def initialize(access_controller, router: , device_mac: , service_uuid: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
@service_uuid = service_uuid
|
9
|
+
end
|
10
|
+
|
11
|
+
def path
|
12
|
+
"/api/gatt/nodes/#{@device_mac}/services/#{@service_uuid}/characteristics?mac=#{@router.mac}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def headers
|
16
|
+
{
|
17
|
+
'Authorization' => "Bearer #{access_token}",
|
18
|
+
'Content-Type' => "application/json"
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def perform
|
23
|
+
Cassia::ResponseHandlers::DiscoverCharOfService.new(@access_controller, router: @router, device_mac: @device_mac, service_uuid: @service_uuid).handle(Cassia.api.get(self))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def access_token
|
29
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
30
|
+
@access_controller.access_token
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DiscoverDescriptorOfChar
|
4
|
+
def initialize(access_controller, router: , device_mac: , char_uuid: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
@char_uuid = char_uuid
|
9
|
+
end
|
10
|
+
|
11
|
+
def path
|
12
|
+
"/api/gatt/nodes/#{@device_mac}/characteristics/#{@char_uuid}/descriptors?mac=#{@router.mac}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def headers
|
16
|
+
{
|
17
|
+
'Authorization' => "Bearer #{access_token}",
|
18
|
+
'Content-Type' => "application/json"
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def perform
|
23
|
+
Cassia::ResponseHandlers::DiscoverDescriptorOfChar.new(@access_controller, router: @router, device_mac: @device_mac, char_uuid: @char_uuid).handle(Cassia.api.get(self))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def access_token
|
29
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
30
|
+
@access_controller.access_token
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class GetAllRoutersStatus
|
4
|
+
attr_reader :access_token
|
5
|
+
|
6
|
+
def initialize(access_controller)
|
7
|
+
@access_controller = access_controller
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
'/api/cassia/hubs'
|
12
|
+
end
|
13
|
+
|
14
|
+
def headers
|
15
|
+
{
|
16
|
+
'Authorization' => "Bearer #{access_token}",
|
17
|
+
'Content-Type' => "application/json"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform
|
22
|
+
Cassia::ResponseHandlers::GetAllRoutersStatus.new(@access_controller).handle(Cassia.api.get(self))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
29
|
+
@access_controller.access_token
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class GetConnectedDevicesRouter
|
4
|
+
attr_reader :access_token
|
5
|
+
|
6
|
+
def initialize(access_controller, router: )
|
7
|
+
@access_controller = access_controller
|
8
|
+
@router = router
|
9
|
+
end
|
10
|
+
|
11
|
+
def path
|
12
|
+
"/api/gap/nodes?connection_state=connected&mac=#{@router.mac}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def headers
|
16
|
+
{
|
17
|
+
'Authorization' => "Bearer #{access_token}",
|
18
|
+
'Content-Type' => "application/json"
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def perform
|
23
|
+
Cassia::ResponseHandlers::GetConnectedDevicesRouter.new(@access_controller, router: @router).handle(Cassia.api.get(self))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def access_token
|
29
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
30
|
+
@access_controller.access_token
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class GetToken
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def path
|
9
|
+
'/api/oauth2/token'
|
10
|
+
end
|
11
|
+
|
12
|
+
def body
|
13
|
+
{ 'grant_type' => "client_credentials" }.to_json
|
14
|
+
end
|
15
|
+
|
16
|
+
def headers
|
17
|
+
{
|
18
|
+
'Authorization' => "Basic #{get_encode}",
|
19
|
+
'Content-Type' => "application/json"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def perform
|
24
|
+
Cassia::ResponseHandlers::GetToken.new(@access_controller).handle(Cassia.api.post(self))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def get_encode
|
30
|
+
Base64.encode64("#{Cassia.configuration.client_id}:#{Cassia.configuration.secret}").strip
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class OpenApState
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def path
|
9
|
+
'/api/aps/ap-state/open'
|
10
|
+
end
|
11
|
+
|
12
|
+
def headers
|
13
|
+
{
|
14
|
+
'Authorization' => "Bearer #{access_token}",
|
15
|
+
'Content-Type' => "application/json"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def perform
|
20
|
+
Cassia::ResponseHandlers::OpenApState.new(@access_controller).handle(Cassia.api.get(self))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def access_token
|
26
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
27
|
+
@access_controller.access_token
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class OpenConnectionState
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/connection-state/open'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
'aps' => @aps
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::OpenConnectionState.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class OpenNotify
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/notify/open'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
'aps' => @aps
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::OpenNotify.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class OpenScan
|
4
|
+
def initialize(access_controller, aps: , chip: nil, active: nil, filter_name: nil, filter_mac: nil,
|
5
|
+
filter_uuid: nil)
|
6
|
+
@access_controller = access_controller
|
7
|
+
@aps = aps
|
8
|
+
@chip = chip
|
9
|
+
@active = active
|
10
|
+
@filter_name = filter_name
|
11
|
+
@filter_mac = filter_mac
|
12
|
+
@filter_uuid = filter_uuid
|
13
|
+
end
|
14
|
+
|
15
|
+
def path
|
16
|
+
'/api/aps/scan/open'
|
17
|
+
end
|
18
|
+
|
19
|
+
def body
|
20
|
+
body = {
|
21
|
+
'aps' => @aps
|
22
|
+
}
|
23
|
+
body['chip'] = @chip unless @chip.nil?
|
24
|
+
body['active'] = @active unless @active.nil?
|
25
|
+
body['filter_name'] = @filter_name unless @filter_name.nil?
|
26
|
+
body['filter_mac'] = @filter_mac unless @filter_mac.nil?
|
27
|
+
body['filter_uuid'] = @filter_uuid unless @filter_uuid.nil?
|
28
|
+
body.to_json
|
29
|
+
end
|
30
|
+
|
31
|
+
def headers
|
32
|
+
{
|
33
|
+
'Authorization' => "Bearer #{access_token}",
|
34
|
+
'Content-Type' => "application/json"
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def perform
|
39
|
+
Cassia::ResponseHandlers::OpenScan.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def access_token
|
45
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
46
|
+
@access_controller.access_token
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class SwitchAutoselect
|
4
|
+
|
5
|
+
def initialize(access_controller, flag: 1)
|
6
|
+
@access_controller = access_controller
|
7
|
+
@flag = flag
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
'/api/aps/ap-select-switch'
|
12
|
+
end
|
13
|
+
|
14
|
+
def body
|
15
|
+
{ 'flag' => @flag }.to_json
|
16
|
+
end
|
17
|
+
|
18
|
+
def headers
|
19
|
+
{
|
20
|
+
'Authorization' => "Bearer #{access_token}",
|
21
|
+
'Content-Type' => "application/json"
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def perform
|
26
|
+
Cassia::ResponseHandlers::SwitchAutoselect.new(@access_controller).handle(Cassia.api.post(self))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def access_token
|
32
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
33
|
+
@access_controller.access_token
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class WriteCharByHandle
|
4
|
+
def initialize(access_controller, router: , device_mac: , handle: , value: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
@handle = handle
|
9
|
+
@value = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def path
|
13
|
+
"/api/gatt/nodes/#{@device_mac}/handle/#{@handle}/value/#{@value}?mac=#{@router.mac}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def headers
|
17
|
+
{
|
18
|
+
'Authorization' => "Bearer #{access_token}",
|
19
|
+
'Content-Type' => "application/json"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def perform
|
24
|
+
Cassia::ResponseHandlers::WriteCharByHandle.new(@access_controller, router: @router, device_mac: @device_mac, handle: @handle, value: @value).handle(Cassia.api.get(self))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def access_token
|
30
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
31
|
+
@access_controller.access_token
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class CloseApState
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def handle(response)
|
9
|
+
if response.success?
|
10
|
+
handle_success
|
11
|
+
else
|
12
|
+
handle_failure(response)
|
13
|
+
end
|
14
|
+
response.success?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def handle_success
|
20
|
+
@access_controller.routers.each do |router|
|
21
|
+
router.ap_state_monitor_on = false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def handle_failure(response)
|
26
|
+
@access_controller.error = JSON.parse(response.body)['error']
|
27
|
+
@access_controller.error_description = JSON.parse(response.body)['error_description']
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class CloseConnectionState
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle(response)
|
10
|
+
if response.success?
|
11
|
+
handle_success
|
12
|
+
else
|
13
|
+
handle_failure(response)
|
14
|
+
end
|
15
|
+
response.success?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def handle_success
|
21
|
+
routers_to_close_connection = @access_controller.routers.select {|router| @aps.include?(router.mac) }
|
22
|
+
routers_to_close_connection.each do |router|
|
23
|
+
router.connection_state_monitor_on = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def handle_failure(response)
|
28
|
+
@access_controller.error = JSON.parse(response.body)['error']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class CloseNotify
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle(response)
|
10
|
+
if response.success?
|
11
|
+
handle_success
|
12
|
+
else
|
13
|
+
handle_failure(response)
|
14
|
+
end
|
15
|
+
response.success?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def handle_success
|
21
|
+
routers_to_close_notify = @access_controller.routers.select {|router| @aps.include?(router.mac) }
|
22
|
+
routers_to_close_notify.each do |router|
|
23
|
+
router.notification_open = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def handle_failure(response)
|
28
|
+
@access_controller.error = JSON.parse(response.body)['error']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class CloseScan
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle(response)
|
10
|
+
if response.success?
|
11
|
+
handle_success
|
12
|
+
else
|
13
|
+
handle_failure(response)
|
14
|
+
end
|
15
|
+
response.success?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def handle_success
|
21
|
+
routers_to_close_scan = @access_controller.routers.select {|router| @aps.include?(router.mac) }
|
22
|
+
routers_to_close_scan.each do |router|
|
23
|
+
router.scanning_on = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def handle_failure(response)
|
28
|
+
@access_controller.error = JSON.parse(response.body)['error']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class ConnectDevice
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def handle(response)
|
9
|
+
if response.success?
|
10
|
+
handle_success(response)
|
11
|
+
else
|
12
|
+
handle_failure(response)
|
13
|
+
end
|
14
|
+
response.success?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def handle_success(response)
|
20
|
+
new_device = Cassia::Device.new(mac: response.body['device'])
|
21
|
+
@access_controller.connected_devices << new_device
|
22
|
+
end
|
23
|
+
|
24
|
+
def handle_failure(response)
|
25
|
+
@access_controller.error = response.body['error']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class ConnectLocal
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def handle(response)
|
11
|
+
if response.success?
|
12
|
+
handle_success(response)
|
13
|
+
else
|
14
|
+
handle_failure(response)
|
15
|
+
end
|
16
|
+
response.success?
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def handle_success(response)
|
22
|
+
new_device = Cassia::Device.new(mac: @device_mac)
|
23
|
+
@router.connected_devices << new_device
|
24
|
+
@access_controller.connected_devices << new_device
|
25
|
+
end
|
26
|
+
|
27
|
+
def handle_failure(response)
|
28
|
+
@access_controller.error = response.body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class DisconnectDevice
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def handle(response)
|
9
|
+
if response.success?
|
10
|
+
handle_success(response)
|
11
|
+
else
|
12
|
+
handle_failure(response)
|
13
|
+
end
|
14
|
+
response.success?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def handle_success(response)
|
20
|
+
@access_controller.connected_devices.select! {|device| device.mac != response.body['device']}
|
21
|
+
end
|
22
|
+
|
23
|
+
def handle_failure(response)
|
24
|
+
@access_controller.error = response.body['error']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class DisconnectLocal
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def handle(response)
|
11
|
+
if response.success?
|
12
|
+
handle_success
|
13
|
+
else
|
14
|
+
handle_failure(response)
|
15
|
+
end
|
16
|
+
response.success?
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def handle_success
|
22
|
+
@access_controller.connected_devices.select! {|device| device.mac != @device_mac}
|
23
|
+
@router.connected_devices.select! {|device| device.mac != @device_mac}
|
24
|
+
end
|
25
|
+
|
26
|
+
def handle_failure(response)
|
27
|
+
@access_controller.error = response.body
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module ResponseHandlers
|
3
|
+
class DiscoverAllChar
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def handle(response)
|
11
|
+
if response.success?
|
12
|
+
handle_success(response)
|
13
|
+
else
|
14
|
+
handle_failure(response)
|
15
|
+
end
|
16
|
+
response.success?
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def handle_success(response)
|
22
|
+
device = @router.connected_devices.detect {|device| device.mac == @device_mac}
|
23
|
+
response.body.each do |char|
|
24
|
+
device.characteristics << Characteristic.new(char)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def handle_failure(response)
|
29
|
+
@access_controller.error = response.body
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|