ugrás a tartalomhoz

Kapcsolódás fsockopen-nel DC-re

Anonymous · 2005. Szep. 11. (V), 04.27
Hello,

Azt szeretnem meg tudni hogy hogyan lehet egy aktiv fsockopen kapcsolatban "meg alapitani", hogy a szervertol amelyre csatlakoztunk meg kaptunk-e egy bizonyos valaszt...

Egy Direct Connect YnHub-ra csatlakozok a dc protokol szerint kapok a szervertol egy $Lock <lock> Pk=<pk>| valaszt azonal ahogy a socket kapcsolat megnyilt, erre kell adjak egy $Key <key-generated-from-lock>|$ValidateNick <nick>| valaszt a szerver erre valaszol $HubName <hub-name>|$Hello KEFE2| es en erre kellene valaszoljam $MyINFO $ALL <nick> <intrest>$ $<speed>$<email>$<share>$|$Version 1.0091|$GetNickList|, a problemam az hogy nem tudom hogyan kellene a scriptet "varatni" a reply-k kuldesevel egesz adig mig a szerver nem valaszol pontosaban nem keri a megfelelo replyt, jelent pillanatban a scriptel idaig jutotam el:

<?php
require("test2.php");
$addr = "127.0.0.1";
$port = "411";
$fp = pfsockopen($addr, $port, $errno, $errstr, 1);
$KeyLockString = fgets($fp, 73);
$KeyLockString = substr($KeyLockString, 6);
if (!$fp) {
   echo "$errstr ($errno)<br />\n";
} else {
$KeyString = lock2key($KeyLockString);
$out = "\$Key $KeyString|\$ValidateNick KEFE2|\r\n";
$out .= "\$MyINFO \$ALL KEFE2 TestPHPBot Control\$ \$BOT1\$akarmi##kukac##valami.com\$0\$|\r\n";
$out .= "\$Version 1.0091|\r\n";
$out .= "\$GetNickList|\r\n";
fwrite($fp, $out);
$sockReply_t = fgets($fp, 128);
echo "$sockReply_t\n\n<br>";
echo fgets($fp, 128);
}
fclose($fp);
?>
a test2.php van a key2lock funkcio ami jelen pillanatban nem fontos es amugy mukodik (ha nem mukodne a server nem kuldene a $Hello| valaszt), de sajnos a fenti scriptem csak a $Hello| valaszig jutt el valahogy varatnom kellene a scriptet hogy NE kuldje a $MyINFO sort egesz adig mig a szerver nem keri ezt viszont sajnos nem tudom hogyan kellene meg oldanom...
 
1

szerintem

Anonymous · 2005. Szep. 11. (V), 09.30

$out = "\$Key $KeyString|\$ValidateNick KEFE2|\r\n";
fwrite($fp, $out);
utána ha fgets()-el megkapod a választ, akkor mehet tovabb. stream_set_timeout()-al meg betudod állítani a max várakozási időt.

üdv.: Zsolt
2

megoldva

Anonymous · 2005. Szep. 11. (V), 10.07
idokozben sikerult meg oldanom, a problema a \r\n volt ugyanis a dc protokolja ezt nem ismeri, mindent egyszere kell kuldenem | -el elvalasztva kulonben lezarja a csatlakozast es vegul time outal bontja a socketet igyhat igy nez ki a script loginolast kuldo resze:

<?php
$out = "\$Key $KeyString|";
$out .= "\$ValidateNick NICK|";
$out .= "\$MyPass JELSZO|";
$out .= "\$Version 1.0091|";
$out .= "\$GetNickList|";
$out .= "\$MyINFO \$ALL NICK PHP StatBot\$ \$BOT\$email##kukac##email.com\$0\$|";
$out .= "\$GetINFO NICK NICK|";
fwrite($fp, $out);
echo fgets($fp, 1028);
?>
mostmar csak a kilepes a gond, stream_set_timeout() nem jo mert azal ismetlodik az egesz parancs sor ujra es ujra azert pedig bannol a dc server... valami mas meg oldas kell a socket bontasara...