da_funk 1.6.0 → 1.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b571fe70c3329983a13c4c57ecfb60f86b58b6a8
4
- data.tar.gz: 3af0eeeca8b9704bf4efc48637cc38b171e4f794
3
+ metadata.gz: 7aefd3af4727577071949e1efd5aa5bcff0d6f38
4
+ data.tar.gz: 0141f8d60bf76607aff1da184eb0c87c15acdd8c
5
5
  SHA512:
6
- metadata.gz: 4b255d96110b17debd059af8e0aab5fc8051d6577dcb1a864952f7080abb95a766d974b3e51ca6a11f83150030ce863846b6a48557add1f4d4b32d805030fdab
7
- data.tar.gz: 0e7c4fc01632c72d4e5bfc028d5148edebe569ebf0644698a59d500cd18931fcd3f6285e160985f932c085842249908cbc9f96bb0d5eb48f1d3fca0d91fee6b3
6
+ metadata.gz: dccb52cb1b3a1205c7098458e376582bc46e460bdf42a43a4251be7010629265670958e638f4efa27b84d7f878fd659fd77c58124a552a2e44279d5da6e23dc9
7
+ data.tar.gz: 54f517cd5d93ac182153ae85c88aee12db40394cbebfd95ecbe1e527de3dec11e23d4744efe1bf6c5d403e5c79e2cc71f244ec45d114bf0d0418287f9839476b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- da_funk (1.6.0)
4
+ da_funk (1.7.0)
5
5
  archive-zip (~> 0.5)
6
6
  bundler
7
7
  cloudwalk_handshake
@@ -14,8 +14,8 @@ GEM
14
14
  specs:
15
15
  archive-zip (0.11.0)
16
16
  io-like (~> 0.3.0)
17
- ast (2.3.0)
18
- cloudwalk (1.4.3)
17
+ ast (2.4.0)
18
+ cloudwalk (1.5.0)
19
19
  bundler
20
20
  rake
21
21
  cloudwalk_handshake (0.12.0)
data/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # DaFunk
2
2
 
3
+ ### 1.7.0 - 2018-02-09
4
+
5
+ - Adopt “w” for FileDb and Transaction::Download write operation and improve IO time.
6
+ - Implement ConnectionManagement class based on ParamsDat config.
7
+ - Implement PaymentChannel via websocket.
8
+
3
9
  ### 1.6.0 - 2018-02-01
4
10
 
5
11
  - Implement Notification#reply.
