Skip to content

Commit

Permalink
Merge pull request #391 from MineTrax/develop
Browse files Browse the repository at this point in the history
Fix: WebQuery improvements and other fixes
  • Loading branch information
Xinecraft authored Jun 14, 2024
2 parents 053dcfe + b0cc9ba commit d2ceea3
Show file tree
Hide file tree
Showing 195 changed files with 1,876 additions and 1,789 deletions.
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ BACKUP_DISK=local
BACKUP_ARCHIVE_PASSWORD=null
BACKUP_NOTIFICATION_EMAIL=

# Cloud Backup(works with cloudflare r2 or s3)
# Storage & Cloud Backup(works with cloudflare r2 or s3)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
Expand Down
11 changes: 6 additions & 5 deletions app/Http/Controllers/Admin/ServerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use App\Http\Requests\CreateServerRequest;
use App\Http\Requests\UpdateServerRequest;
use App\Jobs\CalculatePlayersJob;
use App\Jobs\ResyncPlayersTableJob;
use App\Jobs\DeleteServerJob;
use App\Models\MinecraftPlayer;
use App\Models\Server;
use App\Queries\Filters\FilterMultipleFields;
Expand Down Expand Up @@ -49,6 +49,7 @@ public function index()
'order',
'country_id',
'last_scanned_at',
'settings',
'created_at',
])
->with('country')
Expand Down Expand Up @@ -339,12 +340,12 @@ public function destroy(Server $server)
{
$this->authorize('delete', $server);

$server->delete();

ResyncPlayersTableJob::dispatch();
$server->settings = array_merge($server->settings, ['is_deleting' => true]);
$server->save();
DeleteServerJob::dispatch($server);

return redirect()->back()
->with(['toast' => ['type' => 'success', 'title' => __('Deleted Successfully'), 'body' => __('Server has been deleted permanently')]]);
->with(['toast' => ['type' => 'success', 'title' => __('Deletion Started'), 'body' => __('Server deletion has been started. It may take sometime to complete depending on number of players.')]]);
}

public function postSendCommandToServer(Server $server, Request $request)
Expand Down
20 changes: 20 additions & 0 deletions app/Http/Controllers/ServerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,24 @@ public function queryServerWithWebQueryProtocol(Server $server, MinecraftServerQ
return response()->json(['message' => __('Web Query Failed')], 500);
}
}

public function pingServerWithWebQueryProtocol(Server $server, MinecraftServerQueryService $queryService, GeolocationService $geolocationService)
{
try {
// Check if we got cache
$hasCache = Cache::get('server:webping:' . $server->id);
if ($hasCache) {
return json_decode($hasCache, true);
}

$queryData = $queryService->getServerPingWithPluginWebQueryProtocol($server->ip_address, $server->webquery_port);
if ($queryData) {
Cache::put('server:webping:' . $server->id, json_encode($queryData), 60);
}

return ($queryData);
} catch (\Exception $exception) {
return response()->json(['message' => __('Web Query Failed')], 500);
}
}
}
34 changes: 34 additions & 0 deletions app/Jobs/DeleteServerJob.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Jobs;

use App\Models\Server;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;

class DeleteServerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

/**
* Create a new job instance.
*/
public function __construct(private Server $server)
{
$this->onQueue('longtask');
}

/**
* Execute the job.
*/
public function handle(): void
{
$this->server->delete();

ResyncPlayersTableJob::dispatch();
}
}
5 changes: 2 additions & 3 deletions app/Jobs/ResyncPlayersTableJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@

use DB;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ResyncPlayersTableJob implements ShouldQueue, ShouldBeUnique
class ResyncPlayersTableJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

Expand All @@ -19,7 +18,7 @@ class ResyncPlayersTableJob implements ShouldQueue, ShouldBeUnique
*/
public function __construct()
{
//
$this->onQueue('longtask');
}

/**
Expand Down
9 changes: 9 additions & 0 deletions app/Services/MinecraftServerQueryService.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,13 @@ public function getServerStatusWithPluginWebQueryProtocol($serverHost, $serverPo

return $data;
}

public function getServerPingWithPluginWebQueryProtocol($serverHost, $serverPort)
{
$webQuery = new MinecraftWebQuery($serverHost, $serverPort);
$data = $webQuery->getPing();
$data = collect($data['data'])->recursive();

return $data;
}
}
19 changes: 15 additions & 4 deletions app/Utils/MinecraftQuery/MinecraftWebQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ public function getStatusQuery()
return $status;
}

public function getPing()
{
$data = $this->sendQuery('ping');

return $data;
}

public function checkPlayerOnline($playerUuid): bool
{
if (! Str::isUuid($playerUuid)) {
Expand All @@ -103,12 +110,16 @@ public function sendQuery($type, array $data = [])
$encrypted = $this->makePayload($type, $data);

$factory = new \Socket\Raw\Factory();
$socket = $factory->createClient("tcp://{$this->HOST}:{$this->PORT}", 10);
$socket = $factory->createClient("tcp://{$this->HOST}:{$this->PORT}", 5);
$text = $encrypted."\n";
$socket->write($text);
// Timeout after 5 seconds for webquery in case of no response
socket_set_option($socket->getResource(), SOL_SOCKET, SO_RCVTIMEO, ['sec' => 10, 'usec' => 0]);
$buf = $socket->read(102400);
// Timeout after 10 seconds for webquery in case of no response
socket_set_option($socket->getResource(), SOL_SOCKET, SO_RCVTIMEO, ['sec' => 5, 'usec' => 0]);
// read while we get data
$buf = '';
while ($read = $socket->read(4096)) {
$buf .= $read;
}
$socket->close();

$response = json_decode(trim($buf), true);
Expand Down
2 changes: 1 addition & 1 deletion config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
|
*/

'version' => '6.0.0',
'version' => '6.2.0',

/*
|--------------------------------------------------------------------------
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d2ceea3

Please sign in to comment.