Я реализую чат-клиент 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!")
Когда я запускаю это, сначала все работает нормально, но когда я перезагружаю его во второй раз, выскакивают сообщения, которые я отправил в первый раз. Мой вопрос, как я могу предотвратить это?
Спасибо