2015-06-25 3 views
5

Я хотел бы подключиться к двум серверам в ExIrc с помощью elixir, и я не могу найти легкое решение для этого. Я довольно новичок в эликсире, и все, что я вижу, что я могу сделать, это использовать «зонтики» для запуска двух приложений и взаимодействия с ними друг с другом? (Я хотел бы использовать одно приложение для подключения к одному IRC-серверу, и если у него есть определенные слова, проанализируйте данные и отправьте на другой IRC-сервер)Подключитесь к нескольким IRC-серверам с ExIrc (Elixir)?

+1

Очень быстро глядя на код «ExIrc», кажется, что клиент является «GenServer», поэтому вы должны просто запустить несколько клиентов и подключить их к различным серверам. –

+0

@ PawełObrok хм. Как я уже сказал, я новичок в эликсире, знаете ли вы, как начинать несколько клиентов? (извините, если я так глупо смотрю здесь: P) – desu

ответ

2

Таким образом, чтобы подключить одного клиента, вы можете сделать что-то вроде:

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, ...), чтобы отправить другому клиенту.

+0

@ Obrok Хм, так что я действительно думал, что это сработает, но его просто выбросит меня {: error, {: already_started, PID}} - странно – desu

+0

Ой, извините. Кажется, что «ExIrc.start_client!» Запускает и перехватывает рабочего в его дерево наблюдения, у вас может быть только один клиент. Вместо этого вы можете вручную запускать клиентов с помощью «ExIrc.Client.start_link», но вы, вероятно, захотите убедиться, что вы подключите их к дереву наблюдения. Я обновлю ответ. –