Schrift
[thread]5973[/thread]

Script beenden ? (Seite 3)

Leser: 4


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
esskar
 2004-12-30 21:13
#76396 #76396
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es ist doch okay...
nach dem der server alle nachrichten verschickt hat, gibt es für die clients keinen grund, noch was zu schicken; dann kannst du den server auch ruhig schlafen schicken...
bzw. wenn der client die nachricht erhält, dann lass den client schlafen, in dem du auf dem client sleep ausführst...
BrownWolf
 2004-12-30 21:54
#76397 #76397
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Quote
nach dem der server alle nachrichten verschickt hat, gibt es für die clients keinen grund, noch was zu schicken;


Sicher, der Gag soll ja sein das die Chatter sich noch verabschieden können, BIS das System neu gestartet wird :)
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
esskar
 2004-12-30 21:58
#76398 #76398
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
setz dir doch selbst einen timer...

ich nehme an, du hast irgendwo eine hauptschleife...
dort würde ich mit time heraus finden, wie lang es her ist, seit die kill nachricht geschickt wurde...

ist genügend zeit vergangen => abschießen...
steffenw
 2004-12-30 22:29
#76399 #76399
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also das Problem hatte ich auch. Es gibt in meinem Socket-Server einen Befehl "exit", den berechtigte Clients ihm senden können.

Ich muß aber garantieren, daß die Quittung für die Verarbeitung der Daten für die anderen Clients nicht verloren geht. Das heißt, wenn ich Daten auf Anforderung anderer Clients in der Datenbank eingetragen habe, muß! ich die Quittung an den Client senden, der diesen Auftrag gesendet hat. Ich kann natürlich diesen Auftrag vor Ausführung abweisen, indem ich einfach die Verbindung trenne, dann herrscht auch Klarheit auf Client-Seite. Ich kann aber nicht die Ausführung des Auftrages vornehmen und die Quittung nicht senden.

Ich habe es so gelöst, daß ich erst von allen Clients, die dem Server etwas gesendet haben empfange. Damit starte ich auch die Verarbeitung, wenn die Daten vollständig eingegangen sind. Durch die Verarbeitung entstehen in den jeweiligen outbuf's Daten, die ich auf jeden Fall senden muß. Also sende ich in der hier geposteten until-Schleife erst mal alles das raus. Dann erst beginnt die Schleife neu mit dem Test des $exit_flag 's. Weil es durch den o.g. "exit"-Befehl gesetzt wurde, nimmt der Server keine neuen Daten mehr an, trennt sich von allen Clients und letztendlich endet der Server selbst.

So wie ich ein $exit_flag benutze, könntest Du auch die Down-Zeit irgendwo setzen und wenn sie erreicht ist, endet Deine Schleife.\n\n

<!--EDIT|steffenw|1072816827-->
$SIG{USER} = sub {love 'Perl' or die};
BrownWolf
 2004-12-31 17:41
#76400 #76400
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hi,

hab nochn Problem. Ich weiss echt nicht woran das liegt aber der Server beendet sich immer mit folgender Fehlermeldung: "Bad file descriptor at xxx.pl line 121"
Undzwar wenn ich folgendes Aufrufe:

Code (perl): (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
}elsif($text =~ /^\/img/){
               
     my $params = substr($text, 5, length($text));
               
     if($params ne "") {
               
     if($member{status} < $config{permissions}{img}) {
               
       my $info = &createInfo("Du hast keine Berechtigung diesen Befehl zu benutzen.");
               
       &restrictToCurrentUser($info);
               
     }else{
               
       my $url = ũ if($params =~ m/&url=(.+)\"/);
               
       $url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex(ũ))/eg;
               
       my $template = HTML::Template->new(filename => "../Templates/message/img.htm");
               
       $template->param(img => $url, nick => $nickname);
               
       &restrictToCurrentRoom($template->output());
               
     }
               
     }



Die RestrictToCurrentRoom() Subroutine funktioniert normal auch, blos er gibt halt diesen Error aus.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub restrictToCurrentRoom {
    my $text = shift();
    my @rooms = ();
    my @users = &getOnlineUsers();
    my %info = &loadInfo();
    my $nickname = lc($info{nick});
    my $raum = $chatters{$nickname}->{room};
    foreach my $user(@users) {
        $user = lc($user);
        my $room = $chatters{$user}->{room};
        if(lc($room) eq lc($raum)) {
         my $handle = $chatters{$user}->{client};
         delete $chatters{$user} if(!$handle->send("$text
\r"));
        }
    }
    &logMessage("[$info{room}] $text");
}


Warum Bad filedescriptor ?

Was ich noch dazu sagen muss, wenn man als URL http://www.bla.de eingibt wird der Server nicht beendet, nur wenn man XYZ als URL nimmt beendet sich der Server.

Edit: Ich wünsche euch schon mal ein frohes neues Jahr.\n\n

<!--EDIT|BrownWolf|1072886041-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
BrownWolf
 2004-01-01 17:04
#76401 #76401
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hi,

ich glaub es liegt daran wenn man irgendwelche bestimmte Zeichen per send() versendet. Ich bekomme auch Meldungen wie:

Quote
Can not determine peer adress at xx.pl line 121

oder:

Wide character in send() at /IO/socket.pm


Woran liegt das und wie kann ich den Fehler nun beheben ?
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
steffenw
 2004-01-01 21:49
#76402 #76402
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du schreibst
 if(!$objekt->methode())
und meinst eigentlich
 unless($objekt->methode())
oder
 if(! $objekt->methode())
oder
 if(not $objekt->methode())
.

Weil das ! ohne Trennzeichen an $handle steht, wird Perl zuerst diese Operation mit den Objekt $handle ausführen, es also logisch negieren. (Perl macht Unterschiede, wenn der Operator ohne Trennzeichen geschrieben wird.) Damit wird $handle logisch falsch und es ist kein Objekt mehr. Entweder Du schreibst ein Leerzeichen nach dem ! oder Du schreibst not anstatt !, not bindet weniger. if(not ...) oder if (! ...) ist aber nicht Perl, so etwas kennst Du von anderen Programmiersprachen her.

Ich glaube das ist es, denn Perl führt es immer so aus, wie es geschrieben steht.\n\n

<!--EDIT|steffenw|1072986804-->
$SIG{USER} = sub {love 'Perl' or die};
pq
 2004-01-01 22:30
#76403 #76403
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=steffenw,01.01.2004, 20:49]Weil das ! ohne Trennzeichen an $handle steht, wird Perl zuerst diese Operation mit den Objekt $handle ausführen, es also logisch negieren.[/quote]
hm? wo hast du das denn her? bzw. welche version von perl macht da
unterschiede? meine drei versionen 5.6.1, 5.8.0 und 5.8.2 machen da
jedenfalls keinen unterschied
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
steffenw
 2004-01-01 23:55
#76404 #76404
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich habe es getestet, was ich da gerade geschrieben habe, war im speziellen Fall Blödsinn. Nur gelesen habe ich sowas, mit Unterschieden mit und ohne Trennzeichen, nur in welchem Zusammenhang, also bei was das zutrifft, weiß ich nicht mehr. Ich glaube es war im Kamelbuch.
$SIG{USER} = sub {love 'Perl' or die};
BrownWolf
 2004-01-01 23:58
#76405 #76405
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Funktioniert aber immer noch nicht. Die restrictToCurrentRoom() Methode funktioniert auch. Aber sobald jemand den /img Befehl benutzt und keine URL angibt also "hallo" als URL nimmt ist der Server tot.

Quote
Can't call method "send" on an undefined value at ../Subs.pl line 110.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2003-12-18 04:42.