da_funk 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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