apns_gatling 0.1.5 → 0.2
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 +4 -4
- data/examples/push_message.rb +3 -1
- data/lib/apns_gatling/apns_client.rb +44 -8
- data/lib/apns_gatling/request.rb +2 -1
- data/lib/apns_gatling/response.rb +9 -1
- data/lib/apns_gatling/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: 683a9f97a25ddb358da1ded897fcf852dd394753
|
4
|
+
data.tar.gz: 7f5088c3f030e43c7530ff7f91d5ba75524d93a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5e4721d36638633fedeb0c2d7b755316a57d3365f3af2568ee938d145ae7d4972fdbc78d3c831bb2812eb997ecf05000423f3632030946a507c3920070bae78
|
7
|
+
data.tar.gz: 9f9568bd6b3814d2c904f326f4aefe5122762aac79b3c0d20c2591332d87513ee7b5f36f1175a2ff0eb66fb9229dcdf4767b5708d49d940064e70cf7c1ff9770
|
data/examples/push_message.rb
CHANGED
@@ -15,6 +15,7 @@ module ApnsGatling
|
|
15
15
|
@token_maker = Token.new(team_id, auth_key_id, ecdsa_key)
|
16
16
|
@sandbox = sandbox
|
17
17
|
@mutex = Mutex.new
|
18
|
+
@requests = {}
|
18
19
|
@cv = ConditionVariable.new
|
19
20
|
init_vars
|
20
21
|
end
|
@@ -51,28 +52,62 @@ module ApnsGatling
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
55
|
+
def connection_error(e)
|
56
|
+
@mutex.synchronize do
|
57
|
+
@requests.values.map do | request |
|
58
|
+
block = request[:block]
|
59
|
+
response = request[:response]
|
60
|
+
if block && response
|
61
|
+
response.error_with("connection failed #{e}")
|
62
|
+
block.call response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
@requests = {}
|
66
|
+
@connection = nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
54
70
|
# push message
|
55
|
-
def push(message)
|
71
|
+
def push(message, &block)
|
56
72
|
request = Request.new(message, provider_token, host)
|
57
|
-
response = Response.new
|
58
|
-
|
73
|
+
response = Response.new(message)
|
74
|
+
@mutex.synchronize do
|
75
|
+
@requests[request.id] = {block: block, response: response}
|
76
|
+
end
|
59
77
|
|
60
78
|
begin
|
79
|
+
ensure_socket_open
|
61
80
|
stream = connection.new_stream
|
81
|
+
rescue SocketError => e
|
82
|
+
response.error_with("create connection failed #{e}")
|
83
|
+
block.call response
|
84
|
+
return
|
85
|
+
rescue StreamLimitExceeded
|
86
|
+
response.error_with('stream limit exceeded')
|
87
|
+
block.call response
|
88
|
+
return
|
89
|
+
rescue ConnectionClosed
|
90
|
+
close
|
91
|
+
response.error_with('connection closed')
|
92
|
+
block.call response
|
93
|
+
return
|
62
94
|
rescue StandardError => e
|
63
95
|
close
|
64
|
-
|
96
|
+
response.error_with("standard error #{e}")
|
97
|
+
block.call response
|
98
|
+
return
|
65
99
|
end
|
66
100
|
|
67
101
|
stream.on(:close) do
|
68
102
|
@mutex.synchronize do
|
103
|
+
@requests.delete request.id
|
69
104
|
@token_generated_at = 0 if response.status == '403' && response.error[:reason] == 'ExpiredProviderToken'
|
70
105
|
if @blocking
|
71
106
|
@blocking = false
|
72
107
|
@cv.signal
|
73
108
|
end
|
109
|
+
block.call response if block
|
74
110
|
end
|
75
|
-
yield response
|
76
111
|
end
|
77
112
|
|
78
113
|
stream.on(:headers) do |h|
|
@@ -112,12 +147,12 @@ module ApnsGatling
|
|
112
147
|
socket_loop
|
113
148
|
rescue EOFError
|
114
149
|
init_vars
|
115
|
-
|
150
|
+
connection_error(SocketError.new('Socket was remotely closed'))
|
116
151
|
rescue Exception => e
|
117
152
|
init_vars
|
118
|
-
|
153
|
+
connection_error(e)
|
119
154
|
end
|
120
|
-
end
|
155
|
+
end
|
121
156
|
end
|
122
157
|
end
|
123
158
|
|
@@ -169,6 +204,7 @@ module ApnsGatling
|
|
169
204
|
def close
|
170
205
|
exit_thread(@socket_thread)
|
171
206
|
init_vars
|
207
|
+
@connection = nil
|
172
208
|
end
|
173
209
|
|
174
210
|
def exit_thread(thread)
|
data/lib/apns_gatling/request.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module ApnsGatling
|
2
2
|
class Request
|
3
|
-
attr_reader :host, :path, :auth_token, :headers, :data
|
3
|
+
attr_reader :id, :host, :path, :auth_token, :headers, :data
|
4
4
|
|
5
5
|
def initialize(message, auth_token, host)
|
6
6
|
path = "/3/device/#{message.token}"
|
7
|
+
@id = message.apns_id
|
7
8
|
@path = path
|
8
9
|
@auth_token = auth_token
|
9
10
|
@headers = headers_from message, auth_token, host, path
|
@@ -4,10 +4,13 @@ module ApnsGatling
|
|
4
4
|
class Response
|
5
5
|
# See: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
|
6
6
|
attr_accessor :headers, :data
|
7
|
+
attr_reader :message
|
7
8
|
|
8
|
-
def initialize()
|
9
|
+
def initialize(message)
|
9
10
|
@headers = {}
|
10
11
|
@data = ''
|
12
|
+
@message = message
|
13
|
+
@internal_error = nil
|
11
14
|
end
|
12
15
|
|
13
16
|
def status
|
@@ -22,7 +25,12 @@ module ApnsGatling
|
|
22
25
|
JSON.parse(@data) rescue @data
|
23
26
|
end
|
24
27
|
|
28
|
+
def error_with(reason)
|
29
|
+
@internal_error = {reason: reason, 'apns-id': @message.apns_id, status: '0'}
|
30
|
+
end
|
31
|
+
|
25
32
|
def error
|
33
|
+
return @internal_error if @internal_error
|
26
34
|
if status != '200'
|
27
35
|
e = {}
|
28
36
|
e.merge!(status: @headers[':status']) if @headers[':status']
|
data/lib/apns_gatling/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apns_gatling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cloud
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-2
|