KorP
@KorP
Кратко о себе

Twisted и новичок в питоне: пара вопросов

Всем здравствуйте. Я новичок, только пару курсов в специалисте по питону прошёл, немного теории есть, но вот с практикой совсем грустно, по этому есть пара вопросов. Есть у меня проект на php, который работает как “серверное приложение”, т.к. работа с icq/jabber на php реализована, мягко говоря, не очень, а уведомления к системе, помимо почтовых прикрутить нужно. Решено было написать некий im gateway и поднять его у себя на сервере, что бы пересылка уведомлений велась через него. В итоге имею 2 вопроса:
1. Каким образом можно реализовать передачу данных скрипту? Наверное его нужно поднимать в качестве демона, что бы он слушал определённый порт и реагировать на поступающую туда информацию (я так понимаю это можно реализовать при помощи всё того же twisted). Но я в этом совсем не бум-бум, по этому даже пока не знаю в какую сторону гуглить, так что буду благодарен за советы.
2. В общем то пока самый главный вопрос — пока нчал так сказать “с конца”: отправка сообщений пользователям. Взял twisted, покрутил, поглядел пример, в итоге есть небольшой кусок кода, который отправляет нужное сообщение на нужный номер аськи, так что осталось только передать в него данные, но — пока он реагирует только на сообщение на его номер icq (т.е. работа в режиме отвечающего бота, как описано 100500 раз в гуглах), а вот как его “в ручную” заставить отправить сообщение я что то понять не могу. Где и как вызывает функция receiveMessage() для отправки сообщения и какие параметры туда передаются я, пока, понять не могу (я так подозреваю что всё это тянется из нутров самого twisted, по этому как с этим работать — я не знаю).

Прошу сильно не пинать ножками, это для меня первая практическая работа на питоне.
Для наглядности — код: pastebin.com/mEDyamKm
  • Вопрос задан
  • 5508 просмотров
Пригласить эксперта
Ответы на вопрос 2
Для вас начать нужно тут: twistedmatrix.com/documents/current/core/howto/servers.html

class ReceiverProtocol(LineReceiver):

    def lineReceived(self, line):
        botObject.sendMessage(SendTo, line)


class ReceiverFactory(Factory):

    protocol = ReceiverProtocol


reactor.listenTCP(LISTEN_PORT,  ReceiverFactory())


Далее: Отправляем по TCP «любое сообщение\r\n» на порт LISTEN_PORT
Ответ написан
@alz
Можете в этом же скрипте поднять xmlrpc-сервер. В методе initDone регистрировать экземпляр icq-соединения (переменная self) в этом rpc-сервере и реализовать rpc-метод, который будет дергать метод sendMessage зарегистрированного соединения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы