Я хотел бы подключиться к двум серверам в ExIrc с помощью elixir, и я не могу найти легкое решение для этого. Я довольно новичок в эликсире, и все, что я вижу, что я могу сделать, это использовать «зонтики» для запуска двух приложений и взаимодействия с ними друг с другом? (Я хотел бы использовать одно приложение для подключения к одному IRC-серверу, и если у него есть определенные слова, проанализируйте данные и отправьте на другой IRC-сервер)Подключитесь к нескольким IRC-серверам с ExIrc (Elixir)?
ответ
Таким образом, чтобы подключить одного клиента, вы можете сделать что-то вроде:
ExIrc.start!
{:ok, client} = ExIrc.Client.start_link
{:ok, handler} = ExampleHandler.start_link(nil)
ExIrc.Client.add_handler(client, handler)
ExIrc.Client.connect!(client, "chat.freenode.net", 6667)
Я использую ExampleHandler так же, как предлагает README. Теперь, если вы делаете что-то вроде:
pass = ""
nick = "my_nick"
ExIrc.Client.logon(client, pass, nick, nick, nick)
ExIrc.Client.join(client, "#elixir-lang")
Вы начнете видеть сообщения от #elixir-lang
выводится на консоль - это как ExampleHandler
будет реализован, то вы, вероятно, осуществить что-то еще на своем месте.
Теперь ничто не мешает вам делать это во второй раз:
{:ok, client2} = ExIrc.Client.start_link
{:ok, handler2} = ExampleHandler.start_link(nil)
# and so on
Чтобы создать клиент client2
, который подключен к тому же или другому серверу. Чтобы достичь того, чего вы хотите, вам просто нужно написать обработчик, который реагирует на сообщения от client
, позвонив ExIrc.Client.msg(client2, ...)
, чтобы отправить другому клиенту.
@ Obrok Хм, так что я действительно думал, что это сработает, но его просто выбросит меня {: error, {: already_started, PID}} - странно – desu
Ой, извините. Кажется, что «ExIrc.start_client!» Запускает и перехватывает рабочего в его дерево наблюдения, у вас может быть только один клиент. Вместо этого вы можете вручную запускать клиентов с помощью «ExIrc.Client.start_link», но вы, вероятно, захотите убедиться, что вы подключите их к дереву наблюдения. Я обновлю ответ. –
Очень быстро глядя на код «ExIrc», кажется, что клиент является «GenServer», поэтому вы должны просто запустить несколько клиентов и подключить их к различным серверам. –
@ PawełObrok хм. Как я уже сказал, я новичок в эликсире, знаете ли вы, как начинать несколько клиентов? (извините, если я так глупо смотрю здесь: P) – desu