/**
  *
  */
 public function test()
 {
     if (extension_loaded('xdebug')) {
         $this->assertTrue(true);
         return;
     }
     $gameVersion = 'tw';
     $pool = PdoFactory::makePool($gameVersion);
     $provider = new ActiveUidProvider($gameVersion, $pool);
     $now = time();
     $groupedUidList = $provider->generate($now - 60);
     foreach ($groupedUidList as $shardId => $uidList) {
         static::assertStringStartsWith('db', $shardId);
         static::assertTrue(is_array($uidList));
         static::assertEquals(range(0, count($uidList) - 1), array_keys($uidList));
     }
 }
Пример #2
0
<?php

/**
 * Created by PhpStorm.
 * User: Jiang Yu
 * Date: 2016/04/06
 * Time: 15:21.
 */
use DataProvider\User\ActiveUidProvider;
require __DIR__ . '/../../bootstrap.php';
spl_autoload_register(function ($className) {
    $classFile = str_replace('\\', '/', $className) . '.php';
    require $classFile;
});
$options = getopt('v', ['gv:']);
$verbose = isset($options['v']);
assert(isset($options['gv']), 'game version not defined');
$gameVersion = trim($options['gv']);
$lastActiveTimestamp = (new DateTime())->setTime(0, 0, 0)->getTimestamp();
$groupedUidList = ActiveUidProvider::generate($gameVersion, $lastActiveTimestamp, $verbose);
$stats = [];
array_walk($groupedUidList, function (array $uidList, $shardId) use(&$stats) {
    $count = count($uidList);
    $stats[$shardId] = $count;
});
dump($stats);
dump('Total user count: ' . array_sum($stats));
Пример #3
0
    $gameVersion = GAME_VERSION;
} else {
    assert(isset($options['gv']), 'game version not defined');
    $gameVersion = trim($options['gv']);
}
$interval = isset($options['interval']) ? $options['interval'] : 20;
$backStep = isset($options['bs']) ? $options['bs'] : $interval;
$round = isset($options['round']) ? $options['round'] : 100;
$lastActiveTimestamp = time() - $backStep;
$quitTimestamp = time() + $round * $interval;
if ($verbose) {
    $msg = sprintf('game version: %s, backStep=%d, interval=%d, round=%d, start at: %s, quit at: %s', $gameVersion, $backStep, $interval, $round, date('H:i:s', $lastActiveTimestamp), date('H:i:s', $quitTimestamp));
    dump($msg);
}
$myself = basename(__FILE__);
$uidProvider = new ActiveUidProvider($gameVersion, \Database\PdoFactory::makePool($gameVersion));
$shardList = ShardHelper::listShardId($gameVersion);
$queue = new UidQueue(UID_QUEUE_DIR, $gameVersion, $shardList);
$stepGenerator = WorkRoundGenerator::generate($lastActiveTimestamp, $quitTimestamp, $interval, $verbose);
foreach ($stepGenerator as $timestamp) {
    $msg = $myself . ': ' . date('c', $timestamp) . ' run with ts ' . date('c', $timestamp);
    appendLog($msg);
    $groupedUidList = $uidProvider->generate($lastActiveTimestamp);
    $deltaList = $uidProvider->getDeltaList();
    $totalCount = 0;
    foreach ($groupedUidList as $shardId => $shardUidList) {
        $shardCount = count($shardUidList);
        if ($shardCount === 0) {
            continue;
        }
        $verbose && appendLog(sprintf('%s: %s found %d active user, cost %s', $myself, $shardId, $shardCount, PHP_Timer::secondsToTimeString($deltaList[$shardId])));