Thread Problem mit Sockets und Threads - IRC-Gateway (14 answers)
Opened by Paul321 at 2011-08-08 15:06

Gast Paul321
 2011-08-08 15:06
#151317 #151317
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

Code: (dl )
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

View full thread Problem mit Sockets und Threads - IRC-Gateway