This repository was archived by the owner on Jun 13, 2023. It is now read-only.
This repository was archived by the owner on Jun 13, 2023. It is now read-only.
iOS Swift LiveQuery not receiving events #105
Closed
Description
Hello I have a subscription to a query that signals the subscribed event but does not signal any other event.
When I run the following code I get the "subbed" message. And on my remote server I can see the following logs.
2017-03-12T22:31:11.565923+00:00 app[web.1]: �[36mverbose�[39m: Push Response : "{\"op\":\"subscribed\",\"clientId\":9,\"requestId\":1}"
2017-03-12T22:31:11.566125+00:00 app[web.1]: �[36mverbose�[39m: Create client 9 new subscription: 1
2017-03-12T22:31:11.566293+00:00 app[web.1]: �[36mverbose�[39m: Current client number: 1
Code:
Swift code:
class ActiveLetterLoader {
var subscription: Subscription<RemoteLetter>?
let liveQueryClient = ParseLiveQuery.Client()
init() {
self.register()
}
func register() {
RemoteLetter.registerSubclass()
let remoteQ: PFQuery<RemoteLetter> = RemoteLetter.query()!.whereKey("oid", notEqualTo: "whatever") as! PFQuery<RemoteLetter>
remoteQ.findObjectsInBackground { (objects, errors) in
print(objects)
print(errors)
}
self.subscription = liveQueryClient.subscribe(remoteQ).handleSubscribe { [weak self] (_) in
print("Subbed")
}.handleEvent { [weak self] (_, event) in
self?.handleEvent(event: event)
}
}
func handleEvent(event: Event<RemoteLetter>) {
// Make sure we're on main thread
if Thread.current != Thread.main {
return DispatchQueue.main.async { [weak self] _ in
self?.handleEvent(event: event)
}
}
switch event {
case .created(let obj),
.entered(let obj):
print("Object is entered!")
case .updated(let obj):
print("Object is updated!")
case .deleted(let obj),
.left(let obj):
print("Object is deleted!")
}
}
}
class RemoteLetter: PFObject, PFSubclassing {
@NSManaged var oid: NSString?
@NSManaged var clat: NSNumber?
@NSManaged var clon: NSNumber?
@NSManaged var olat: NSNumber?
@NSManaged var olon: NSNumber?
override init(){
super.init()
}
init(letter: ActiveLetter) {
super.init()
self.oid = letter.objectId as NSString
self.clat = letter.latitude as NSNumber
self.clon = letter.longitude as NSNumber
self.olat = letter.original_latitude as NSNumber
self.olon = letter.original_longitude as NSNumber
self.acl = make_acl()
}
func make_acl() -> PFACL{
let acl = PFACL()
acl.getPublicReadAccess = true
acl.getPublicWriteAccess = true
return acl
}
class func parseClassName() -> String {
return "ActiveLetters"
}
}
A sample object on my remote database
{
"_id": "A5Y8dPfalr",
"clat": 51.51613894350632,
"olon": -0.142,
"clon": -0.1404333170731588,
"oid": "51.516/-0.142",
"olat": 51.516,
"_wperm": [
"*"
],
"_rperm": [
"*"
],
"_acl": {
"*": {
"w": true,
"r": true
}
},
"_created_at": {
"$date": "2017-03-12T22:10:16.686Z"
},
"_updated_at": {
"$date": "2017-03-12T22:10:16.686Z"
}
}
I am connecting to a remote database that I set up on Heroku with the parse server example.
The config for that server is
{
"name": "parse-server-example",
"version": "1.4.0",
"description": "An example Parse API server using the parse-server module",
"main": "index.js",
"repository": {
"type": "git",
"url": "https://github.com/ParsePlatform/parse-server-example"
},
"license": "MIT",
"dependencies": {
"express": "~4.11.x",
"kerberos": "~0.0.x",
"parse": "~1.8.0",
"parse-server": "~2.3.6"
},
"scripts": {
"start": "node index.js"
},
"engines": {
"node": ">=4.3"
}
}
Locally my app I am using the following dependancy versions.
- Bolts (1.8.4)
- Bolts-Swift (1.3.0)
- Parse (1.14.2)
- ParseLiveQuery (2.0.0)
- Starscream (2.0.3)
Metadata
Metadata
Assignees
Labels
No labels