Hallo,
ich programmiere gerade an einem Skript, dass als Gateway zwischen dem IRC und einer von mir selbst geschriebenen Umgebung fungieren soll.
Das ganze soll praktisch so funktionieren:
Wenn jemand im IRC etwas schreibt, ließt mein Gateway mit und postet das gleiche dann in meiner Chat-Umgebung und umgekehrt.
Da das ganze natürlich annähernd zeitgleich laufen soll, habe ich mir überlegt, dass das doch eigentlich mit zwei Threads und zwei while()-Schleifen zu realisieren sei.
Jedoch haut das ganze nicht so hin wie ich mir das wünchen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use strict;
use IO::Socket;
use IO::Socket::INET;
use threads;
my $sock = IO::Socket::INET->new(PeerAddr => $server,
PeerPort => 6667,
Proto => 'tcp') or
die "Can't connect\n";
my $sock2 = IO::Socket::INET->new(PeerAddr => $server2,
PeerPort => 9999,
Proto => 'tcp') or
die "Can't connect\n";
my $thread1 = Thread->create(&gateway2irc);
$thread1->join();
my $thread2 = Thread->create(&chat2gateway);
$thread2->join();
sub gateway2irc {
while (my $input = <$sock>) {
chomp($input);
if ($input =~ /^PING(.*)$/i) {
print $sock "PONG $1\r\n";
}
}
}
sub chat2gateway {
while (my $input2 = <$sock2>) {
if ($input2 =~ "ping") {
print sock "PRIVMSG $channel : ping\n";
}
}
}
Vereinfachter Code + Methoden verkürzt/abgeändert.
Mir ist aufgefallen, dass der Code in der zweiten Sub nicht ausgeführt wird.
Hat jemand eine Ahnung warum bzw. eine Idee wie das Problem gelöst werden kann?
Danke
Paul