Skip to content
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
@seanfeeley

Description

@seanfeeley

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions