Esempio n. 1
0
def main():
    logger.debug('App started')

    parser = chat.create_parser()
    namespace = parser.parse_args()

    client_name = input('Введите имя: ')

    sock = chat.get_client_socket(namespace.addr, namespace.port)
    serv_addr = sock.getpeername()
    start_info = f'Connected to server: {serv_addr[0]}:{serv_addr[1]}'
    print(start_info)
    logger.info(start_info)

    jim.PRESENCE['user']['account_name'] = client_name
    try:
        chat.send_data(sock, jim.PRESENCE)
    except ConnectionResetError as e:
        logger.error(e)
        sock.close()
        exit(1)

    while True:
        r = []

        try:
            r, w, e = select.select([sock], [], [], 1)
        except Exception as e:
            pass

        if sock in r:
            try:
                data = chat.get_data(sock)
            except ConnectionResetError as e:
                logger.error(e)
                break

            if data['response'] != '200':
                logger.debug('App ending')
                break

            if 'messages' in data:
                for message in data['messages']:
                    print(
                        f'{message["time"]} - {message["from"]}: {message["message"]}'
                    )

        else:
            msg = input('Введите сообщение ("exit" для выхода): ')
            if msg:
                jim.MESSAGE['message'] = msg

                try:
                    chat.send_data(sock, jim.MESSAGE)
                except ConnectionResetError as e:
                    logger.error(e)
                    break

    sock.close()
Esempio n. 2
0
def main():
    logger.debug('App started')
    client_name = input('Введите имя: ')

    parser = chat.create_parser()
    namespace = parser.parse_args()

    sock = chat.get_client_socket(namespace.addr, namespace.port)

    serv_addr = sock.getpeername()
    start_info = f'Connected to server: {serv_addr[0]}:{serv_addr[1]}'
    print(start_info)
    logger.info(start_info)

    jim.PRESENCE['user']['account_name'] = client_name
    try:
        chat.send_data(sock, jim.PRESENCE)
        logger.info(f'Presence sended to {serv_addr} : {jim.PRESENCE}')
    except ConnectionResetError as e:
        logger.error(e)
        sock.close()
        exit(1)

    while True:
        try:
            data = chat.get_data(sock)
            logger.info(f'Data received from {serv_addr} : {data}')
        except ConnectionResetError as e:
            logger.error(e)
            break

        if data['response'] != '200':
            break

        msg = input('Введите сообщение ("exit" для выхода): ')
        jim.MESSAGE['message'] = msg

        try:
            chat.send_data(sock, jim.MESSAGE)
            logger.info(f'Data sended to {serv_addr} : {jim.MESSAGE}')
        except ConnectionResetError as e:
            logger.error(e)
            break

    logger.debug('App ending')

    sock.close()
Esempio n. 3
0
def receive(sock):
    while True:
        try:
            data = chat.get_data(sock)
        except ConnectionResetError as e:
            logger.error(e)
            break

        if data['response'] != '200':
            logger.debug('App ending')
            break

        if 'messages' in data:
            for message in data['messages']:
                sys.stdout.write(
                    f'{message["time"]} - {message["from"]}: {message["message"]}'
                )
Esempio n. 4
0
    start_info = f'Connected to server: {serv_addr[0]}:{serv_addr[1]}'
    print(start_info)
    logger.info(start_info)

    jim.PRESENCE['user']['account_name'] = client_name
    try:
        chat.send_data(sock, jim.PRESENCE)
        logger.info(f'Presence sended to {serv_addr} : {jim.PRESENCE}')
    except ConnectionResetError as e:
        logger.error(e)
        sock.close()
        exit(1)

    while True:
        try:
            data = chat.get_data(sock)
            logger.info(f'Data received from {serv_addr} : {data}')
        except ConnectionResetError as e:
            logger.error(e)
            break

        if data['response'] != '200':
            break

        msg = input('Введите сообщение ("exit" для выхода): ')
        jim.MESSAGE['message'] = msg

        try:
            chat.send_data(sock, jim.MESSAGE)
            logger.info(f'Data sended to {serv_addr} : {jim.MESSAGE}')
        except ConnectionResetError as e:
Esempio n. 5
0
    sock = chat.get_server_socket(namespace.addr, namespace.port)

    server_addr = sock.getsockname()
    start_info = f'Server started at {server_addr[0]}:{server_addr[1]}'
    print(start_info)
    logger.info(start_info)

    client, client_addr = sock.accept()
    client_info = f'Client connected from {client_addr[0]}:{client_addr[1]}'
    print(client_info)
    logger.info(client_info)

    while True:

        try:
            data_in = chat.get_data(client)
            logger.info(f'Data received from {client_addr} : {data_in}')
        except ConnectionResetError as e:
            logger.error(e)
            break

        if client_name == '':
            if data_in['action'] == 'presence' and data_in['user'][
                    'account_name'] != '':
                client_name = data_in['user']['account_name']
                jim.RESPONSE['response'], jim.RESPONSE[
                    'alert'] = jim.SERV_RESP[0]
                print(
                    f'{data_in["time"]} - {data_in["user"]["account_name"]}: {data_in["user"]["status"]}'
                )
            else:
Esempio n. 6
0
def mainloop():
    waiting_counter = 0
    clients = []
    clients_info = {}

    logger.debug('App started')

    parser = chat.create_parser()
    namespace = parser.parse_args()

    sock = chat.get_server_socket(namespace.addr, namespace.port)
    server_addr = sock.getsockname()
    start_info = f'Server started at {server_addr[0]}:{server_addr[1]}'
    print(start_info)
    logger.info(start_info)

    while True:
        messages = []

        try:
            client, client_addr = sock.accept()
        except OSError as e:
            pass
        else:
            info = f'Client connected from {client_addr[0]}:{client_addr[1]}'
            print(info)
            logger.info(info)
            client_info = {'name': '', 'addr': client_addr, 'in_messages': []}
            clients.append(client)
            clients_info[client] = client_info
        finally:
            r = []
            w = []
            try:
                r, w, e = select.select(clients, clients, [], 0)
            except Exception as e:
                pass

            for s_client in r:
                try:
                    data_in = chat.get_data(s_client)
                except ConnectionResetError as e:
                    logger.error(e)

                if clients_info[s_client]['name'] == '':
                    if data_in['action'] == 'presence' and data_in['user']['account_name'] != '':
                        clients_info[s_client]['name'] = data_in['user']['account_name']
                        jim.RESPONSE['response'], jim.RESPONSE['alert'] = jim.SERV_RESP[0]
                        print(f'{data_in["time"]} - {data_in["user"]["account_name"]}: {data_in["user"]["status"]}')
                    else:
                        jim.RESPONSE['response'], jim.RESPONSE['alert'] = jim.SERV_RESP[1]

                if clients_info[s_client]['name'] != '' and data_in['action'] == 'msg':
                    data_in['from'] = clients_info[s_client]["name"]
                    print(f'{data_in["time"]} - {data_in["from"]}: {data_in["message"]}')
                    jim.RESPONSE['response'], jim.RESPONSE['alert'] = jim.SERV_RESP[0]

                    messages.append(data_in)

                    if data_in["message"] == 'exit':
                        jim.RESPONSE['response'], jim.RESPONSE['alert'] = jim.SERV_RESP[2]

                clients_info[s_client]['data_out'] = jim.RESPONSE

            for s_client in clients:
                clients_info[s_client]['in_messages'].extend(messages)

            for s_client in w:
                if 'data_out' in clients_info[s_client]:
                    data_out = clients_info[s_client]['data_out']
                    data_out['messages'] = clients_info[s_client]['in_messages']

                    try:
                        chat.send_data(s_client, data_out)
                        clients_info[s_client].pop('data_out')
                        clients_info[s_client]['in_messages'].clear()
                    except ConnectionResetError as e:
                        logger.error(e)
                        clients.remove(s_client)
                        clients_info.pop(s_client)

                    if data_out['response'] != '200':
                        clients.remove(s_client)
                        clients_info.pop(s_client)

        if len(clients) == 0:
            waiting_counter += 1

        if waiting_counter > 1200:
            break

    sock.close()

    logger.debug('App ending')