SessionHeart.php 1.2 KB
<?php

namespace Lackoxygen\TiktokShop\Supervisor\Session;

use Lackoxygen\TiktokShop\Contracts\SessionInterface;
use Lackoxygen\TiktokShop\Util\Json;

class SessionHeart
{
    protected static ?SessionHeart $sessionHeart = null;

    public function __construct()
    {
        SessionMemory::init();
    }

    public static function new(): SessionHeart
    {
        if (is_null(static::$sessionHeart)) {
            static::$sessionHeart = new static();
        }

        return static::$sessionHeart;
    }

    public function keepalive()
    {
        SessionMemory::each(function (SessionInterface $session) {
            if ($session->effective()) {
                return;
            }
            $session->refresh();
        });
    }

    public function __destruct()
    {
        $watch = false;
        $serializes = [];
        SessionMemory::each(function (SessionInterface $session) use (&$watch, &$serializes) {
            $serializes[] = serialize($session);
            if (!$watch && $session->watch()) {
                $watch = true;
            }
        });
        if ($watch) {
            SessionMemory::persistence(Json::marshal($serializes));
        }
    }
}