@@ -0,0 +1,115 @@
1
+ module DaFunk
2
+ class ConnectionManagement
3
+ class << self
4
+ attr_accessor :drops, :primary_timeout
5
+ end
6
+ self.drops = 0
7
+ DEFAULT_DROP_LIMIT = 2
8
+
9
+ def self.fallback?
10
+ if ! Device::Network.connected? && self.fallback_valid? && self.conn_automatic_management? &&
11
+ Device::Setting.media_primary == Device::Setting.media
12
+ self.drops += 1
13
+ if self.drops >= self.conn_fallback_drops_limit
14
+ return true
15
+ end
16
+ end
17
+ false
18
+ end
19
+
20
+ def self.conn_automatic_management?
21
+ DaFunk::ParamsDat.exists? && DaFunk::ParamsDat.file["connection_management"] != "0"
22
+ end
23
+
24
+ def self.conn_fallback_drops_limit
25
+ value = DaFunk::ParamsDat.file["conn_fallback_drops_limit"]
26
+ if value && ! value.empty?
27
+ value.to_i
28
+ else
29
+ DEFAULT_DROP_LIMIT
30
+ end
31
+ end
32
+
33
+ def self.conn_fallback_config
34
+ value = DaFunk::ParamsDat.file["conn_fallback_config"]
35
+ if value && !value.empty?
36
+ value
37
+ end
38
+ end
39
+
40
+ def self.conn_fallback_timer
41
+ value = DaFunk::ParamsDat.file["conn_fallback_timer"]
42
+ if value && ! value.empty?
43
+ return value.to_i
44
+ end
45
+ 0
46
+ end
47
+
48
+ class << self
49
+ alias :config :conn_fallback_config
50
+ end
51
+
52
+ def self.primary_try?
53
+ if ! Device::Setting.media_primary.to_s.empty? && Device::Setting.media_primary != Device::Setting.media
54
+ if self.primary_timeout.nil?
55
+ self.schedule_primary_timeout
56
+ else
57
+ if Time.now > self.primary_timeout
58
+ self.schedule_primary_timeout
59
+ return true
60
+ end
61
+ end
62
+ end
63
+ false
64
+ end
65
+
66
+ def self.fallback_valid?
67
+ self.conn_fallback_config && self.conn_fallback_timer &&
68
+ (self.config.include?("WIFI") || self.config.include?("GPRS"))
69
+ end
70
+
71
+ def self.recover_fallback
72
+ if self.fallback_valid?
73
+ self.schedule_primary_timeout
74
+ media, parameters = self.conn_fallback_config.to_s.split("|", 2)
75
+
76
+ if media == "WIFI"
77
+ # WIFI|uclwifinetwork|uclwifisecurity|uclwifichannel|uclwifikey
78
+ essid, authentication, channel, password = parameters.split("|")
79
+ configuration = {
80
+ :network_configured => "1",
81
+ :authentication => authentication,
82
+ :essid => essid,
83
+ :wifi_password => password,
84
+ :channel => channel,
85
+ :cipher => Device::Network::PARE_CIPHERS_TKIP,
86
+ :mode => Device::Network::MODE_STATION,
87
+ :media => Device::Network::MEDIA_WIFI
88
+ }
89
+ # elsif TODO # ETHERNET|DHCP
90
+ else
91
+ # GPRS|APN|USER|PASSWORD
92
+ apn, user, password = parameters.split("|")
93
+ configuration = {
94
+ :network_configured => "1",
95
+ :apn => apn,
96
+ :user => user,
97
+ :apn_password => password,
98
+ :media => Device::Network::MEDIA_GPRS
99
+ }
100
+ end
101
+ Device::Setting.update_attributes(configuration)
102
+ end
103
+ end
104
+
105
+ def self.recover_primary
106
+ Device::Setting.update_attributes({media: Device::Setting.media_primary})
107
+ end
108
+
109
+ private
110
+ def self.schedule_primary_timeout
111
+ self.primary_timeout = (Time.now + self.conn_fallback_timer)
112
+ end
113
+ end
114
+ end
115
+
@@ -0,0 +1,164 @@
1
+ module DaFunk
2
+ class PaymentChannel
3
+ DEFAULT_HEARBEAT = "180"
4
+
5
+ class << self
6
+ attr_accessor :client
7
+ end
8
+
9
+ attr_accessor :handshake_response, :client, :host, :port
10
+
11
+ def self.ready?
12
+ Device::Network.connected? && self.configured?
13
+ end
14
+
15
+ def self.configured?
16
+ DaFunk::ParamsDat.file["access_token"] &&
17
+ DaFunk::ParamsDat.file["payment_channel_enabled"] == "1" &&
18
+ Device::Setting.logical_number
19
+ end
20
+
21
+ def self.handshake_message
22
+ {
23
+ "token" => DaFunk::ParamsDat.file["access_token"],
24
+ "id" => Device::Setting.logical_number.to_s,
25
+ "heartbeat" => Device::Setting.heartbeat || DEFAULT_HEARBEAT
26
+ }.to_json
27
+ end
28
+
29
+ def self.handshake_success_message
30
+ {"token" => DaFunk::ParamsDat.file["access_token"]}.to_json
31
+ end
32
+
33
+ def self.connect(display_message = true)
34
+ if self.dead? && self.ready?
35
+ self.print_info(I18n.t(:attach_attaching), display_message)
36
+ @client = PaymentChannel.new
37
+ self.print_info(I18n.t(:attach_authenticate), display_message)
38
+ @client.handshake
39
+ else
40
+ @client = nil
41
+ end
42
+ @client
43
+ end
44
+
45
+ def self.error
46
+ if self.configured?
47
+ if ConnectionManagement.fallback?
48
+ :fallback_communication
49
+ elsif ConnectionManagement.conn_automatic_management?
50
+ :attach_registration_fail
51
+ end
52
+ end
53
+ end
54
+
55
+ def self.check(display_message = true)
56
+ if self.dead?
57
+ PaymentChannel.connect(display_message)
58
+ if @client
59
+ self.print_info(I18n.t(:attach_waiting), display_message)
60
+ if message = @client.check || @client.handshake?
61
+ self.print_info(I18n.t(:attach_connected), display_message)
62
+ message
63
+ else
64
+ self.error
65
+ end
66
+ else
67
+ self.error
68
+ end
69
+ else
70
+ if @client
71
+ @client.check
72
+ end
73
+ end
74
+ end
75
+
76
+ def self.dead?
77
+ ! self.alive?
78
+ end
79
+
80
+ def self.alive?
81
+ a = Device::Network.connected?
82
+ a = Device::Network.connected?
83
+ b = @client if @client
84
+ c = @client.connected? if @client
85
+ ContextLog.info "a[#{a}] b[#{b}] c[#{c}]"
86
+ a && b && c
87
+ end
88
+
89
+ def self.close!
90
+ @client && @client.close && @client = nil
91
+ end
92
+
93
+ def self.print_info(message, display = true)
94
+ print_last(message) if display
95
+ end
96
+
97
+ def initialize(client = nil)
98
+ @host = Device::Setting.host
99
+ @port = (Device::Setting.apn == "gprsnac.com.br") ? 32304 : 443
100
+ @client = client || CwWebSocket::Client.new(@host, @port)
101
+ rescue SocketError, PolarSSL::SSL::Error => e
102
+ self.error(e)
103
+ end
104
+
105
+ def write(value)
106
+ @client.write(value)
107
+ end
108
+
109
+ def read
110
+ begin
111
+ @client.read
112
+ rescue SocketError, PolarSSL::SSL::Error => e
113
+ self.error(e)
114
+ end
115
+ end
116
+
117
+ def close
118
+ @client.close if @client
119
+ @client = nil
120
+ PaymentChannel.client = nil
121
+ end
122
+
123
+ def connected?
124
+ self.client && self.client.connected?
125
+ end
126
+
127
+ def handshake?
128
+ if self.connected? && ! @handshake_response
129
+ timeout = Time.now + Device::Setting.tcp_recv_timeout.to_i
130
+ loop do
131
+ break if @handshake_response = self.client.read
132
+ break if Time.now > timeout || getc(200) == Device::IO::CANCEL
133
+ end
134
+ end
135
+ !! @handshake_response
136
+ end
137
+
138
+ def check
139
+ if Device::Network.connected? && self.connected? && self.handshake?
140
+ message = self.read
141
+ end
142
+ if message.nil? && ConnectionManagement.primary_try?
143
+ return :primary_communication
144
+ end
145
+ message
146
+ end
147
+
148
+ private
149
+ def error(exception)
150
+ if Context.development?
151
+ ContextLog.exception(exception, exception.backtrace, "PaymentChannel error")
152
+ end
153
+ PaymentChannel.client = nil
154
+ @client = nil
155
+ end
156
+
157
+ def handshake
158
+ if self.connected?
159
+ @client.write(PaymentChannel.handshake_message)
160
+ end
161
+ end
162
+ end
163
+ end
164
+
@@ -210,7 +210,7 @@ module DaFunk
210
210
 
