Module: APNS
- Defined in:
- lib/apns/core.rb,
lib/apns/device.rb,
lib/apns/payload.rb
Defined Under Namespace
Classes: Device, Payload, PemFileError, PemPathError
Constant Summary collapse
- @@ssl =
Persistent connection
{}
- @@sock =
{}
Class Attribute Summary collapse
-
.feedback_host ⇒ Object
Returns the value of attribute feedback_host.
-
.feedback_port ⇒ Object
Returns the value of attribute feedback_port.
-
.host ⇒ Object
Returns the value of attribute host.
-
.port ⇒ Object
Returns the value of attribute port.
Class Method Summary collapse
- .feedback(stream = :_global) ⇒ Object
- .pass(stream = :_global, new_pass = nil) ⇒ Object
- .pass=(new_pass) ⇒ Object
- .pem(stream = :_global, new_pem = nil) ⇒ Object
- .pem=(new_pem) ⇒ Object
- .send(*payloads) ⇒ Object
- .send_payloads(*payloads) ⇒ Object
-
.send_stream(stream, *payloads) ⇒ Object
Send to a pem stream.
Class Attribute Details
.feedback_host ⇒ Object
Returns the value of attribute feedback_host.
38 39 40 |
# File 'lib/apns/core.rb', line 38 def feedback_host @feedback_host end |
.feedback_port ⇒ Object
Returns the value of attribute feedback_port.
38 39 40 |
# File 'lib/apns/core.rb', line 38 def feedback_port @feedback_port end |
.host ⇒ Object
Returns the value of attribute host.
38 39 40 |
# File 'lib/apns/core.rb', line 38 def host @host end |
.port ⇒ Object
Returns the value of attribute port.
38 39 40 |
# File 'lib/apns/core.rb', line 38 def port @port end |
Class Method Details
.feedback(stream = :_global) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/apns/core.rb', line 115 def self.feedback(stream = :_global) sock, ssl = self.feedback_connection(stream) apns_feedback = [] while line = sock.gets # Read lines from the socket line.strip! f = line.unpack('N1n1H140') apns_feedback << [Time.at(f[0]), f[2]] end ssl.close sock.close return apns_feedback end |
.pass(stream = :_global, new_pass = nil) ⇒ Object
45 46 47 48 |
# File 'lib/apns/core.rb', line 45 def pass(stream = :_global, new_pass = nil) @pass[stream] = new_pass if new_pass @pass[stream] end |
.pass=(new_pass) ⇒ Object
49 |
# File 'lib/apns/core.rb', line 49 def pass=(new_pass); @pass[:_global] = new_pass; end |
.pem(stream = :_global, new_pem = nil) ⇒ Object
39 40 41 42 |
# File 'lib/apns/core.rb', line 39 def pem(stream = :_global, new_pem = nil) @pem[stream] = new_pem if new_pem @pem[stream] end |
.pem=(new_pem) ⇒ Object
43 |
# File 'lib/apns/core.rb', line 43 def pem=(new_pem); @pem[:_global] = new_pem; end |
.send(*payloads) ⇒ Object
110 111 112 |
# File 'lib/apns/core.rb', line 110 def self.send(*payloads) self.send_stream(:_global, payloads) end |
.send_payloads(*payloads) ⇒ Object
106 107 108 |
# File 'lib/apns/core.rb', line 106 def self.send_payloads(*payloads) self.send(payloads) end |
.send_stream(stream, *payloads) ⇒ Object
Send to a pem stream
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/apns/core.rb', line 71 def self.send_stream(stream, *payloads) payloads.flatten! # retain valid payloads only payloads.reject!{ |p| !(p.is_a?(APNS::Payload) && p.valid?) } return if (payloads.nil? || payloads.count < 1) # loop through each payloads payloads.each do |payload| retry_delay = 2 # !ToDo! do a better job by using a select to poll the socket for a possible response from apple to inform us about an error in the sent payload # begin @@sock[stream], @@ssl[stream] = self.push_connection(stream) if @@ssl[stream].nil? @@ssl[stream].write(payload.to_ssl); @@ssl[stream].flush rescue PemPathError, PemFileError => e raise e rescue @@ssl[stream].close; @@sock[stream].close @@ssl[stream] = nil; @@sock[stream] = nil # cleanup retry_delay *= 2 if retry_delay <= 8 sleep retry_delay retry else raise end end # begin block end # each payloads end |