|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Development::Tools 3rd Party Tools for EQEMu (DB management tools, front ends, etc...) |
09-18-2008, 03:38 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
oooo closer... but still some errors. I used exactly what you posted but changed the IP address and the username / password. Here is what I get when I browse to the page.
Code:
Server is UP
USER_NAME uptime Worldserver Uptime: 01d 06h 00m 47s
Warning: Invalid argument supplied for foreach() in /var/www/localhost/htdocs/game-servers/eq/status/eqstatus.php on line 122
Warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/localhost/htdocs/game-servers/eq/status/eqstatus.php on line 194
Warning: Invalid argument supplied for foreach() in /var/www/localhost/htdocs/game-servers/eq/status/eqstatus.php on line 194
Name Zone
It actually displays the username on the page. Where I put USER_NAME. It is however displaying the UP and uptime correctly.
Note: I can't log in a character for a few hours till I get home. So can't test that yet.
|
09-18-2008, 03:52 PM
|
Sarnak
|
|
Join Date: Aug 2007
Posts: 34
|
|
Are there any players on your server right now?
give me a sec and I'll add a case for if there is nobody one and it wont list those warnings
|
09-18-2008, 03:53 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
no players at the moment.
|
|
|
|
09-18-2008, 04:01 PM
|
Sarnak
|
|
Join Date: Aug 2007
Posts: 34
|
|
updated:
added check on line 121-3
added check on line 189
added class and level to player table
PHP Code:
<?php
class telnet {
// Variables
var $message = array();
var $connection;
// Connects to the World Telnet Server
function connect(){
// Open Socket Connection
$this->connection = fsockopen('127.0.0.1', 9000);
if(!$this->connection){
$this->message[] = "Error connecting to World Telnet Server";
return false;
}else{
fputs($this->connection, sprintf("%s\r", 'USER_NAME'));
usleep(125000);
fputs($this->connection, sprintf("%s\r", 'PASSWORD'));
usleep(125000);
return true;
}
}
// Close the Telnet Connection
function close(){
fclose($this->connection);
}
// Server Uptime
function uptime(){
fputs ($this->connection, "uptime\r");
usleep(125000);
while (!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("Uptime", $ret)) {
$ret = str_replace("$user", "", $ret);
return str_replace(">", "", $ret);
break;
}
}
}
// Zone Status
function zonestatus($zone=''){
fputs ($this->connection, sprintf("zonestatus %s\r", $zone));
usleep(125000);
while(!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("$Server:", $ret)){
echo "$ret \n <br>";
}
if(ereg("avail", $ret)){
echo "$ret \n <br>";
break;
}
}
}
// Kick Character from World Server
function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(4);
fputs($this->connection, sprintf("kick %s\r", $character));
$this->message[] = "Character has been kicked from server";
sleep(1);
}
// Send Character a Tell
function tell($character, $message){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(1);
$this->message[] = sprintf("Message Sent to Character: %s", $character);
}
// Send Server a OOC Message
function ooc($message){
fputs($this->connection, sprintf("ooc %s\r", $message));
sleep(1);
$this->message[] = "Message sent to OOC";
}
// Broadcast Message Server Wide
function broadcast($message){
fputs($this->connection, sprintf("broadcast %s\r", $message));
sleep(1);
$this->message[] = "Broadcast Message Sent to World Server";
}
// Who/Who All
function whoall($who=''){
fputs ($this->connection, sprintf("who%s\r", $who));
usleep(125000);
while (!feof($this->connection)) {
$ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){
$ret[++$x] = $ret_tmp;
}
if(ereg("online", $ret_tmp)){
break;
}
}
if( !is_array($ret) ) {
return;
}
// Process each line of the returned results
foreach ($ret as $key => $value) {
// Original Return
$players[$key]['original'] = $value;
// GM Status
if (preg_match("/\*.*\*/", $value, $matches)) {
$players[$key]['GM'] = trim($matches[0], "* ");
}
// Role/Anon, Level & Class
if (preg_match("/\[.*\]/", $value, $matches)) {
$tmp = explode(" ", trim($matches[0], "[] "));
if (!is_numeric($tmp[0])) {
$players[$key]['Visible'] = $tmp[0];
$players[$key]['Level'] = $tmp[1];
$players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " ");
} else {
$players[$key]['Level'] = $tmp[0];
$players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " ");
}
}
// Character's Name
if(preg_match("/\].*\(/", $value, $matches)){
$players[$key]['Name'] = trim($matches[0], "] (");
}
// Race
if(preg_match("/\(.*\)/", $value, $matches)){
$players[$key]['Race'] = trim($matches[0], "( )");
}
// Zone
if(preg_match("/zone:.*AccID:/", $value, $matches)){
$players[$key]['ZoneLong'] = substr($matches[0], 6, -7);
}
// Account ID
if(preg_match("/AccID:.*AccName:/", $value, $matches)){
$players[$key]['AcctID'] = substr($matches[0], 7, -9);
}
// Account Name
if(preg_match("/AccName:.*LSID:/", $value, $matches)){
$players[$key]['AcctName'] = substr($matches[0], 9, -6);
}
// Login Server ID
if(preg_match("/LSID:.*Status:/", $value, $matches)){
$players[$key]['LSID'] = substr($matches[0], 6, -8);
}
// Status
if(preg_match("/Status:.*/", $value, $matches)){
$players[$key]['Status'] = substr($matches[0], 8, 3);
}
}
// Return Player Array
return $players;
}
}
Class
$telnet = new telnet;
if($telnet->connect() ) {
// We are connected... yay!
echo "<h1>Server is <span style='background-color:green;'>UP</span></h1>";
echo "<p>" . $telnet->uptime() . "</p>";
$players = $telnet->whoall();
if( is_array($players) ) {
echo "<table><tr><td>Name</td><td>Class</td><td>Level</td><td>Zone</td></tr>";
foreach( array_keys($players) as $key) {
echo "<tr><td>" . $players[$key]['Name'] . "</td>";
echo "<td>" . $players[$key]['Class']. "</td>";
echo "<td>" . $players[$key]['Level']. "</td>";
echo "<td>" . $players[$key]['ZoneLong']. "</td><tr>";
}
echo "</table>";
} else {
echo "<p>Nobody is on</p>";
}
} else {
// OH NOS!
echo "<h1>Server is <span style='background-color:red;'>DOWN</span></h1><p>" . $telnet->message[0] ."</p>";
}
?>
|
|
|
|
09-18-2008, 04:09 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
nope just a big:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /var/www/localhost/htdocs/game-servers/eq/status/eqstatus.php on line 192
On the page. Not getting any of the uptime stuff now either. When I put it in gedit the colors of some of the text is not right. Something may not be closed right? I dunno, like I said I am just finishing up learning html and starting to move into php.
|
|
|
|
09-18-2008, 04:12 PM
|
Sarnak
|
|
Join Date: Aug 2007
Posts: 34
|
|
Quote:
Originally Posted by cubber
nope just a big:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /var/www/localhost/htdocs/game-servers/eq/status/eqstatus.php on line 192
On the page. Not getting any of the uptime stuff now either.
|
Oups! somehow "Class" made its way onto line 192. Removed:
PHP Code:
<?php
class telnet {
// Variables
var $message = array();
var $connection;
// Connects to the World Telnet Server
function connect(){
// Open Socket Connection
$this->connection = fsockopen('127.0.0.1', 9000);
if(!$this->connection){
$this->message[] = "Error connecting to World Telnet Server";
return false;
}else{
fputs($this->connection, sprintf("%s\r", 'USER_NAME'));
usleep(125000);
fputs($this->connection, sprintf("%s\r", 'PASSWORD'));
usleep(125000);
return true;
}
}
// Close the Telnet Connection
function close(){
fclose($this->connection);
}
// Server Uptime
function uptime(){
fputs ($this->connection, "uptime\r");
usleep(125000);
while (!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("Uptime", $ret)) {
$ret = str_replace("$user", "", $ret);
return str_replace(">", "", $ret);
break;
}
}
}
// Zone Status
function zonestatus($zone=''){
fputs ($this->connection, sprintf("zonestatus %s\r", $zone));
usleep(125000);
while(!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("$Server:", $ret)){
echo "$ret \n <br>";
}
if(ereg("avail", $ret)){
echo "$ret \n <br>";
break;
}
}
}
// Kick Character from World Server
function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(4);
fputs($this->connection, sprintf("kick %s\r", $character));
$this->message[] = "Character has been kicked from server";
sleep(1);
}
// Send Character a Tell
function tell($character, $message){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(1);
$this->message[] = sprintf("Message Sent to Character: %s", $character);
}
// Send Server a OOC Message
function ooc($message){
fputs($this->connection, sprintf("ooc %s\r", $message));
sleep(1);
$this->message[] = "Message sent to OOC";
}
// Broadcast Message Server Wide
function broadcast($message){
fputs($this->connection, sprintf("broadcast %s\r", $message));
sleep(1);
$this->message[] = "Broadcast Message Sent to World Server";
}
// Who/Who All
function whoall($who=''){
fputs ($this->connection, sprintf("who%s\r", $who));
usleep(125000);
while (!feof($this->connection)) {
$ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){
$ret[++$x] = $ret_tmp;
}
if(ereg("online", $ret_tmp)){
break;
}
}
if( !is_array($ret) ) {
return;
}
// Process each line of the returned results
foreach ($ret as $key => $value) {
// Original Return
$players[$key]['original'] = $value;
// GM Status
if (preg_match("/\*.*\*/", $value, $matches)) {
$players[$key]['GM'] = trim($matches[0], "* ");
}
// Role/Anon, Level & Class
if (preg_match("/\[.*\]/", $value, $matches)) {
$tmp = explode(" ", trim($matches[0], "[] "));
if (!is_numeric($tmp[0])) {
$players[$key]['Visible'] = $tmp[0];
$players[$key]['Level'] = $tmp[1];
$players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " ");
} else {
$players[$key]['Level'] = $tmp[0];
$players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " ");
}
}
// Character's Name
if(preg_match("/\].*\(/", $value, $matches)){
$players[$key]['Name'] = trim($matches[0], "] (");
}
// Race
if(preg_match("/\(.*\)/", $value, $matches)){
$players[$key]['Race'] = trim($matches[0], "( )");
}
// Zone
if(preg_match("/zone:.*AccID:/", $value, $matches)){
$players[$key]['ZoneLong'] = substr($matches[0], 6, -7);
}
// Account ID
if(preg_match("/AccID:.*AccName:/", $value, $matches)){
$players[$key]['AcctID'] = substr($matches[0], 7, -9);
}
// Account Name
if(preg_match("/AccName:.*LSID:/", $value, $matches)){
$players[$key]['AcctName'] = substr($matches[0], 9, -6);
}
// Login Server ID
if(preg_match("/LSID:.*Status:/", $value, $matches)){
$players[$key]['LSID'] = substr($matches[0], 6, -8);
}
// Status
if(preg_match("/Status:.*/", $value, $matches)){
$players[$key]['Status'] = substr($matches[0], 8, 3);
}
}
// Return Player Array
return $players;
}
}
$telnet = new telnet;
if($telnet->connect() ) {
// We are connected... yay!
echo "<h1>Server is <span style='background-color:green;'>UP</span></h1>";
echo "<p>" . $telnet->uptime() . "</p>";
$players = $telnet->whoall();
if( is_array($players) ) {
echo "<table><tr><td>Name</td><td>Class</td><td>Level</td><td>Zone</td></tr>";
foreach( array_keys($players) as $key) {
echo "<tr><td>" . $players[$key]['Name'] . "</td>";
echo "<td>" . $players[$key]['Class']. "</td>";
echo "<td>" . $players[$key]['Level']. "</td>";
echo "<td>" . $players[$key]['ZoneLong']. "</td><tr>";
}
echo "</table>";
} else {
echo "<p>Nobody is on</p>";
}
} else {
// OH NOS!
echo "<h1>Server is <span style='background-color:red;'>DOWN</span></h1><p>" . $telnet->message[0] ."</p>";
}
?>
|
|
|
|
09-18-2008, 04:17 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
Very nice! Cant wait to go home and log on to test! Only one thing I see that could be a security risk though is that the username used to establish the telnet connection is displayed before the uptime report:
Code:
Server is ONLINE
TELNET-USERNAME uptime Worldserver Uptime: 01d 06h 39m 52s
Nobody is online
How can it be hidden?
|
|
|
|
09-18-2008, 04:33 PM
|
Sarnak
|
|
Join Date: Aug 2007
Posts: 34
|
|
Quote:
Originally Posted by cubber
Very nice! Cant wait to go home and log on to test! Only one thing I see that could be a security risk though is that the username used to establish the telnet connection is displayed before the uptime report:
Code:
Server is ONLINE
TELNET-USERNAME uptime Worldserver Uptime: 01d 06h 39m 52s
Nobody is online
How can it be hidden?
|
Haven't properly tested the regex, but try this:
PHP Code:
<?php
class telnet {
// Variables var $message = array(); var $connection;
// Connects to the World Telnet Server function connect(){ // Open Socket Connection $this->connection = fsockopen('127.0.0.1', 9000);
if(!$this->connection){ $this->message[] = "Error connecting to World Telnet Server"; return false; }else{ fputs($this->connection, sprintf("%s\r", 'USER_NAME')); usleep(125000); fputs($this->connection, sprintf("%s\r", 'PASSWORD')); usleep(125000); return true; } } // Close the Telnet Connection function close(){ fclose($this->connection); } // Server Uptime function uptime(){ fputs ($this->connection, "uptime\r"); usleep(125000); while (!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("Uptime", $ret)) { $ret = str_replace("$user", "", $ret); return str_replace(">", "", $ret); break; } } } // Zone Status function zonestatus($zone=''){ fputs ($this->connection, sprintf("zonestatus %s\r", $zone)); usleep(125000); while(!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("$Server:", $ret)){ echo "$ret \n <br>"; } if(ereg("avail", $ret)){ echo "$ret \n <br>"; break; } } } // Kick Character from World Server function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(4); fputs($this->connection, sprintf("kick %s\r", $character)); $this->message[] = "Character has been kicked from server"; sleep(1); } // Send Character a Tell function tell($character, $message){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(1); $this->message[] = sprintf("Message Sent to Character: %s", $character); } // Send Server a OOC Message function ooc($message){ fputs($this->connection, sprintf("ooc %s\r", $message)); sleep(1); $this->message[] = "Message sent to OOC"; } // Broadcast Message Server Wide function broadcast($message){ fputs($this->connection, sprintf("broadcast %s\r", $message)); sleep(1); $this->message[] = "Broadcast Message Sent to World Server"; } // Who/Who All function whoall($who=''){ fputs ($this->connection, sprintf("who%s\r", $who)); usleep(125000);
while (!feof($this->connection)) { $ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){ $ret[++$x] = $ret_tmp; } if(ereg("online", $ret_tmp)){ break; } } if( !is_array($ret) ) { return; }
// Process each line of the returned results foreach ($ret as $key => $value) { // Original Return $players[$key]['original'] = $value;
// GM Status if (preg_match("/\*.*\*/", $value, $matches)) { $players[$key]['GM'] = trim($matches[0], "* "); } // Role/Anon, Level & Class if (preg_match("/\[.*\]/", $value, $matches)) { $tmp = explode(" ", trim($matches[0], "[] ")); if (!is_numeric($tmp[0])) { $players[$key]['Visible'] = $tmp[0]; $players[$key]['Level'] = $tmp[1]; $players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " "); } else { $players[$key]['Level'] = $tmp[0]; $players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " "); } } // Character's Name if(preg_match("/\].*\(/", $value, $matches)){ $players[$key]['Name'] = trim($matches[0], "] ("); } // Race if(preg_match("/\(.*\)/", $value, $matches)){ $players[$key]['Race'] = trim($matches[0], "( )"); } // Zone if(preg_match("/zone:.*AccID:/", $value, $matches)){ $players[$key]['ZoneLong'] = substr($matches[0], 6, -7); } // Account ID if(preg_match("/AccID:.*AccName:/", $value, $matches)){ $players[$key]['AcctID'] = substr($matches[0], 7, -9); } // Account Name if(preg_match("/AccName:.*LSID:/", $value, $matches)){ $players[$key]['AcctName'] = substr($matches[0], 9, -6); } // Login Server ID if(preg_match("/LSID:.*Status:/", $value, $matches)){ $players[$key]['LSID'] = substr($matches[0], 6, -8); } // Status if(preg_match("/Status:.*/", $value, $matches)){ $players[$key]['Status'] = substr($matches[0], 8, 3); } } // Return Player Array return $players; }
}
$telnet = new telnet; if($telnet->connect() ) { // We are connected... yay! echo "<h1>Server is <span style='background-color:green;'>UP</span></h1>"; $uptime = $telnet->uptime(); $uptime = preg_replace( '/^.*:/','' , $uptime ); echo "<p> Uptime: " . $uptime . "</p>"; $players = $telnet->whoall(); if( is_array($players) ) { echo "<table><tr><td>Name</td><td>Class</td><td>Level</td><td>Zone</td></tr>"; foreach( array_keys($players) as $key) { echo "<tr><td>" . $players[$key]['Name'] . "</td>"; echo "<td>" . $players[$key]['Class']. "</td>"; echo "<td>" . $players[$key]['Level']. "</td>"; echo "<td>" . $players[$key]['ZoneLong']. "</td><tr>"; } echo "</table>"; } else { echo "<p>Nobody is on</p>"; } } else { // OH NOS! echo "<h1>Server is <span style='background-color:red;'>DOWN</span></h1><p>" . $telnet->message[0] ."</p>"; } ?>
|
|
|
|
09-18-2008, 04:45 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
Perfect! Now I get :
Code:
The EverQuest Server is ONLINE
Uptime: 01d 07h 07m 53s
Nobody is online
after a bit of text modification of course. I also linked the page to my site's css stylesheet and it blends in nicely! Final test report will be in a couple hours after I get home and log in. Thanks a bunch!
|
09-18-2008, 04:55 PM
|
Sarnak
|
|
Join Date: Aug 2007
Posts: 34
|
|
Quote:
Originally Posted by cubber
Perfect! Now I get :
Code:
The EverQuest Server is ONLINE
Uptime: 01d 07h 07m 53s
Nobody is online
after a bit of text modification of course. I also linked the page to my site's css stylesheet and it blends in nicely! Final test report will be in a couple hours after I get home and log in. Thanks a bunch!
|
Good to hear. The true test will be to see if the player info gets displayed properly. I don't have a server to test it on, so please let me know how it goes.
Thanks,
spoon
|
09-18-2008, 05:48 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
You the man!
Player Online:
Code:
The EverQuest Server is ONLINE
Uptime: 01d 08h 11m 58s
Name Class Level Zone
Shaggy Disciple 51 nexus
Player Zoning:
Code:
The EverQuest Server is ONLINE
Uptime: 01d 08h 14m 35s
Name Class Level Zone
Shaggy (Unknown) zone: Unknown 0 (null)
Player Zoned:
Code:
The EverQuest Server is ONLINE
Uptime: 01d 08h 15m 55s
Name Class Level Zone
Shaggy Disciple 51 netherbian
|
09-22-2008, 01:29 PM
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
Nice work...
|
10-03-2008, 02:22 PM
|
Sarnak
|
|
Join Date: Sep 2006
Location: Germany
Posts: 82
|
|
I have started today to create a status server page. Its based on the one used on ascent wow servers.
current version http://codejunk.de/eq/test.xml
__________________
"Yes, the artwork is awful. I am an engineer, not an artist " - David H. Eberly
|
10-03-2008, 03:04 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
Nice, does it list character names when they are online? Right now I am looking at it and no one is online it just shows the zone info.
|
10-03-2008, 03:21 PM
|
Sarnak
|
|
Join Date: Sep 2006
Location: Germany
Posts: 82
|
|
The page is not finished yet. It will display all characters when they are online.
I will post the source when its finished!
__________________
"Yes, the artwork is awful. I am an engineer, not an artist " - David H. Eberly
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 04:25 AM.
|
|
|
|
|
|
|
|
|
|
|
|
|