211
211
  def partial_download_to_store(filepath, response_size, file_size)
212
212
  tmp = tmp_file(filepath)
213
- file = File.open(tmp, "w+")
213
+ file = File.open(tmp, "w")
214
214
 
215
215
  if (response_size > 1024)
216
216
  file.write(@first_packet[13..-1])
@@ -1,4 +1,4 @@
1
1
  module DaFunk
2
- VERSION="1.6.0"
2
+ VERSION="1.7.0"
3
3
  end
4
4
 
data/lib/file_db.rb CHANGED
@@ -30,15 +30,13 @@ class FileDb
30
30
  end
31
31
 
32
32
  def save
33
- file_new = File.open(@path, "w+")
34
- @hash.each do |line_key, line_value|
35
- file_new.puts("#{line_key}=#{line_value}")
33
+ string = @hash.inject("") do |str, line| #|line_key, line_value|
34
+ str << "#{line[0]}=#{line[1]}\n"
36
35
  end
36
+ File.open(@path, "w") {|f| f.write(string) }
37
37
  true
38
- rescue
38
+ rescue => e
39
39
  false
40
- ensure
41
- file_new.close
42
40
  end
43
41
 
44
42
  def []=(key, value)
data/out/da_funk.mrb CHANGED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: da_funk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thiago Scalone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-01 00:00:00.000000000 Z
11
+ date: 2018-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -154,6 +154,7 @@ files:
154
154
  - lib/da_funk.rb
155
155
  - lib/da_funk/application.rb
156
156
  - lib/da_funk/callback_flow.rb
157
+ - lib/da_funk/connection_management.rb
157
158
  - lib/da_funk/engine.rb
158
159
  - lib/da_funk/event_handler.rb
159
160
  - lib/da_funk/event_listener.rb
@@ -167,6 +168,7 @@ files:
167
168
  - lib/da_funk/notification_callback.rb
168
169
  - lib/da_funk/notification_event.rb
169
170
  - lib/da_funk/params_dat.rb
171
+ - lib/da_funk/payment_channel.rb
170
172
  - lib/da_funk/rake_task.rb
171
173
  - lib/da_funk/screen.rb
172
174
  - lib/da_funk/screen_flow.rb