Skip to content

Commit 47071da

Browse files
authored
Revert "fix: use a single instance of PusherWebsocketReactNative (#79)"
This reverts commit 7b9c723.
1 parent b5ec040 commit 47071da

File tree

1 file changed

+33
-41
lines changed

1 file changed

+33
-41
lines changed

ios/PusherWebsocketReactNative.swift

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import Foundation
33

44
@objc(PusherWebsocketReactNative)
55
@objcMembers class PusherWebsocketReactNative: RCTEventEmitter, PusherDelegate, Authorizer {
6-
private static var shared: PusherWebsocketReactNative!
7-
private static var pusher: Pusher!
6+
private var pusher: Pusher!
87

98
private var authorizerCompletionHandlers = [String: ([String:String]) -> Void]()
109
private var authorizerCompletionHandlerTimeout = 10 // seconds
@@ -13,12 +12,6 @@ import Foundation
1312
private let authErrorType = "AuthError"
1413
private let pusherEventPrefix = "PusherReactNative"
1514

16-
override init() {
17-
super.init()
18-
19-
PusherWebsocketReactNative.shared = self
20-
}
21-
2215
override func supportedEvents() -> [String]! {
2316
return ["\(pusherEventPrefix):onConnectionStateChange",
2417
"\(pusherEventPrefix):onSubscriptionError",
@@ -33,19 +26,18 @@ import Foundation
3326

3427
private func callback(name:String, body:Any) -> Void {
3528
let pusherEventname = "\(pusherEventPrefix):\(name)"
36-
PusherWebsocketReactNative.shared.sendEvent(withName:pusherEventname, body:body)
29+
self.sendEvent(withName:pusherEventname, body:body)
3730
}
3831

3932
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()
4335
}
4436
var authMethod:AuthMethod = .noMethod
4537
if args["authEndpoint"] is String {
4638
authMethod = .endpoint(authEndpoint: args["authEndpoint"] as! String)
4739
} else if args["authorizer"] is Bool {
48-
authMethod = .authorizer(authorizer: PusherWebsocketReactNative.shared)
40+
authMethod = .authorizer(authorizer: self)
4941
}
5042
var host:PusherHost = .defaultHost
5143
if args["host"] is String {
@@ -85,23 +77,23 @@ import Foundation
8577
useTLS: useTLS,
8678
activityTimeout: activityTimeout
8779
)
88-
PusherWebsocketReactNative.pusher = Pusher(key: args["apiKey"] as! String, options: options)
80+
pusher = Pusher(key: args["apiKey"] as! String, options: options)
8981
if args["maxReconnectionAttempts"] is Int {
90-
PusherWebsocketReactNative.pusher.connection.reconnectAttemptsMax = (args["maxReconnectionAttempts"] as! Int)
82+
pusher.connection.reconnectAttemptsMax = (args["maxReconnectionAttempts"] as! Int)
9183
}
9284
if args["maxReconnectGapInSeconds"] is TimeInterval {
93-
PusherWebsocketReactNative.pusher.connection.maxReconnectGapInSeconds = (args["maxReconnectGapInSeconds"] as! TimeInterval)
85+
pusher.connection.maxReconnectGapInSeconds = (args["maxReconnectGapInSeconds"] as! TimeInterval)
9486
}
9587
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
9789
}
9890

9991
if let authorizerTimeoutInSeconds = args["authorizerTimeoutInSeconds"] as? Int {
100-
PusherWebsocketReactNative.shared.authorizerCompletionHandlerTimeout = authorizerTimeoutInSeconds
92+
self.authorizerCompletionHandlerTimeout = authorizerTimeoutInSeconds
10193
}
10294

103-
PusherWebsocketReactNative.pusher.connection.delegate = PusherWebsocketReactNative.shared
104-
PusherWebsocketReactNative.pusher.bind(eventCallback: onEvent)
95+
pusher.connection.delegate = self
96+
pusher.bind(eventCallback: onEvent)
10597
resolve(nil)
10698
}
10799

@@ -110,7 +102,7 @@ import Foundation
110102
}
111103

