@@ -3,8 +3,7 @@ import Foundation
3
3
4
4
@objc ( PusherWebsocketReactNative)
5
5
@objcMembers class PusherWebsocketReactNative : RCTEventEmitter , PusherDelegate , Authorizer {
6
- private static var shared : PusherWebsocketReactNative !
7
- private static var pusher : Pusher !
6
+ private var pusher : Pusher !
8
7
9
8
private var authorizerCompletionHandlers = [ String : ( [ String : String ] ) -> Void ] ( )
10
9
private var authorizerCompletionHandlerTimeout = 10 // seconds
@@ -13,12 +12,6 @@ import Foundation
13
12
private let authErrorType = " AuthError "
14
13
private let pusherEventPrefix = " PusherReactNative "
15
14
16
- override init ( ) {
17
- super. init ( )
18
-
19
- PusherWebsocketReactNative . shared = self
20
- }
21
-
22
15
override func supportedEvents( ) -> [ String ] ! {
23
16
return [ " \( pusherEventPrefix) :onConnectionStateChange " ,
24
17
" \( pusherEventPrefix) :onSubscriptionError " ,
@@ -33,19 +26,18 @@ import Foundation
33
26
34
27
private func callback( name: String , body: Any ) -> Void {
35
28
let pusherEventname = " \( pusherEventPrefix) : \( name) "
36
- PusherWebsocketReactNative . shared . sendEvent ( withName: pusherEventname, body: body)
29
+ self . sendEvent ( withName: pusherEventname, body: body)
37
30
}
38
31
39
32
func initialize( _ args: [ String : Any ] , resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
40
- if PusherWebsocketReactNative . pusher != nil {
41
- PusherWebsocketReactNative . pusher. unsubscribeAll ( )
42
- PusherWebsocketReactNative . pusher. disconnect ( )
33
+ if pusher != nil {
34
+ pusher. disconnect ( )
43
35
}
44
36
var authMethod : AuthMethod = . noMethod
45
37
if args [ " authEndpoint " ] is String {
46
38
authMethod = . endpoint( authEndpoint: args [ " authEndpoint " ] as! String )
47
39
} else if args [ " authorizer " ] is Bool {
48
- authMethod = . authorizer( authorizer: PusherWebsocketReactNative . shared )
40
+ authMethod = . authorizer( authorizer: self )
49
41
}
50
42
var host : PusherHost = . defaultHost
51
43
if args [ " host " ] is String {
@@ -85,23 +77,23 @@ import Foundation
85
77
useTLS: useTLS,
86
78
activityTimeout: activityTimeout
87
79
)
88
- PusherWebsocketReactNative . pusher = Pusher ( key: args [ " apiKey " ] as! String , options: options)
80
+ pusher = Pusher ( key: args [ " apiKey " ] as! String , options: options)
89
81
if args [ " maxReconnectionAttempts " ] is Int {
90
- PusherWebsocketReactNative . pusher. connection. reconnectAttemptsMax = ( args [ " maxReconnectionAttempts " ] as! Int )
82
+ pusher. connection. reconnectAttemptsMax = ( args [ " maxReconnectionAttempts " ] as! Int )
91
83
}
92
84
if args [ " maxReconnectGapInSeconds " ] is TimeInterval {
93
- PusherWebsocketReactNative . pusher. connection. maxReconnectGapInSeconds = ( args [ " maxReconnectGapInSeconds " ] as! TimeInterval )
85
+ pusher. connection. maxReconnectGapInSeconds = ( args [ " maxReconnectGapInSeconds " ] as! TimeInterval )
94
86
}
95
87
if args [ " pongTimeout " ] is Int {
96
- PusherWebsocketReactNative . pusher. connection. pongResponseTimeoutInterval = args [ " pongTimeout " ] as! TimeInterval / 1000.0
88
+ pusher. connection. pongResponseTimeoutInterval = args [ " pongTimeout " ] as! TimeInterval / 1000.0
97
89
}
98
90
99
91
if let authorizerTimeoutInSeconds = args [ " authorizerTimeoutInSeconds " ] as? Int {
100
- PusherWebsocketReactNative . shared . authorizerCompletionHandlerTimeout = authorizerTimeoutInSeconds
92
+ self . authorizerCompletionHandlerTimeout = authorizerTimeoutInSeconds
101
93
}
102
94
103
- PusherWebsocketReactNative . pusher. connection. delegate = PusherWebsocketReactNative . shared
104
- PusherWebsocketReactNative . pusher. bind ( eventCallback: onEvent)
95
+ pusher. connection. delegate = self
96
+ pusher. bind ( eventCallback: onEvent)
105
97
resolve ( nil )
106
98
}
107
99
@@ -110,7 +102,7 @@ import Foundation
110
102
}
111
103
112
104
public func fetchAuthValue( socketID: String , channelName: String , completionHandler: @escaping ( PusherAuth ? ) -> Void ) {
113
- PusherWebsocketReactNative . shared . callback ( name: " onAuthorizer " , body: [
105
+ self . callback ( name: " onAuthorizer " , body: [
114
106
" socketId " : socketID,
115
107
" channelName " : channelName
116
108
] )
@@ -126,9 +118,9 @@ import Foundation
126
118
authorizerCompletionHandlers [ key] = authCallback
127
119
128
120
// the JS thread might not call onAuthorizer – we need to cleanup the completion handler after timeout
129
- let timeout = DispatchTimeInterval . seconds ( PusherWebsocketReactNative . shared . authorizerCompletionHandlerTimeout)
121
+ let timeout = DispatchTimeInterval . seconds ( self . authorizerCompletionHandlerTimeout)
130
122
DispatchQueue . main. asyncAfter ( deadline: . now( ) + timeout) {
131
- if let storedAuthHandler = PusherWebsocketReactNative . shared . authorizerCompletionHandlers. removeValue ( forKey: key) {
123
+ if let storedAuthHandler = self . authorizerCompletionHandlers. removeValue ( forKey: key) {
132
124
storedAuthHandler ( [ " auth " : " <authorizer_timeout>:error " ] )
133
125
}
134
126
}
@@ -140,9 +132,9 @@ import Foundation
140
132
storedAuthHandler ( data)
141
133
}
142
134
}
143
-
135
+
144
136
public func changedConnectionState( from old: ConnectionState , to new: ConnectionState ) {
145
- PusherWebsocketReactNative . shared . callback ( name: " onConnectionStateChange " , body: [
137
+ self . callback ( name: " onConnectionStateChange " , body: [
146
138
" previousState " : old. stringValue ( ) ,
147
139
" currentState " : new. stringValue ( )
148
140
] )
@@ -164,7 +156,7 @@ import Foundation
164
156
type = authErrorType
165
157
}
166
158
167
- PusherWebsocketReactNative . shared . callback ( name: " onSubscriptionError " , body: [
159
+ self . callback ( name: " onSubscriptionError " , body: [
168
160
" message " : ( error != nil ) ? error!. localizedDescription : ( ( data != nil ) ? data! : error. debugDescription) ,
169
161
" type " : type,
170
162
" code " : code,
@@ -173,7 +165,7 @@ import Foundation
173
165
}
174
166
175
167
public func receivedError( error: PusherError ) {
176
- PusherWebsocketReactNative . shared . callback (
168
+ self . callback (
177
169
name: " onError " , body: [
178
170
" message " : error. message,
179
171
" code " : error. code ?? - 1 ,
@@ -183,7 +175,7 @@ import Foundation
183
175
}
184
176
185
177
public func failedToDecryptEvent( eventName: String , channelName: String , data: String ? ) {
186
- PusherWebsocketReactNative . shared . callback (
178
+ self . callback (
187
179
name: " onDecryptionFailure " , body: [
188
180
" eventName " : eventName,
189
181
" reason " : data
@@ -192,29 +184,29 @@ import Foundation
192
184
}
193
185
194
186
public func connect( _ resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
195
- PusherWebsocketReactNative . pusher. connect ( )
187
+ pusher. connect ( )
196
188
resolve ( nil )
197
189
}
198
190
199
191
public func disconnect( _ resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
200
- PusherWebsocketReactNative . pusher. disconnect ( )
192
+ pusher. disconnect ( )
201
193
resolve ( nil )
202
194
}
203
195
204
196
public func getSocketId( ) -> String ? {
205
- return PusherWebsocketReactNative . pusher. connection. socketId
197
+ return pusher. connection. socketId
206
198
}
207
199
208
200
func onEvent( event: PusherEvent ) {
209
201
var userId : String ? = nil
210
202
var mappedEventName : String ? = nil
211
203
if event. eventName == " pusher:subscription_succeeded " {
212
- if let channel = PusherWebsocketReactNative . pusher. connection. channels. findPresence ( name: event. channelName!) {
204
+ if let channel = pusher. connection. channels. findPresence ( name: event. channelName!) {
213
205
userId = channel. myId
214
206
}
215
207
mappedEventName = " pusher_internal:subscription_succeeded "
216
208
}
217
- PusherWebsocketReactNative . shared . callback (
209
+ self . callback (
218
210
name: " onEvent " , body: [
219
211
" channelName " : event. channelName,
220
212
" eventName " : mappedEventName ?? event. eventName,
@@ -227,25 +219,25 @@ import Foundation
227
219
func subscribe( _ channelName: String , resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
228
220
if channelName. hasPrefix ( " presence- " ) {
229
221
let onMemberAdded : ( PusherPresenceChannelMember ) -> ( ) = { user in
230
- PusherWebsocketReactNative . shared . callback ( name: " onMemberAdded " , body: [
222
+ self . callback ( name: " onMemberAdded " , body: [
231
223
" channelName " : channelName,
232
224
" user " : [ " userId " : user. userId, " userInfo " : user. userInfo ]
233
225
] )
234
226
}
235
227
let onMemberRemoved : ( PusherPresenceChannelMember ) -> ( ) = { user in
236
- PusherWebsocketReactNative . shared . callback ( name: " onMemberRemoved " , body: [
228
+ self . callback ( name: " onMemberRemoved " , body: [
237
229
" channelName " : channelName,
238
230
" user " : [ " userId " : user. userId, " userInfo " : user. userInfo ]
239
231
] )
240
232
}
241
- PusherWebsocketReactNative . pusher. subscribeToPresenceChannel (
233
+ pusher. subscribeToPresenceChannel (
242
234
channelName: channelName,
243
235
onMemberAdded: onMemberAdded,
244
236
onMemberRemoved: onMemberRemoved
245
237
)
246
238
} else {
247
239
let onSubscriptionCount : ( Int ) -> ( ) = { subscriptionCount in
248
- PusherWebsocketReactNative . shared . callback (
240
+ self . callback (
249
241
name: " onEvent " , body: [
250
242
" channelName " : channelName,
251
243
" eventName " : " pusher_internal:subscription_count " ,
@@ -256,19 +248,19 @@ import Foundation
256
248
]
257
249
)
258
250
}
259
- PusherWebsocketReactNative . pusher. subscribe ( channelName: channelName,
260
- onSubscriptionCountChanged: onSubscriptionCount)
251
+ pusher. subscribe ( channelName: channelName,
252
+ onSubscriptionCountChanged: onSubscriptionCount)
261
253
}
262
254
resolve ( nil )
263
255
}
264
256
265
257
func unsubscribe( _ channelName: String , resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
266
- PusherWebsocketReactNative . pusher. unsubscribe ( channelName)
258
+ pusher. unsubscribe ( channelName)
267
259
resolve ( nil )
268
260
}
269
261
270
262
func trigger( _ channelName: String , eventName: String , data: Any , resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
271
- if let channel = PusherWebsocketReactNative . pusher. connection. channels. find ( name: channelName) {
263
+ if let channel = pusher. connection. channels. find ( name: channelName) {
272
264
channel. trigger ( eventName: eventName, data: data)
273
265
}
274
266
resolve ( nil )
0 commit comments