Skip to content
This repository was archived by the owner on Jun 13, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Sources/ParseLiveQuery/Client.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ open class Client: NSObject {
let clientKey: String?

var socket: SRWebSocket?
var userDisconnected = false
public var userDisconnected = false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this need to be made public - this only controls whether or not 'disconnect()' was explicitly called, and the person using the Client should know this already, no?

Copy link
Contributor Author

@agordeev agordeev Oct 15, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I use this property in my own project to automatically reconnect to the socket after the Internet connection is available again. Otherwise I don't know any way to know whether the client is connected or not.


// This allows us to easily plug in another request ID generation scheme, or more easily change the request id type
// if needed (technically this could be a string).
Expand Down Expand Up @@ -151,7 +151,8 @@ extension Client {
subscriptions.append(subscriptionRecord)

if socket?.readyState == .OPEN {
_ = sendOperationAsync(.subscribe(requestId: subscriptionRecord.requestId, query: query as! PFQuery<PFObject>))
_ = sendOperationAsync(.subscribe(requestId: subscriptionRecord.requestId, query: query as! PFQuery<PFObject>,
sessionToken: PFUser.current()?.sessionToken))
} else if socket == nil || socket?.readyState != .CONNECTING {
if !userDisconnected {
reconnect()
Expand Down
7 changes: 4 additions & 3 deletions Sources/ParseLiveQuery/Internal/ClientPrivate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ extension Client: SRWebSocketDelegate {
}

public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
// TODO: Add support for session token and user authetication.
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: ""))
let sessionToken = PFUser.current()?.sessionToken ?? ""
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: sessionToken))
}

public func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {
Expand Down Expand Up @@ -227,8 +227,9 @@ extension Client {

switch response {
case .connected:
let sessionToken = PFUser.current()?.sessionToken
self.subscriptions.forEach {
_ = self.sendOperationAsync(.subscribe(requestId: $0.requestId, query: $0.query))
_ = self.sendOperationAsync(.subscribe(requestId: $0.requestId, query: $0.query, sessionToken: sessionToken))
}

case .redirect:
Expand Down
10 changes: 7 additions & 3 deletions Sources/ParseLiveQuery/Internal/Operation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,20 @@ import Parse

enum ClientOperation {
case connect(applicationId: String, sessionToken: String)
case subscribe(requestId: Client.RequestId, query: PFQuery<PFObject>)
case subscribe(requestId: Client.RequestId, query: PFQuery<PFObject>, sessionToken: String?)
case unsubscribe(requestId: Client.RequestId)

var JSONObjectRepresentation: [String : Any] {
switch self {
case .connect(let applicationId, let sessionToken):
return [ "op": "connect", "applicationId": applicationId, "sessionToken": sessionToken ]

case .subscribe(let requestId, let query):
return [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query) ]
case .subscribe(let requestId, let query, let sessionToken):
var result: [String: Any] = [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query) ]
if let sessionToken = sessionToken {
result["sessionToken"] = sessionToken
}
return result

case .unsubscribe(let requestId):
return [ "op": "unsubscribe", "requestId": requestId.value ]
Expand Down