I'm trying to create a chat, but subscription doesn't work. I see server gets my messages in logs, I can send message, get messages with request, not query as needed

import Parse
import ParseLiveQuery

final class ViewController: UIViewController {
    var user: ECUser?
    var roomData: RoomData?
    var client = ParseLiveQuery.Client()
    var subscription : Subscription<PFObject>!
    let messageQuery = PFQuery(className: "Message")

    override func viewDidLoad() {
        super.viewDidLoad()
        self.login()
    }

    func observeMessage() {
        client.shouldPrintWebSocketLog = true
        client.shouldPrintWebSocketTrace = true

        subscription = client.subscribe(messageQuery)
            .handle(Event.created) { _, message in
                print("MY LOG: \(message)")
            }
            .handle(Event.deleted, { query, message in
                print("MY LOG: \(message)")
            })
            .handle(Event.updated, { query, message in
                print("MY LOG: \(message)")
            })
            .handle(Event.entered, { query, message in
                print("MY LOG: \(message)")
            })
            .handle(Event.left, { query, message in
                print("MY LOG: \(message)")
            })
    }

    private func initRoom() {
        let dataDictionary: [String: String] = [
            "hostname": "streaming-001-stand.edgestream.ru",
            "roomId": "serv27epdohpo",
            "type": "call"
        ]

        PFCloud.callFunction(inBackground: "initRoom", withParameters: dataDictionary) { (data, err) in
            guard err == nil else {
                print(err)
                return
            }
            guard let data = data as? [String: String] else { return }

            self.roomData = RoomData(id: data["id"], roomId: data["roomId"], type: data["type"])
            self.observeMessage()
        }
    }

    private func login() {
        let data: [String: Any] = [
            "authData": [
                "id": "XXX",
                "access_token": "XXX"
            ],
            "name": "Maksim",
            "role": "participant"
        ]

        PFCloud.callFunction(inBackground: "meetLogin", withParameters: data) {(data, err) in
            if err != nil {
                print(err!)
            } else {
                if let tokenData = data as? [String: String], let sessionToken = tokenData["sessionToken"] {
                    ECUser.become(inBackground: sessionToken) {(data, error) in
                        guard error == nil, let data else {
                            print(error)
                            return
                        }
                        self.initRoom()
                    }
                }
            }
        }
    }

    @IBAction func listen(_ sender: Any) {
        let messageQuery = PFQuery(className: "Message")
        messageQuery.limit = 1
        messageQuery.order(byDescending: "createdAt")
        messageQuery.includeKey("sender")
        messageQuery.findObjectsInBackground { (messages: [PFObject]?, error: Error?) in
            if let error = error {
                print("Error: \(error.localizedDescription)")
            } else if let messages = messages?.reversed() {
                for message in messages {
                    print(message)
                    if let content = message["content"] as? String, let sender = message["sender"] as? PFUser {
                        print("Sender: \(sender["name"] as? String)")
                        print("Message: \(content)")
                    }
                }
            }
        }
    }

    @IBAction func sendMessage(_ sender: Any) {
        let message = [
            "content": "321",
            "roomObjectId": self.roomData?.id!,
            "status": "fulfilled"
        ]

        PFCloud.callFunction(inBackground: "createMessage", withParameters: message) { (data, err) in
            guard err == nil else {
                print(err)
                return
            }
        }
    }
}

Hi there! I'm trying to create a chat, but subscription doesn't work. I see server gets my messages in logs, I can send message, get messages with request, not query as needed

0

There are 0 best solutions below