2015-06-25 7 views
5

Ich würde gerne mit zwei Servern in ExIrc mit Elixier verbinden, und ich kann keine einfache Lösung dazu finden. Ich bin ziemlich neu in Elixier, und alles, was ich sehen kann, ist, dass ich 'Schirme' benutze, um zwei Apps laufen zu lassen und sie miteinander zu verbinden? (Ich möchte eine App verwenden, um eine Verbindung zu einem IRC-Server herzustellen, und wenn es bestimmte Wörter hat, die Daten analysieren und an einen anderen IRC-Server senden)Verbinden mit mehreren IRC-Servern mit ExIrc (Elixir)?

+1

Sehr schnell den Code von 'ExIrc' betrachtend scheint es, dass der Client ein 'GenServer' ist, also sollten Sie einfach mehrere Clients starten und sie mit verschiedenen Servern verbinden können. –

+0

@ PawełObrok hmm. Wie ich schon sagte, ich bin neu in Elixier, haben Sie eine Idee, wie Sie mehrere Kunden starten? (Sorry, wenn ich hier so dumm bin: P) – desu

Antwort

2

So verbinden Sie einen einzelnen Client können Sie etwas tun wie:

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) 

Ich benutze die ExampleHandler, wie die README vorschlägt. Nun, wenn Sie so etwas wie:

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

Sie starten Nachrichten von #elixir-lang ausgegeben wird an die Konsole zu sehen - das ist, wie die ExampleHandler implementiert ist, werden Sie wahrscheinlich etwas anderes an seiner Stelle umzusetzen.

Jetzt ist nichts mehr im Wege stehen diese ein zweites Mal tun:

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

Um einen Client client2 zu erstellen, die auf demselben oder einem anderen Server verbunden ist. Um das zu erreichen, was Sie wollen, müssen Sie nur einen Handler schreiben, der auf Nachrichten von client reagiert, indem er ExIrc.Client.msg(client2, ...) aufruft, um ihn an den anderen Client zu senden.

+0

@Obrok Hmm, ich dachte wirklich, das würde funktionieren, aber es wirft mich einfach {: error, {: already_started, PID}} - komisch – desu

+0

Oh, tut mir leid. Es scheint so, als ob "ExIrc.start_client!" Startet und den Arbeiter in seinen Überwachungsbaum einklinkt. Sie können nur einen Klienten haben. Sie können die Clients stattdessen manuell mit 'ExIrc.Client.start_link' starten, aber Sie möchten sicherstellen, dass Sie sie in Ihren Überwachungsbaum einbinden. Ich werde die Antwort aktualisieren. –