ZAM
Inventar
<?
/*
* ChatStream Klasse by Zam
* Quick & Dirty Code
*/
class ChatStream
{
/* Definitionen */
var $file;
var $running;
/* Klasseninitiierung
* Prüft ob das Stream-Datenbank-file existiert.
* Resettet die wichtigsten Variablen und weißt Werte zu
*/
function ChatStream($file = 'stream')
{
if(!@file_exists($file))
die(@sprintf('Streamfile not found: %s', $file));
$this->running = false;
unset($this->file);
$this->file = $file;
}
/*
* Diese Funktion styled den ausgelesenen Text je nach lust und Laune.
*/
function StyleStream($line) {
return @sprintf("%s<br>\n", $line);
}
/*
* Öffnen der Datenbank mit Rückgabe des Ergebnisses als Array();
*/
function filepointer() {
return @file($this->file);
}
/*
* Die Hauptfunktion
* Die im HTML Code versteckte Ausgabe des Wertes
* "<!-- Browser Bug //-->" ist notwendug da viele Browser bei
* inaktiven Streams die Verbindungsinformationen verlieren.
*/
function ShowStream()
{
$PingTime = 500;
$Ping = 0;
$this->running = true;
while($this->running)
{
$fp = $this->filepointer();
if(sizeof($fp)!=$nsize)
{
if ($Ping>0) { $Ping--; }
else {
$Ping = $PingTime;
echo "<!-- Browser Bug //-->\n";
flush();
}
$nfp = $this->filepointer();
$tline = @trim($nfp[sizeof($nfp)-1]);
if(!empty($tline))
{
$stream = $this->filepointer();
$nsize = @sizeof($stream);
$nline = @trim($stream[$nsize-1]);
echo $this->StyleStream($nline);
flush();
unset($stream, $nline, $tline);
}
}
usleep(100000);
}
}
}
Aufruf:
$stream = new ChatStream();
$stream->ShowStream();
Hinweis:
Es sollte vorher ein Template mit vollständigem HTML Kopf samt Body
Tag erstellt und ausgegeben werden. Zudem sollte darin bereits Content
bzw versteckter Content enthalten sein. Dies wird für einige Browser benötigt die
sonst zu wenig Daten erhalten.
Ausserdem ist dieser Stream leider nicht sehr ressourcenschonend da beinahe ein permanenter Zugriff auf eine Datei erfolgt. Und die Gefahr das Zeilen "geschluckt". werden besteht zudem auch.
Aber die Klasse dient als Grundbasis für einen Chatstream ohne Sockets für
alle Scriptkiddies mit durchschnittlichen Webspace und bietet einfachste Implemetationsmöglichkeiten auch für Substreams und Privat-Chats (Query).
Zudem ist das alles verdammt einfach und umfangreich erweiterbar.
Einsatzbeispiel: http://pcg.i-love-php-de
ps.: ich will endlich den
/*
* ChatStream Klasse by Zam
* Quick & Dirty Code
*/
class ChatStream
{
/* Definitionen */
var $file;
var $running;
/* Klasseninitiierung
* Prüft ob das Stream-Datenbank-file existiert.
* Resettet die wichtigsten Variablen und weißt Werte zu
*/
function ChatStream($file = 'stream')
{
if(!@file_exists($file))
die(@sprintf('Streamfile not found: %s', $file));
$this->running = false;
unset($this->file);
$this->file = $file;
}
/*
* Diese Funktion styled den ausgelesenen Text je nach lust und Laune.
*/
function StyleStream($line) {
return @sprintf("%s<br>\n", $line);
}
/*
* Öffnen der Datenbank mit Rückgabe des Ergebnisses als Array();
*/
function filepointer() {
return @file($this->file);
}
/*
* Die Hauptfunktion
* Die im HTML Code versteckte Ausgabe des Wertes
* "<!-- Browser Bug //-->" ist notwendug da viele Browser bei
* inaktiven Streams die Verbindungsinformationen verlieren.
*/
function ShowStream()
{
$PingTime = 500;
$Ping = 0;
$this->running = true;
while($this->running)
{
$fp = $this->filepointer();
if(sizeof($fp)!=$nsize)
{
if ($Ping>0) { $Ping--; }
else {
$Ping = $PingTime;
echo "<!-- Browser Bug //-->\n";
flush();
}
$nfp = $this->filepointer();
$tline = @trim($nfp[sizeof($nfp)-1]);
if(!empty($tline))
{
$stream = $this->filepointer();
$nsize = @sizeof($stream);
$nline = @trim($stream[$nsize-1]);
echo $this->StyleStream($nline);
flush();
unset($stream, $nline, $tline);
}
}
usleep(100000);
}
}
}
Aufruf:
$stream = new ChatStream();
$stream->ShowStream();
Hinweis:
Es sollte vorher ein Template mit vollständigem HTML Kopf samt Body
Tag erstellt und ausgegeben werden. Zudem sollte darin bereits Content
bzw versteckter Content enthalten sein. Dies wird für einige Browser benötigt die
sonst zu wenig Daten erhalten.
Ausserdem ist dieser Stream leider nicht sehr ressourcenschonend da beinahe ein permanenter Zugriff auf eine Datei erfolgt. Und die Gefahr das Zeilen "geschluckt". werden besteht zudem auch.
Aber die Klasse dient als Grundbasis für einen Chatstream ohne Sockets für
alle Scriptkiddies mit durchschnittlichen Webspace und bietet einfachste Implemetationsmöglichkeiten auch für Substreams und Privat-Chats (Query).
Zudem ist das alles verdammt einfach und umfangreich erweiterbar.
Einsatzbeispiel: http://pcg.i-love-php-de
ps.: ich will endlich den
Code:
Tag *g*