Aller au contenu principal
Version: NEXT GEN

Serveur

Les serveurs permettent d'intéragir avec différentes API pour la livraison, la suspension ou l'expiration des services.

Interface : \App\Contracts\Provisioning\ServerTypeInterface

Class abstraite : \App\Abstracts\AbstractServerType

Création de la classe

L'interface App\Contracts\Provisioning\ServerTypeInterface doit être implémentée pour créer une nouvelle classe de serveur. Les principales méthodes à implémenter sont :

  • uuid() : Retourne l'UUID unique du type de serveur (le même que le produit).
  • title() : Retourne le titre du type de serveur.
  • findServer() : Trouve un serveur associé à un produit pour livrer le service.
  • createAccount() : Crée un compte sur le serveur pour un service.
  • suspendAccount() : Suspend le compte sur le serveur.
  • unsuspendAccount() : Réactive le compte.
  • expireAccount() : Expire le compte.
  • onRenew() : Action déclenchée lors du renouvellement d'un service.
  • upgradeService() : Permet de mettre à jour un service (pas encore utilisé).
  • downgradeService() : Permet de rétrograder un service (pas encore utilisé).
<?php 
// App\Contracts\Provisioning\CustomGameServerType.php
namespace App\Addons\Fund;

use App\Abstracts\AbstractServerType;
use App\DTO\Provisioning\ServiceStateChangeDTO;
use App\Models\Provisioning\Service;

class CustomGameServerType extends AbstractServerType
{
protected string $uuid = 'gameserver';
protected string $title = 'gameserver';

/**
* Crée un compte sur le serveur
*/
public function createAccount(Service $service): ServiceStateChangeDTO
{
// Logique pour créer le compte sur l'API distance
// Retourner l'état de changement de service
$data = $service->data; // Données lors de la commande
$config = \App\Addons\Fund\Models\GameServerConfig::where('product_id', $service->product_id)->first(); // Configuration du produit
return new ServiceStateChangeDTO($service, true, 'Account created successfully');
}

/**
* Suspend un compte sur le serveur
*/
public function suspendAccount(Service $service): ServiceStateChangeDTO
{
// Logique pour suspendre le compte
return new ServiceStateChangeDTO($service, true, 'Account suspended');
}

/**
* Réactive un compte sur le serveur
*/
public function unsuspendAccount(Service $service): ServiceStateChangeDTO
{
// Logique pour réactiver le compte
return new ServiceStateChangeDTO($service, true, 'Account unsuspended');
}

/**
* Expire un compte sur le serveur
*/
public function expireAccount(Service $service): ServiceStateChangeDTO
{
// Logique pour expirer le compte
return new ServiceStateChangeDTO($service, true, 'Account expired');
}

/**
* Teste la connexion au serveur
*/
public function testConnection(array $params): \App\DTO\Provisioning\ConnectionResponse
{
// Logique de test de connexion
return new \App\DTO\Provisioning\ConnectionResponse(200, 'Connection successful');
}
}

Enregister de la classe dans le produit

Pour associer cette classe de gestion de serveurs à un produit, vous devez implémenter la méthode server() dans la classe du produit.

public function server(): ?\App\Contracts\Provisioning\ServerTypeInterface
{
return new \App\Fund\CustomGameServerType(); // Associe le type de serveur CustomGameServerType au produit
}