Попытка создать систему чата Python с лобби, функцией произвольного подключения и шифрованием - PullRequest
0 голосов
/ 10 мая 2018

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}))

Моя система работает нормально, как есть, только эти части трудно обойти. Кроме того, файл "лоббирования" и функции в файлах сервера и клиента работают не полностью, но я сам не могу найти ошибку.

...