112104
public func fetchAuthValue(socketID: String, channelName: String, completionHandler: @escaping (PusherAuth?) -> Void) {
113-
PusherWebsocketReactNative.shared.callback(name:"onAuthorizer", body: [
105+
self.callback(name:"onAuthorizer", body: [
114106
"socketId": socketID,
115107
"channelName": channelName
116108
])
@@ -126,9 +118,9 @@ import Foundation
126118
authorizerCompletionHandlers[key] = authCallback
127119

128120
// 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)
130122
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) {
132124
storedAuthHandler(["auth": "<authorizer_timeout>:error"])
133125
}
134126
}
@@ -140,9 +132,9 @@ import Foundation
140132
storedAuthHandler(data)
141133
}
142134
}
143-
135+
144136
public func changedConnectionState(from old: ConnectionState, to new: ConnectionState) {
145-
PusherWebsocketReactNative.shared.callback(name:"onConnectionStateChange", body:[
137+
self.callback(name:"onConnectionStateChange", body:[
146138
"previousState": old.stringValue(),
147139
"currentState": new.stringValue()
148140
])
@@ -164,7 +156,7 @@ import Foundation
164156
type = authErrorType
165157
}
166158

167-
PusherWebsocketReactNative.shared.callback(name:"onSubscriptionError", body:[
159+
self.callback(name:"onSubscriptionError", body:[
168160
"message": (error != nil) ? error!.localizedDescription : ((data != nil) ? data! : error.debugDescription),
169161
"type": type,
170162
"code": code,
@@ -173,7 +165,7 @@ import Foundation
173165
}
174166

175167
public func receivedError(error: PusherError) {
176-
PusherWebsocketReactNative.shared.callback(
168+
self.callback(
177169
name:"onError", body:[
178170
"message": error.message,
179171
"code": error.code ?? -1,
@@ -183,7 +175,7 @@ import Foundation
183175
}
184176

185177
public func failedToDecryptEvent(eventName: String, channelName: String, data: String?) {
186-
PusherWebsocketReactNative.shared.callback(
178+
self.callback(
187179
name:"onDecryptionFailure", body:[
188180
"eventName": eventName,
189181
"reason": data
@@ -192,29 +184,29 @@ import Foundation
192184
}
193185

194186
public func connect(_ resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
195-
PusherWebsocketReactNative.pusher.connect()
187+
pusher.connect()
196188
resolve(nil)
197189
}
198190

199191
public func disconnect(_ resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
200-
PusherWebsocketReactNative.pusher.disconnect()
192+
pusher.disconnect()
201193
resolve(nil)
202194
}
203195

204196
public func getSocketId() -> String? {
205-
return PusherWebsocketReactNative.pusher.connection.socketId
197+
return pusher.connection.socketId
206198
}
207199

208200
func onEvent(event:PusherEvent) {
209201
var userId:String? = nil
210202
var mappedEventName:String? = nil
211203
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!) {
213205
userId = channel.myId
214206
}
215207
mappedEventName = "pusher_internal:subscription_succeeded"
216208
}
217-
PusherWebsocketReactNative.shared.callback(
209+
self.callback(
218210
name:"onEvent",body:[
219211
"channelName": event.channelName,
220212
"eventName": mappedEventName ?? event.eventName,
@@ -227,25 +219,25 @@ import Foundation
227219
func subscribe(_ channelName:String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
228220
if channelName.hasPrefix("presence-") {
229221
let onMemberAdded:(PusherPresenceChannelMember) -> () = { user in
230-
PusherWebsocketReactNative.shared.callback(name:"onMemberAdded", body: [
222+
self.callback(name:"onMemberAdded", body: [
231223
"channelName": channelName,
232224
"user": ["userId": user.userId, "userInfo": user.userInfo ]
233225
])
234226
}
235227
let onMemberRemoved:(PusherPresenceChannelMember) -> () = { user in
236-
PusherWebsocketReactNative.shared.callback(name:"onMemberRemoved", body: [
228+
self.callback(name:"onMemberRemoved", body: [
237229
"channelName": channelName,
238230
"user": ["userId": user.userId, "userInfo": user.userInfo ]
239231
])
240232
}
241-
PusherWebsocketReactNative.pusher.subscribeToPresenceChannel(
233+
pusher.subscribeToPresenceChannel(
242234
channelName: channelName,
243235
onMemberAdded: onMemberAdded,
244236
onMemberRemoved: onMemberRemoved
245237
)
246238
} else {
247239
let onSubscriptionCount:(Int) -> () = { subscriptionCount in
248-
PusherWebsocketReactNative.shared.callback(
240+
self.callback(
249241
name:"onEvent",body:[
250242
"channelName": channelName,
251243
"eventName": "pusher_internal:subscription_count",
@@ -256,19 +248,19 @@ import Foundation
256248
]
257249
)
258250
}
259-
PusherWebsocketReactNative.pusher.subscribe(channelName: channelName,
260-
onSubscriptionCountChanged: onSubscriptionCount)
251+
pusher.subscribe(channelName: channelName,
252+
onSubscriptionCountChanged: onSubscriptionCount)
261253
}
262254
resolve(nil)
263255
}
264256

265257
func unsubscribe(_ channelName:String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
266-
PusherWebsocketReactNative.pusher.unsubscribe(channelName)
258+
pusher.unsubscribe(channelName)
267259
resolve(nil)
268260
}
269261

270262
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) {
272264
channel.trigger(eventName: eventName, data: data)
273265
}
274266
resolve(nil)

0 commit comments

Comments
 (0)