A questão é a seguinte: eu tenho que fazer um dicionário colaborativo onde as pessoas procuram por palavras e o servidor retorna o significado. Mas, se as pessoas não acharem as palavras, elas podem cadastrar um nova, pondo o termo e o significado. Ou seja: o socket pode receber duas requisições: buscar e cadastrar. O problema é que não sei como implementar os dois no servidor, separando o que o servidor vai fazer numa hora e em outra, quando o cliente quiser. Até agora, o servidor está dessa forma:
import socket
import json
dicty = {
'the' : 'o, a, os, as',
'hello' : 'ola',
'hi' : 'oi',
'good' : 'bom',
'ugly' : 'feio',
'bad' : 'ruim, mal',
'pretty' : 'lindo(a)',
'happy' : 'feliz',
'sad' : 'triste',
'yes' : 'sim',
'no' : 'nao'
}
def adiciona(word, palavra, dicty):
with open('book', 'w', encoding='utf-8') as f:
dicty[word] = palavra
json.dump(dicty, f)
with open('book', 'r') as f:
dicty = json.load(f)
print(dicty)
port = 5000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = socket.gethostbyname(socket.gethostname())
sock.bind((host, port))
while True:
data, adress = sock.recvfrom(4000)
text = data.decode('ascii')
teste = text in dicty
if teste==1:
sig = dicty.get(str(text))
sock.sendto((sig.encode('ascii')), adress)
if teste==0:
sock.sendto(('0'.encode('ascii')),adress)
A grande questão é que o servidor adiciona, mas se eu chamar dentro do laço "while true" o módulo "adiciona()", ele vai fazer os dois juntos (buscar e cadastrar). Como organizar isso?