Проблема с сообщениями, появляющимися при использовании server-pu sh с firebase - PullRequest
0 голосов
/ 11 февраля 2020

Я реализую чат-клиент gui с server-pu sh функциональностью в python с использованием базы данных Google . Вы должны быть подписчиком, чтобы иметь возможность отправлять сообщения. У меня есть две глобальные переменные:

messages_stream = db.child("messages").stream(streamHandler)
subscribed = False

Где подписан отслеживает, если вы подписаны, а messages_stream подписывается на толчки относительно тега messages.

У меня есть streamHandler , который просматривает данные:

def streamHandler(incomingData):
    if incomingData["event"] == "put":
        if incomingData["path"] == "/":
            # This is the very firstreading just after
            # subscription: we get all messages_stream
            # or none (if no messages exists)
            if incomingData["data"] != None:
                for key in incomingData["data"]:
                    message = incomingData["data"][key]
                    handleMessage(message)         
        else:
            # Not the first reading
            # Someone wrote a new message that we just got
            message = incomingData["data"]
            handleMessage(message)

С моей функцией handleMessage я извлекаю сообщение и имя и отображать ее в функции gui:

def handleMessage(message):
    txt = list(message.values())[0]
    name = list(message.values())[1]
    printToMessages(name + ":" + " " + txt)

My sendMessage вызывается, когда я нажимаю кнопку отправки, добавляю сообщение и вызываю streamHandler:

def sendMessage(master):
    global subscribed
    global messages_stream
    if subscribed == True:
        message = g_app.textIn.get()
        name = g_app.ipPort.get()
        myMessage = {"name": name, "message": message}
        db.child("messages").push(myMessage)
        messages_stream
    else:
        printToMessages("Not subscribed!")

Когда я запускаю это, сначала все работает нормально, но когда я перезагружаю его во второй раз, выскакивают сообщения, которые я отправил в первый раз. Мой вопрос, как я могу предотвратить это?

Спасибо

...