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