Gå til innhold

Lage backbone til IRC chat


Anbefalte innlegg

Skrevet (endret)

Helluen

Prøver å lage en backend i php til en IRC chat.

Har klart å lage en simpel bot (den mottar og evt svarer på mld fra server)

Men jeg vil kunne sende kommandoer (RFC 1459) via feks en vanlig input boks, mens loopen som holder tilkoblingen oppe kjører.

 

Jeg har tenkt ut det at en løsning er å kjøre 2 script, et hovedscript som holder tilkoblingen oppe, og et script som kjøres når det skal skrives noe.

 

Her er det jeg har nå

<?php
//Sende
function sendmeld($tekst, $sck){
$bufer = fputs($sck, $tekst . "\r\n");
echo "[".date("H:i:s")."]"."<" . $tekst . "\r\n";
}

//Info
$server = '192.168.1.180';
$port = 8005;
$nick = 'nick';
$pass = 'pass';
$shutdown = 'shutdown';
$logg = 'log.txt';

//Koble til irc
set_time_limit(0);
$forbind = pfsockopen($server, $port);
if(!$forbind) {
die('Feil under tilkobling');
}
//Koble til log
$fp = fopen($logg,'w');
//Sende innlogging
echo sendmeld("PASS " .$pass, $forbind);
echo sendmeld("NICK " .$nick, $forbind);
echo sendmeld("USER " .$nick.' - - :Testmaster', $forbind);

//Holde tilkoblingen åpen
$i = 0; //TEST
$feof = feof($forbind); //TEST
while(!$feof) {
$dato = "[".date("H:i:s")."]";
$bufer = fgets($forbind, 512);
echo "[".date("H:i:s")."]".">" . $bufer . "\r\n";
$replace = array("\r", "\n", ":");
$bufer = str_replace($replace, "", $bufer);
$delt = explode(" ", $bufer, 4);
$from = explode("!", $delt[0]);
print_r($delt); //TEST
////System
//Brukernavn
if($delt[1] == 433) {
	$feof = true;
}
//PING
if($delt[0] == 'PING'){
	sendmeld('PONG ' . $delt[1], $forbind);
}
//Shutdown command
if($delt[1] == 'PRIVMSG' && $delt[3] == $shutdown) {
	echo sendmeld('QUIT :Killed by '.$delt[0], $forbind);
	$feof = true;
}
if($delt[1] == 'JOIN') {
	$out .= '-- '.$nick.' kommer inn i '.$delt[2] . "\r\n";
}
////Meldinger
//Hallo i nytt rom
if($delt[1] == 366) {
	$out .= $dato.' '.$nick.' -> Hei på dere' . "\r\n";
	sendmeld('PRIVMSG #Main :Hei på dere', $forbind);
}
//Svar test
if($delt[1] == 'PRIVMSG' && $delt[3] == 'svar') {
	if($delt[2] == $nick) {
		$to = $from[0];
	} else {
		$to = $delt[2];
	}
	sendmeld('PRIVMSG '.$to.' Hei', $forbind);
}
//Samtale listing
if($delt[1] == 'PRIVMSG' && $delt[2] == '#Main') {
	$out .= $dato.' '.$from[0].' -> '.$delt[3] . "\r\n";


}
if(!empty($out)) {
	fputs($fp, $out);
	unset($out);
}
  echo $i++."\n"; //TEST
  if($i == 50) {
  	$feof = true; //Hindre loop, stoppe på 50
  }
}
sendmeld('QUIT :End of script', $forbind);
fclose ($forbind);
fclose ($fp);
unlink($logg);
echo 'Closed';
?>

 

Som dere ser så bruker jeg pfsockopen() til streamen.

Det jeg har tenkt på er å bruke samme stream i script nr. 2.

Er dette overhode mulig?

 

Takker for all hjelp

Endret av AlecTBM
Videoannonse
Annonse
Skrevet

Hvorfor er ikke PHP egnet?

Greit at det ikke er det kjappeste i verden, men det er php jeg kan. Men for all del, bare gi meg tips til hva jeg kan bytte det til

Skrevet

PHPs minnebehandling består i hovedsak av å frigjøre alt minne når skriptet er ferdig gjør det ubrukelig til noe som skal kjøre over lengre tid. (Tenk C/C++/etc, men uten å ha peiling på hva som må frigjøres, hva som automatisk blir frigjort, og når).

Skrevet
PHPs minnebehandling består i hovedsak av å frigjøre alt minne når skriptet er ferdig gjør det ubrukelig til noe som skal kjøre over lengre tid. (Tenk C/C++/etc, men uten å ha peiling på hva som må frigjøres, hva som automatisk blir frigjort, og når).

I PHP5.3 kommer circular GC.

 

Men med enkle funksjoner og bra programmering så burde dette scriptet kunne kjøre veldig lenge. Men det ville kanskje vært enklere i Java, eller et annet programmeringsspråk.

Skrevet

"Veldig lenge" er strengt tatt ikke lenge nok. Hvis man skal lage en daemon bør den ikke ha noen memory-leaks, selv om det bare er et par KB/dagen.

Skrevet

Når jeg tenker over så kommer dette neppe til å gå, la meg gjenta at dette IKKE er til en bot, men til en chat. Det jeg har tenkt er å kjøre dette scriptet for hver bruker som bruker chatten.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...