EDIT
В настоящее время я работаю над системой чата на основе Python. Я разместил вопрос ниже, однако отредактировал его, чтобы он был более узким относительно того, что я ищу. Система имеет функцию по умолчанию, которая всякий раз, когда она вводится в состоянии LOGGED_IN, если это не команда, отображается меню системы чата.
Моя проблема заключается в том, что я работаю со случайной функцией, и, несмотря на то, что функция существует, меню продолжает появляться, я подозреваю, что код на стороне клиента здесь виноват, но я не могу определить свою ошибку, вот выдержка из кода , полный файл связан ниже:
elif my_msg[0:6]=="random":
mysend(self.s,json.dumps({"action":"random"}))
allresults = json.loads(myrecv(self.s))["results"]
result = allresults[0]
user=allresults[1]
if result: #==True
self.out_msg+="Peer Found\n"
self.out_msg+="Connecting you now...\n\n"
self.out_msg+='-----------------------------------\n'
if self.connect_to(user) == True:
self.state = S_CHATTING
if my_msg[7:]=="anon":
self.out_msg += 'Connected to anonymous user. Chat away!\n\n'
else:
self.out_msg += 'Connect to ' + user + '. Chat away!\n\n'
self.out_msg += '-----------------------------------\n'
else:
self.out_msg += 'An error occurred, please try again.\n'
else:
self.out_msg+="Peer not found, please try again later"
Любая помощь очень ценится, я в настоящее время отлаживаю, но подумал, что кто-то может увидеть то, что я не вижу
КОНЕЦ РЕДАКТИРОВАНИЯ
В настоящее время я работаю над системой чата, основанной на Python, с некоторыми друзьями, чтобы узнать больше о внутренней работе. Вот некоторые из ключевых функций, которые мы пытались реализовать и с которыми работаем: - лобби (чат, в который люди всегда могут настроиться) - функция случайного подключения (которая случайным образом соединяет пользователей, вроде как omegle) - и шифрование. Этот последний бит не должен быть очень сложным, но если у вас есть какие-либо рекомендации, как сделать его лучше, я был бы рад услышать их.
Файлы находятся здесь , и я был бы очень признателен за любые отзывы или информацию об ошибках, возникающих в лобби и случайных функциях!
Примечание: файлы для рассмотрения:
- chat_lobby.py (Класс лобби-чата)
- chat_group.py (Общий класс группового чата)
- chat_server_student.py (на стороне сервера)
- client_state_machine_student.py (на стороне клиента)
Ниже приведена случайная функция со стороны сервера
elif msg["action"]=="random":
name=self.logged_sock2name[from_sock]
self.availableUsers = self.group.listloners()
self.consent = False
while (len(self.availableUsers)>0 and self.consent != True):
to_name = random.choice(availableUsers)
to_sock = self.logged_name2sock[to_name]
mysend(to_sock, json.dumps({"action":"consent"}))
#waiting for response
self.consent= json.loads(myrecv(self.s))["consent"]
if self.consent == True:
result= True
user = self.logged_sock2name[to_sock]
else:
result = False
user = ""
self.availableUsers.remove(to_name)
mysend(from_sock, json.dumps({"action":"random", "results":[result,user]}))
а вот случайная функция со стороны клиента:
elif my_msg[0:6]=="random":
mysend(self.s,json.dumps({"action":"random"}))
allresults = json.loads(myrecv(self.s))["results"]
result = allresults[0]
user=allresults[1]
if result: #==True
self.out_msg+="Peer Found\n"
self.out_msg+="Connecting you now...\n\n"
self.out_msg+='-----------------------------------\n'
if self.connect_to(user) == True:
self.state = S_CHATTING
if my_msg[7:]=="anon":
self.out_msg += 'Connected to anonymous user. Chat away!\n\n'
else:
self.out_msg += 'Connect to ' + user + '. Chat away!\n\n'
self.out_msg += '-----------------------------------\n'
else:
self.out_msg += 'An error occurred, please try again.\n'
else:
self.out_msg+="Peer not found, please try again later"
и
if len(peer_msg) > 0:
peer_msg = json.loads(peer_msg)
consent=False
if peer_msg["action"] == "connect":
self.connect_to(peer_msg["from"])
self.set_state(S_CHATTING)
elif peer_msg["action"]=="consent":
self.out_msg += "A random user wants to connect with you?\n"
self.out_msg += "Would you like to accept the connection? (y or n)\n"
while my_msg != "y" and my_msg!="n":
self.out_msg += "Please only reply with 'y' or 'n'\n"
if my_msg=="y":
self.connect_to(peer_msg["from"])
self.set_state(S_CHATTING)
consent=True
mysend(self.s,json.dumps({"message":consent}))
self.out_msg+="Connecting you now...\n\n"
else:
consent=False
mysend(self.s, json.dumps({"action":"random", "consent":consent}))
Моя система работает нормально, как есть, только эти части трудно обойти.
Кроме того, файл "лоббирования" и функции в файлах сервера и клиента работают не полностью, но я сам не могу найти ошибку.