IRC функция дилемма - PullRequest
       10

IRC функция дилемма

0 голосов
/ 02 июня 2011

[EDIT] Извините, что заголовок отключен.Я думал о другой проблеме, с которой столкнулся, и случайно пересек их.

Привет всем, я сейчас пишу свой скелет IRC-бота на Python.

Чтобы объяснить пару вещей передЯ задаю свой вопрос, я пишу IRC-бота в комплекте с подключаемой системой, которая будет принимать сигналы (т. Е. Когда получено сообщение, кто-то видел присоединение к каналу, ...) и вызывать эти функции, содержащиесяплагин, я буду использовать вспомогательный метод, т. е. если мы увидели сообщение, вызовите sawMessage.sawMessage определит, какие подключаемые модули хотят обрабатывать сообщения, используя класс PluginManager и т. Д. Я продумал всю систему.

У меня также есть функция для каждого действия IRC, то есть "doJoin""," doPart "и т. д., чтобы плагины могли вызывать их без того, чтобы я напрямую выставлял подключение к сокету.- Должны ли эти функции автоматически вызывать соответствующие sawMessage, sawJoin и т. Д.?Или это должен быть плагин для вызова sawMessage после вызова doMessage?Причина, по которой я спрашиваю, состоит в том, что если doMessage вызывает sawMessage, а sawMessage обрабатывает что-то, что вызывает doMessage, это может привести к многократному повторению, прежде чем разматывать стек.

Недостатки созданияплагин, отвечающий за вызов sawMessage для уведомления других плагинов, состоит в том, что плагин может выбрать НЕ уведомлять другие плагины, а также, что если плагин ДОЛЖЕН вызывать sawMessageфункция, проблема рекурсии может всплыть обратно.

Я не уверен, как решить эту проблему.Хорошей практикой является заставить doMessage автоматически вызывать sawMessage для уведомления других плагинов, но всегда существует вероятность переполнения стека из-за рекурсии, если плагин не спроектирован должным образом (т.е. не отвечает наэто собственные сообщения), но если плагин должен в любом случае вызвать sawMessage, та же проблема возникает.

Есть какие-либо мысли / мнения по этому поводу?Я знаю, что это не простой вопрос / ответ, но я не могу решить, что с этим делать.Обычно, если бы я просто писал маленького бота для собственного использования, я бы не заботился о возможной проблеме рекурсии.Тем не менее, я пишу это с целью распространения (я хочу, чтобы это был следующий БОЛЬШОЙ бот, как и любой другой разработчик IRC-ботов: D), и я хочу, чтобы все было сделано правильно.

Спасибо!

1 Ответ

1 голос
/ 02 июня 2011

Звучит так, как будто вам нужно выбрать или прочитать больше о Опубликовать / подписаться и Цепочка ответственности . К сожалению, у меня нет большого опыта в этой области. Просто недавно прочитал связанную статью .

...