Пример #1
0
    def connect(self):
        '''
		организация  соединения, создание сообщения серверу
		:return:
		'''
        self.sock = socket(AF_INET, SOCK_STREAM)
        self.sock.connect((option.address, option.port))
        print('GOOD! соединение установлено... ')

        #	формируем json данные приветствия и посылаем их серверу
        presence[USER][ACCOUNT_NAME] = option.user
        send_msg(self.sock, presence)
        print('послали данные приветствия... ')

        # принимаем данные (подтверждение) от сервера
        response = get_msg(self.sock)
        # print('приняли ответ от сервера')
        if response:
            print("YATA! =) Принята проверка от сервера: %s\n" % response)
        else:
            print("Нет ответа от сервера, что-то пошло не так...\n")

        # проверяем ответ и возвращем его
        # result_response = check_response(response)
        return response
Пример #2
0
def mainloop():
    #inputs = [server]
    global inputs
    inputs = {}
    outputs = []
    global conn
    conn = ''
    ''' Основной цикл обработки запросов клиентов '''
    ##################################################

    while True:
        try:
            # принимаем запросы на соединение
            conn, addr = server.accept()
            # принимаем приветствие от клиентов
            presence = get_msg(conn)
            print('... получено приветствие от клиента: %s' %
                  presence)  # DEBUG
            # проверяем тип сообщения
            chk_presence = check_msg(presence)
            # если тип - привествие - посылем код ответа клиенту
            if chk_presence:
                response['status'] = OK
                conn_user = presence['user']['account_name']
                response['to'] = conn_user
                print('... отправляем ответ клиенту на приветствие ...')
                print('response: %s' % response)
                send_msg(conn, response)
                global user
                user = presence['user']['account_name']
            else:
                print('<AHTUNG> some problem with presence...')

        except OSError as e:
            pass  # Таймаут вышел

        else:
            print(
                "<<||>>  Получен запрос на соединение от {}, user: {}".format(
                    str(addr), conn_user))
            # добавляем входящее соединение в список (словарь!)
            ## + печатаем список соединений с пользователем
            inputs.update({conn: conn_user})
            for k, u in inputs.items():
                print('INPUTS: {}:{}'.format(k, u))
        finally:
            # проверка событий ввода-вывода
            wait = 0
            readable = []
            writible = []
            try:
                readable, writable, exceptional = select.select(
                    inputs, inputs, [], wait)
            except:
                pass  # ничего не делаем, если клиент отключился

            requests = read_messages(readable, inputs)  # принимаем сообщения
            send_messages(requests, writable,
                          inputs)  # отправляем сообщения всем
Пример #3
0
def mainloop():
    inputs = [server]
    outputs = []
    ''' Основной цикл обработки запросов клиентов '''
    ##################################################

    while True:
        try:
            # принимаем запросы на соединение
            conn, addr = server.accept()
            # принимаем приветствие от клиентов
            presence = get_msg(conn)
            print('... получено приветствие от клиента: %s' %
                  presence)  # DEBUG
            # проверяем тип сообщения
            chk_presence = check_msg(presence)
            # если тип - привествие - посылем код ответа клиенту
            if chk_presence:
                response['status'] = OK
                response['to'] = presence['user']['account_name']
                print('... отправляем ответ клиенту на приветствие ...')
                print('response: %s' % response)
                send_msg(conn, response)
                global user
                user = presence['user']['account_name']
            else:
                print('<AHTUNG> some problem with presence...')

        except OSError as e:
            pass  # Таймаут вышел

        else:
            print("<<||>>  Получен запрос на соединение от %s" % str(addr))
            # добавляем входящее соединение в список
            inputs.append(conn)
        finally:
            # проверка событий ввода-вывода
            wait = 0
            readable = []
            writible = []
            try:
                readable, writable, exceptional = select.select(
                    inputs, inputs, [], wait)
            except:
                pass  # ничего не делаем, если клиент отключился

            requests = read_messages(readable, inputs)  # принимаем сообщения
            send_messages(requests, writable,
                          inputs)  # отправляем сообщения всем
Пример #4
0
def read_messages(read_clients, all_clients):
    # входящие сообщения
    messages = []
    for s in read_clients:
        try:
            # получаем входящие сообщения и добавляем в список
            inc_msg = get_msg(s)
            messages.append(inc_msg)
            print(22)
        except:
            print('UPS! клиент {}{} отключился'.format(s.fileno(),
                                                       s.getpeername()))
            all_clients.remove(s)

    return messages  # возвращаем список сообщений
Пример #5
0
    def write_messages(self):
        # основной цикл (работа с сообщениями)
        if option.write_client == 'yes':
            while True:
                # посылаем сообщение в чат (общий) в цикле
                my_msg = input(
                    '==> Вы хотите отправить сообщение (y)? получить лист контактов (list)? Для выхода жми exit!(e): '
                )
                if my_msg == 'y':
                    # Определяем адресата сообщения
                    chat_msg[TO] = input('Кому отправить сообщение: ')
                    # формируем сообщение в словарь
                    chat_msg[MESSAGE] = input('Введите текст сообщения: ')
                    # посылаем словарь серверу
                    chat_msg[FROM] = option.user
                    print('message_test: %s' % chat_msg)
                    send_msg(self.sock, chat_msg)
                # получаем список контактов
                elif my_msg == 'list':
                    try:
                        #put_contacts[TO] = option.user
                        contacts = self.get_cont()
                        print(contacts)  # debug
                    except Exception as e:
                        print(e)
                elif my_msg == 'e':
                    print('EXIT!')
                    self.sock.close()
                    exit()
                else:
                    print('ошибка при отправлении сообщения в чат\n')
                    self.sock.close()
                    exit()

        while True:
            # принимаем сообщения из чата
            if option.read_client == 'yes':
                while True:
                    print('ОК, ждём входящих')
                    response = get_msg(self.sock)
                    # print('p_1')
                    print('входящее сообщение: "%s"' % response)
            print('p_10')
Пример #6
0
def read_messages(read_clients, all_clients):
    messages = []
    resp_msg = ''
    for s in read_clients:
        print('read_clients: %s' % s)
        try:
            print(143)
            ##############  Получаем и обрабатываем входящие сообщения #############
            inc_msg = get_msg(s)
            # проверяем тип сообшения (поле action)
            msg_type = check_msg(inc_msg)
            print('===> тип сообшения: %s  <===' % msg_type)  #DEBUG

            ## обрабатываем получение списка контактов
            if msg_type == 'get_contacts':
                print('====> получено от клиента: %s  <====' % inc_msg)
                ## формируем контакт лист для клиента
                # print('user: %s' %user)
                contact_list = Repo.friends_lst(user)
                #print('also, contact_list:: %s: ' %contact_list)

                ## формируем контакт лист для клиента
                put_contacts['contacts_list'] = contact_list
                put_contacts[TO] = inc_msg['from']
                #resp_msg = contact_list
                resp_msg = put_contacts
                #print('сформировали ответ клиенту :%s' %contact_list)
                print('сформировали ответ клиенту :%s' % resp_msg)

            ## Если тип message - просто ставим в очередь
            if msg_type == 'message':
                resp_msg = inc_msg

            print(155)
            ## добавляем сообщение в список
            messages.append(resp_msg)
            #print('messages_query_1 {|||||} : %s' %messages)
        except Exception as e:
            print('UPS_1! клиент {}{} отключился'.format(
                s.fileno(), s.getpeername()))
            print(e)
            all_clients.remove(s)
    return messages  # возвращаем список сообщений
Пример #7
0
    def get_cont(self):
        # формируем запрос севреру на получение контактов
        get_contacts[FROM] = option.user
        try:
            ## получаем контакты от сервера
            send_msg(self.sock, get_contacts)
            print('послали запрос контактов... ')
        except Exception as e:
            print('EXCP: %s' % e)

        response = get_msg(self.sock)
        print('приняли ответ от сервера на запрос контактов')
        if response:
            print("YATA! =) Принят лист контактов  от сервера: %s\n" %
                  response)
        else:
            print("Нет ответа от сервера, что-то пошло не так...\n")
        # проверяем ответ и возвращем его
        # result_response = check_response(response)
        return response
Пример #8
0
        sock.connect((option.address, option.port))  # Соединиться с сервером
        print('соединение установлено... ')

        ### принимаем текущее время
        ### tm = sock.recv(4096)
        ### print("Текущее время: %s" % tm.decode('ascii'))

        ## текущее время
        ## timestamp = time.ctime(time.time()) + "\n"
        ##conn.send(timestamp.encode('ascii'))
        '''	формируем json данные приветствия и посылаем их серверу  '''
        presence[USER][ACCOUNT_NAME] = option.user
        send_msg(sock, presence)
        print('послали данные приветствия... ')
        '''		принимаем данные (подтверждение) от сервера		'''
        response = get_msg(sock)
        #print('приняли ответ от сервера')
        if response:
            print("YATA! =) Принята проверка от сервера: %s\n" %
                  response[RESPONSE])
        else:
            print("Нет ответа от сервера, что-то пошло не так...\n")

        # проверяем ответ
        result = check_response(response)
        if result == 200:
            # основной цикл (работа с сообщениями)
            if option.write_client == 'yes':
                while True:
                    # посылаем сообщение в чат (общий) в цикле
                    my_msg = input(
Пример #9
0
    timestr = time.ctime(time.time()) + "\n"
    # Обратите внимание, дальнейшая работа ведётся с сокетом клиента
    client.send(
        timestr.encode('ascii')
    )  # <-по сети должны передаваться байты,поэтому выполняется кодирование строки

    # '''
    # получаем данные от клиента (debug)
    # '''
    # rec = client.recv(1024)
    # rc_mess = rec.decode('utf-8')
    #
    # if rec:
    #    print('>> получено от клиента: {} <<'.format(rc_mess))
    # else:
    #    print('нет данных от клиента_1')

    # Получаем сообщение от клиента
    presence = get_msg(client)
    # print(presence)   # DEBUG
    # Проверяем сообщение (приветствие) и формируем ответ
    response = check_pres(presence)
    # print(response)     # DEBUG
    # Отсылаем код проверки клиенту
    if response:
        print('всё ОК, приветствие получено. отправляем ответ клиенту')
        send_msg(client, response)
    else:
        print('ups, что-то пошло не так :)')

server.close()
Пример #10
0
def mainloop():
    addres = (option.address, option.port)
    clients = []
    sock = new_listen_socket(addres)

    ''' Основной цикл обработки запросов клиентов '''
    ##############################################################
    # сам цикл проверки
    while True:
        try:
            # Принять запрос на соединение
            conn, addr = sock.accept()
                ## посылаем текущее время
                ## timestamp = time.ctime(time.time()) + "\n"
                ## conn.send(timestamp.encode('ascii'))
            # принимаем сообщение от клиентов (presence)
            presence = get_msg(conn)
            print('presence: %s' % presence)        # DEBUG
            # проверяем тип сообщения
            response = check_pres(presence)
            # если тип - привествие - посылем код ответа клиенту
            if response:
                # print('...приветствие получено. отправляем ответ клиенту')
                send_msg(conn, response)
            else:
                print('ups, что-то пошло не так :)')
        except OSError as e:
            pass                            #  Таймаут вышел
        else:
            print("Получен запрос на соединение от %s" % str(addr))
            clients.append(conn)            # Добавляем соединения в список
            print(10)   # DEBUG
        finally:
            # Проверка наличия соединений (ввод-вывод) без таймаута
            outputs = []
            inputs = [sock]
             try:
                r, w, e = select.select(inputs, clients, inputs)
            except Exception as e:
                pass    # Ничего не делаем, если клиент отключится

            #print(11)
            # Обходим список клиентов, посылающих данные в сокет
            for w_client in w:
                print('current write connect: %s' % w_client)     # DEBUG
                try:
                    # принимаем сообщение от клиента (для чата)
                    input_msg = get_msg(w_client)
                    # проверяем тип сообщения (msg_chat)
                    resp_msg = check_msg(input_msg)
                    print('bzz2: %s' % resp_msg)     # DEBUG
                    if resp_msg:
                        #print('YATAA! :) входящее сообщение (raw): %s\n' % input_msg)
                        print('-------------------------- TADA! New message ---------------------------------')
                        print('from:  %s' % input_msg[FROM])
                        print('to: %s'% input_msg[TO])
                        print('time:  %s' % TIMESTAMP)
                        print('------- body message --------')
                        print('     MESSAGE: %s' % input_msg[MESSAGE])
                        print('--------------------------- END message  -----------------------------------')
                        # теперь надо переслать всем клиентам из списка подключенных :)
                    else:
                        print('нет ответа от клиента')
                except:
                    # Удаляем клиента, который отключился
                    clients.remove(w_client)
                    #print(13)

            # Проверка соединений, читающих сообщения из сокета
            for r_client in r:
                print('current read connect: %s' % r_client)     # DEBUG
                # отсылаем сообщения всем клиентам, читающим из сокета
                try:
                    # принимаем сообщение от клиента (для чата)
                    input_msg = get_msg(r_client)
                    # проверяем тип сообщения (msg_chat)
                    resp_msg = check_msg(input_msg)
                    if input_msg:
                        print('посылаем сообщения списку')
                        send_msg(r_client,input_msg)
                    else:
                        print('не можем послать сообщения. список пуст?')
                except:
                    # Удаляем клиента, который отключился
                    clients.remove(r_client)