[php + tcl] Text vanaf website in irc plaatsen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb op een website een shoutbox. Nu wil dat de berichten die gebruikers hierin typen ook in een irc channel worden geplaatst. Hiervoor heb ik de volgende tcl in mijn eggdrop geladen:

Tcl:
1
2
3
4
5
6
7
8
9
10
listen 4000 script shoutaccept
proc shoutaccept {idx} {
  control $idx shout
}
proc shout {idx args} {
  if {[join $args] != "" } {
    putserv "PRIVMSG #mijnkanaal :$args"
  }
  killdcc $idx
}

Deze spreel ik aan door middel van de volgende php code:
PHP:
1
2
3
4
5
6
7
8
$fp = fsockopen ("10.0.0.0", "4000", $errno, $errstr, 30);
if (!$fp)
  echo "$errstr ($errno)<br>\n";
else{
  fputs($fp, "PRIVMSG #mijnkanaal Blaat bericht\n");
  fclose ($fp);
  echo "done1";
}

Ik krijg echter telkens de foutmelding: Lost connection while identing. Ik heb op google al gezocht naar deze foutmelding, maar ben tot op heden niet tot een oplossing gekomen. Zou iemand mij mssn kunnen helpen :? Mssn dat iemand een soortgelijk probleem heeft gehad.

Acties:
  • 0 Henk 'm!

Verwijderd

het probleem is dat je een dcc connectie start (met listen) start in je eggdrop, en deze vereist niet per se ident, maar het duurt erg lang voordat ie iets doen zonder ident. Je zou eens moeten kijken naar de socket functie in tcl (http://www.hume.com/html84/mann/socket.html).
Ik weet niet hoe het met een "echte" eggdrop zit, maar een windrop is niet echt stabiel met sockets. Let wel op dat je connecties netjes afsluit bij oa rehash, want eggdrop/tcl doet het niet voor je :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kan ik dat hele ident gebeuren niet gewoon uitzetten voor dit script ofzoiets :?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 13 mei 2004 @ 18:13:
Kan ik dat hele ident gebeuren niet gewoon uitzetten voor dit script ofzoiets :?
je zou
Tcl:
1
listen 4000 script shoutaccept pub

kunnen proberen, omdat op die manier iedereen kan connecten en dus ook misschien niet gecheckt wordt op ident.. maar dat weet ik niet psies.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 13 mei 2004 @ 19:22:
[...]
je zou
Tcl:
1
listen 4000 script shoutaccept pub
Helaas, dit is syntax technisch niet mogelijk :(

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 13 mei 2004 @ 22:11:
[...]

Helaas, dit is syntax technisch niet mogelijk :(
uhm.. bietje raar dat het dan wel in manual staat :D
listen <port> <type> [options] [flag]
- listen <port> script <proc> [flag]
Description: accepts connections which are immediately routed to a proc. The proc is called with one parameter: the idx of the new connection. Flag may currently only be 'pub', which makes the bot allow anyone to connect.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 13 mei 2004 @ 22:25:
uhm.. bietje raar dat het dan wel in manual staat :D
Idd vaag :?

Kan het niet zo zijn dat ik in de eggdrop instellingen over het hoofd zie oid :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK, ik ben erachter dat het toch met de php-code te maken had. Ik heb daarom de code herschreven en heb nu het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$socket = @fsockopen ($botip, $botport, $null, $null, 30);
if (!$socket) {
  echo "Foutje";
}

if ($socket) {
  fwrite($socket, "$line\n");
  while (!feof($socket)) {
    echo fgets($socket, 128);
  }
  fclose($socket);
}

Het is echter zo dat dit ontzettend traag werkt. Nu heb ik al iets geprobeerd met stream_set_timeout, maar dit hielp niet. Het probleem komt hoogst waarschijnlijk door de while-loop. Wie kan mij helpen met een snellere oplossing?

[ Voor 9% gewijzigd door Verwijderd op 16-05-2004 21:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
*kick*

Acties:
  • 0 Henk 'm!

Verwijderd

/me blaat_schaap schopt trug

heb je nu al naar die socket meuk gekeken?
als je dat eerst ff doet en dan laat weten of dat gelukt is, want via de andere weg kan het gewoon niet sneller omdat het geen normaal data kanaal is maar partyline/botnet en daar moet je nu eenmaal inloggen en als beveiliging duurt dat ff (in ieder geval als je met normale verbinding aankomt -> een bot kan wel vrij snel connecten, en nee het lijkt me vooral geen goeie oplossing om je php script een eggdrop te laten nadoen).

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Een socket geeft geen eof terug als de verbinding open blijft. Je moet kijken of je je socket op non-blocking kunt zetten, dan gaat het wel sneller :).

Acties:
  • 0 Henk 'm!

Verwijderd

Shadowman schreef op 18 mei 2004 @ 16:25:
Een socket geeft geen eof terug als de verbinding open blijft. Je moet kijken of je je socket op non-blocking kunt zetten, dan gaat het wel sneller :).
bedoel je nu php sockets of tcl?
want in tcl merk je het wel als een connectie dicht gegooid is.
je moet gewoon de sockets van tcl gebruiken en die bijvoorbeeld een 1 laten terug sturen en dan php laten wachten totdat ie de 1 terug heeft (natuurlijk wel met timeout want er kan altijd iets mis gaan).

[ Voor 39% gewijzigd door Verwijderd op 18-05-2004 16:29 ]


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 18 mei 2004 @ 16:28:
[...]


bedoel je nu php sockets of tcl?
want in tcl merk je het wel als een connectie dicht gegooid is.
je moet gewoon de sockets van tcl gebruiken en die bijvoorbeeld een 1 laten terug sturen en dan php laten wachten totdat ie de 1 terug heeft (natuurlijk wel met timeout want er kan altijd iets mis gaan).
Je merkt aan beide kanten wel als een socket wordt dichtgegooid, alleen wordt er nu gewacht op een EOF die niet komt als php de socket moet sluiten. Het lijkt me het beste als de kant van TCL de socket dichtgooit omdat deze het laatst de data verstuurd.

Acties:
  • 0 Henk 'm!

Verwijderd

Shadowman schreef op 18 mei 2004 @ 16:32:
[...]

Je merkt aan beide kanten wel als een socket wordt dichtgegooid, alleen wordt er nu gewacht op een EOF die niet komt als php de socket moet sluiten. Het lijkt me het beste als de kant van TCL de socket dichtgooit omdat deze het laatst de data verstuurd.
Het is inderdaad een beetje jammer dat php geen sendcomplete kent, want daarna kan je zo de connectie dichtgooien. Daarom zou het waarschijnlijk wel beter dat je php met een non-blocking socket laat wachten totdat de connectie dicht is en dan idd vanuit TCL de socket dichtgooien (iets terug sturen hoeft dan niet eens meer).
Pagina: 1