2015-06-25 12 views
5

Vorrei connettermi a due server in ExIrc con elixir e non riesco a trovare una soluzione semplice per farlo. Sono abbastanza nuovo per l'elisir, e tutto quello che posso vedere è che uso 'umbrellas' per eseguire due app e farle interagire tra loro? (Vorrei usare un'app per connettersi a un server IRC e se ha alcune parole certe, analizzare i dati e inviarli a un altro server IRC)Connessione a più server IRC con ExIrc (elisir)?

+1

Molto rapidamente guardando il codice di 'ExIrc' sembra che il client sia un' GenServer', quindi dovresti essere in grado di avviare più client e collegarli a server diversi. –

+0

@ PawełObrok hmm. Come ho detto di essere nuovo in elisir, hai idea di come avviare più client? (scusate se mi sembra così stupido qui dentro: P) – desu

risposta

2

Quindi per connettere un singolo client puoi fare qualcosa del tipo:

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) 

Sto usando il ExampleHandler proprio come suggerisce il README. Ora, se si fa qualcosa di simile:

pass = "" 
nick = "my_nick" 
ExIrc.Client.logon(client, pass, nick, nick, nick) 
ExIrc.Client.join(client, "#elixir-lang") 

Si inizierà a vedere i messaggi di #elixir-lang essere uscita per la console - è così che il ExampleHandler è implementata, probabilmente implementare qualcosa d'altro al suo posto.

Ora, nulla vi impedisce di fare questo una seconda volta:

{:ok, client2} = ExIrc.Client.start_link 
{:ok, handler2} = ExampleHandler.start_link(nil) 
# and so on 

Per creare un client client2 che è collegato allo stesso o un altro server. Per ottenere ciò che vuoi, devi solo scrivere un gestore che reagisce ai messaggi da client chiamando lo ExIrc.Client.msg(client2, ...) per postare all'altro client.

+0

@Obrok Hmm quindi ho davvero pensato che avrebbe funzionato, ma mi ha appena lanciato {: error, {: already_started, PID}} - strano – desu

+0

Oh, mi dispiace per quello. Sembra che il modo in cui "ExIrc.start_client!" Si avvia e aggancia il worker nella sua struttura di supervisione, è possibile avere un solo client. Puoi invece avviare manualmente i client con 'ExIrc.Client.start_link', ma probabilmente vuoi assicurarti di collegarli alla struttura di supervisione. Aggiornerò la risposta –