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)?
risposta
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.
@Obrok Hmm quindi ho davvero pensato che avrebbe funzionato, ma mi ha appena lanciato {: error, {: already_started, PID}} - strano – desu
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 –
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. –
@ 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