The Server Service provides direct access to server management operations on the Wings daemon, including creating, managing, and controlling game servers.
<?php
use MythicalSystems\SDK\Pterodactyl\PterodactylSDK;
$wings = PterodactylSDK::wingsOnly('wings.example.com', 8080, 'https', 'token');
$server = $wings->getServer();<?php
$servers = $server->listServers();
foreach ($servers as $serverData) {
echo "Server UUID: " . $serverData['uuid'] . "\n";
echo "Name: " . $serverData['name'] . "\n";
echo "Status: " . $serverData['state'] . "\n";
echo "Memory: " . $serverData['limits']['memory'] . " MB\n";
echo "---\n";
}<?php
$serverUuid = 'server-uuid-here';
$serverDetails = $server->getServer($serverUuid);
echo "Server UUID: " . $serverDetails['uuid'] . "\n";
echo "Name: " . $serverDetails['name'] . "\n";
echo "Status: " . $serverDetails['state'] . "\n";
echo "Memory Limit: " . $serverDetails['limits']['memory'] . " MB\n";
echo "CPU Limit: " . $serverDetails['limits']['cpu'] . "%\n";
echo "Disk Limit: " . $serverDetails['limits']['disk'] . " MB\n";
echo "Docker Image: " . $serverDetails['docker_image'] . "\n";<?php
$serverData = [
'uuid' => 'new-server-uuid',
'name' => 'My New Server',
'node' => 1,
'sftp' => [
'ip' => '0.0.0.0',
'port' => 2022
],
'limits' => [
'memory' => 1024,
'swap' => 0,
'disk' => 10240,
'io' => 500,
'cpu' => 100
],
'environment' => [
'SERVER_JARFILE' => 'server.jar',
'SERVER_MEMORY' => '1024',
'BUILD_NUMBER' => 'latest'
],
'startup' => 'java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}',
'docker_image' => 'quay.io/pterodactyl/core:java',
'allocations' => [
'default' => [
'ip' => '0.0.0.0',
'port' => 25565
]
]
];
$newServer = $server->createServer($serverData);
echo "Server created successfully with UUID: " . $newServer['uuid'];<?php
$serverUuid = 'server-uuid-here';
$updateData = [
'name' => 'Updated Server Name',
'limits' => [
'memory' => 2048,
'swap' => 0,
'disk' => 20480,
'io' => 1000,
'cpu' => 200
],
'environment' => [
'SERVER_MEMORY' => '2048'
]
];
$updatedServer = $server->updateServer($serverUuid, $updateData);
echo "Server updated successfully!";<?php
$serverUuid = 'server-uuid-here';
$server->deleteServer($serverUuid);
echo "Server deleted successfully!";<?php
$serverUuid = 'server-uuid-here';
$server->startServer($serverUuid);
echo "Server start command sent!";<?php
$serverUuid = 'server-uuid-here';
$server->stopServer($serverUuid);
echo "Server stop command sent!";<?php
$serverUuid = 'server-uuid-here';
$server->restartServer($serverUuid);
echo "Server restart command sent!";<?php
$serverUuid = 'server-uuid-here';
$server->killServer($serverUuid);
echo "Server kill command sent!";<?php
$serverUuid = 'server-uuid-here';
// Available commands: start, stop, restart, kill
$server->sendPowerCommand($serverUuid, 'start');
echo "Power command sent!";<?php
$serverUuid = 'server-uuid-here';
$command = 'say Hello World!';
$server->sendCommand($serverUuid, $command);
echo "Console command sent: $command";<?php
$serverUuid = 'server-uuid-here';
$lines = 100; // Number of lines to retrieve
$logs = $server->getServerLogs($serverUuid, $lines);
foreach ($logs as $log) {
echo $log . "\n";
}<?php
$serverUuid = 'server-uuid-here';
$console = $server->getServerConsole($serverUuid);
echo "Console output:\n";
echo $console;<?php
$serverUuid = 'server-uuid-here';
$resources = $server->getServerResources($serverUuid);
echo "CPU Usage: " . $resources['cpu'] . "%\n";
echo "Memory Usage: " . $resources['memory'] . " MB\n";
echo "Disk Usage: " . $resources['disk'] . " MB\n";
echo "Network RX: " . $resources['network']['rx'] . " bytes\n";
echo "Network TX: " . $resources['network']['tx'] . " bytes\n";<?php
function monitorServerResources($server, $serverUuid, $duration = 300) {
$startTime = time();
$data = [];
while ((time() - $startTime) < $duration) {
try {
$resources = $server->getServerResources($serverUuid);
$data[] = [
'timestamp' => time(),
'cpu' => $resources['cpu'],
'memory' => $resources['memory'],
'disk' => $resources['disk'],
'network' => $resources['network']
];
sleep(10); // Check every 10 seconds
} catch (Exception $e) {
echo "Error getting resources: " . $e->getMessage() . "\n";
sleep(30); // Wait longer on error
}
}
return $data;
}
// Monitor server for 5 minutes
$monitoringData = monitorServerResources($server, $serverUuid, 300);
echo "Collected " . count($monitoringData) . " data points\n";<?php
$serverUuid = 'server-uuid-here';
$status = $server->getServerStatus($serverUuid);
echo "Server Status: " . $status['state'] . "\n";
echo "Is Running: " . ($status['is_running'] ? 'Yes' : 'No') . "\n";
echo "Uptime: " . $status['uptime'] . " seconds\n";
echo "PID: " . ($status['pid'] ?? 'N/A') . "\n";<?php
function waitForServerState($server, $serverUuid, $targetState, $timeout = 300) {
$startTime = time();
while ((time() - $startTime) < $timeout) {
try {
$status = $server->getServerStatus($serverUuid);
if ($status['state'] === $targetState) {
return true;
}
sleep(5); // Check every 5 seconds
} catch (Exception $e) {
echo "Error checking status: " . $e->getMessage() . "\n";
sleep(10);
}
}
return false;
}
// Wait for server to start
if (waitForServerState($server, $serverUuid, 'running', 300)) {
echo "Server is now running!\n";
} else {
echo "Server failed to start within timeout\n";
}<?php
function bulkStartServers($server, $serverUuids) {
$results = [];
foreach ($serverUuids as $serverUuid) {
try {
$server->startServer($serverUuid);
$results[$serverUuid] = 'success';
} catch (Exception $e) {
$results[$serverUuid] = 'error: ' . $e->getMessage();
}
}
return $results;
}
$serverUuids = ['server1-uuid', 'server2-uuid', 'server3-uuid'];
$results = bulkStartServers($server, $serverUuids);
foreach ($results as $serverUuid => $result) {
echo "Server $serverUuid: $result\n";
}<?php
function bulkStopServers($server, $serverUuids) {
$results = [];
foreach ($serverUuids as $serverUuid) {
try {
$server->stopServer($serverUuid);
$results[$serverUuid] = 'success';
} catch (Exception $e) {
$results[$serverUuid] = 'error: ' . $e->getMessage();
}
}
return $results;
}
$serverUuids = ['server1-uuid', 'server2-uuid', 'server3-uuid'];
$results = bulkStopServers($server, $serverUuids);
foreach ($results as $serverUuid => $result) {
echo "Server $serverUuid: $result\n";
}<?php
$serverUuid = 'server-uuid-here';
$config = $server->getServerConfig($serverUuid);
echo "Server Name: " . $config['name'] . "\n";
echo "Docker Image: " . $config['docker_image'] . "\n";
echo "Startup Command: " . $config['startup'] . "\n";
echo "Memory Limit: " . $config['limits']['memory'] . " MB\n";
echo "CPU Limit: " . $config['limits']['cpu'] . "%\n";<?php
$serverUuid = 'server-uuid-here';
$environment = [
'SERVER_MEMORY' => '2048',
'SERVER_JARFILE' => 'server.jar',
'BUILD_NUMBER' => 'latest',
'EULA' => 'TRUE'
];
$server->updateServerEnvironment($serverUuid, $environment);
echo "Server environment updated!";<?php
use MythicalSystems\SDK\Pterodactyl\Wings\Exceptions\WingsRequestException;
use MythicalSystems\SDK\Pterodactyl\Wings\Exceptions\WingsConnectionException;
try {
$serverDetails = $server->getServer($serverUuid);
echo "Server details retrieved successfully\n";
} catch (WingsRequestException $e) {
echo "Request failed: " . $e->getMessage() . "\n";
} catch (WingsConnectionException $e) {
echo "Connection failed: " . $e->getMessage() . "\n";
} catch (Exception $e) {
echo "Unexpected error: " . $e->getMessage() . "\n";
}- Always check server status before performing operations
- Handle exceptions properly for all server operations
- Monitor server resources regularly
- Use appropriate timeouts for long-running operations
- Validate server UUIDs before operations
- Implement retry logic for transient failures
- Log server operations for debugging
<?php
function generateServerDashboard($server): string {
$dashboard = "🎮 Server Management Dashboard\n";
$dashboard .= "=============================\n\n";
try {
$servers = $server->listServers();
foreach ($servers as $serverData) {
$serverUuid = $serverData['uuid'];
$dashboard .= "📊 Server: {$serverData['name']} ({$serverUuid})\n";
$dashboard .= " Status: {$serverData['state']}\n";
$dashboard .= " Memory: {$serverData['limits']['memory']} MB\n";
// Get real-time resources
try {
$resources = $server->getServerResources($serverUuid);
$dashboard .= " CPU Usage: {$resources['cpu']}%\n";
$dashboard .= " Memory Usage: {$resources['memory']} MB\n";
} catch (Exception $e) {
$dashboard .= " Resource data unavailable\n";
}
$dashboard .= "\n";
}
} catch (Exception $e) {
$dashboard .= "❌ Error generating dashboard: " . $e->getMessage() . "\n";
}
return $dashboard;
}
// Generate and display dashboard
echo generateServerDashboard($server);