Example #1
0
 public function run(array $context = [])
 {
     if ($this->adb->keyInput(Manager::readConfig($context, self::CFG_EVENT_CODE, $this->eventCode))) {
         return Manager::RET_LOOP;
     }
     return $this->errorReturnCode;
 }
Example #2
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->adb = ADB::instance($manager, $config[Manager::RES_CONFIG_APP]);
     $this->savePath = Manager::readConfig($config, self::CFG_SCREEN_SHOT_PATH, $manager->path . DIRECTORY_SEPARATOR . 'screenshot' . DIRECTORY_SEPARATOR);
     $this->defaultDistance = Manager::readConfig($config, self::CFG_DEFAULT_DISTANCE, 8);
 }
Example #3
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->setDelayProvider(Manager::readConfig($config, self::CFG_DELAY_PROVIDER, 'usleep'));
     $this->setRandomProvider(Manager::readConfig($config, self::CFG_RANDOM_PROVIDER, 'mt_rand'));
     $this->delayUnit = Manager::readConfig($config, self::CFG_DELAY_UNIT, 1000);
 }
Example #4
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->dialogs = Manager::readConfig($config, self::CFG_ERROR_DIALOGS);
     $this->loading = Manager::readConfig($config, self::CFG_LOADING_ICON);
     $this->interval = intval(Manager::readConfig($config, self::CFG_CHECK_INTERVAL, self::DEFAULT_INTERVAL));
     $this->timeout = intval(Manager::readConfig($config, self::CFG_TIMEOUT, self::DEFAULT_TIMEOUT));
     if (!is_array($this->dialogs)) {
         throw new \InvalidArgumentException('Dialogs is not an array');
     }
     array_walk($this->dialogs, [__CLASS__, 'assertDialogRule']);
     Screen::assertRules($this->loading);
     if ($this->interval <= 0) {
         $this->interval = self::DEFAULT_INTERVAL;
         $this->logger->warning('%s: Interval is not positive integer, use default value %u.', [__CLASS__, self::DEFAULT_INTERVAL]);
     }
     $this->delayOffset = intval($this->delay * 0.15);
     if ($this->timeout < $this->interval * 3) {
         $this->timeout = $this->interval * 3;
         $this->logger->warning('%s: Timeout is not science, use minimum value %u.', [__CLASS__, $this->timeout]);
     }
     $this->screen = Screen::instance($manager, $this->app);
     $this->delay = Delay::instance($manager, $this->app);
     $this->input = Input::instance($manager, $this->app);
 }
Example #5
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->rules = Manager::readConfig($config, self::CFG_RULES);
     $this->button = Manager::readConfig($config, self::CFG_BUTTON);
     Screen::assertRules($this->rules);
     Position::assertRect($this->button);
 }
Example #6
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->leftCount = Manager::readConfig($config, self::CFG_COUNT, 1);
     if (!is_int($this->leftCount) || $this->leftCount < 1) {
         $this->leftCount = 1;
         $this->logger->warn("%s: A non-negative integer as tick count is required, assume 1.", [__CLASS__]);
     }
 }
Example #7
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->test = Manager::readConfig($config, self::CFG_TEST_KEY, self::DEFAULT_TEST_VALUE);
     $this->testRequired = Manager::readConfig($config, self::CFG_TEST_REQUIRED_KEY);
     $this->provider = $manager->readCallback(Manager::readConfig($config, self::CFG_TEST_PROVIDER, function () {
         return self::STUB_METHOD_CLOSURE;
     }));
 }
Example #8
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $config = $config + $manager->getBaseComponentConfig($this->app);
     $this->package = Manager::readConfig($config, self::CFG_PACKAGE_NAME);
     $this->adb = ADB::instance($manager, $this->app);
     $this->detector = LoadingDetection::instance($manager, $this->app);
     $this->screen = Screen::instance($manager, $this->app);
     $this->input = Input::instance($manager, $this->app);
 }
Example #9
0
 public function run(array $context = [])
 {
     $symbol = Manager::readConfig($context, self::CFG_SYMBOL, $this->defaultSymbol);
     try {
         $this->screen->capture($symbol, Manager::readConfig($context, self::CFG_ORIENTATION, $this->defaultOrientation));
         $this->logger->info('Screen info: %uX%u mode %s, rotate fix is %s.', [$this->screen->width, $this->screen->height, $this->screen->orientation, $this->screen->rotateFix ? 'On' : 'Off']);
         return Manager::RET_LOOP;
     } catch (\RuntimeException $e) {
         return $this->errorReturnCode;
     }
 }
Example #10
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->setRetryLimit(Manager::readConfig($config, Manager::RES_CONFIG_RETRY, self::DEFAULT_RETRY_LIMIT));
     $this->setRetryDelay(Manager::readConfig($config, Manager::RES_CONFIG_RETRY, self::DEFAULT_RETRY_DELAY));
     $this->retryOffset = intval($this->retryDelay / 10);
     $this->position = Position::instance($manager, $this->app);
     $this->delay = Delay::instance($manager, $this->app);
     $this->adb = ADB::instance($manager, $this->app);
     $this->scr = Screen::instance($manager, $this->app);
 }
Example #11
0
 public function run(array $context = [])
 {
     $ocr = Number::instance($this->manager, $this->app);
     $align = Manager::readConfig($context, 'align', 'L');
     $mode = Manager::readConfig($context, 'scan', Number::SCAN_FIXED);
     $rule = Manager::readConfig($context, 'rule', 'Test');
     $color = Manager::readConfig($context, 'color', '000000');
     $rect = $align == 'L' ? Position::makeRectangle(0, 0, 1.0, 1.0) : Position::makeRectangle(1.0, 1.0, 0, 0);
     $result = $ocr->ocr($rule, $rect, [Number::CFG_COLOR => $color, Number::CFG_SCAN_MODE => $mode, Number::CFG_WIDTH => 0.25, Number::CFG_MARGIN => 0]);
     $this->logger->info('OCR Result %s', [$result]);
     return Manager::RET_LOOP;
 }
Example #12
0
 public function run(array $context = [])
 {
     $ocr = Number::instance($this->manager, $this->app);
     $point = Manager::readConfig($context, 'point');
     Position::assertPoint($point);
     $this->logger->info('Test for X=%.4f, Y=%.4f', $point[Position::X], $point[Position::Y]);
     $ocr->setRules(['Test' => ['J' => [$point], 'T' => 1, 'F' => 0]]);
     $rect = Position::makeRectangle(0, 0, 1, 1);
     for ($i = 0; $i <= 9; $i++) {
         $this->screen->load(sprintf('tests/digits/%u.png', $i), Screen::PORTRAIT);
         $this->logger->info('OCR Result for digit %u is %s', [$i, $ocr->ocr('Test', $rect, [Number::CFG_COLOR => '000000', Number::CFG_WIDTH => 1, Number::CFG_MARGIN => 0])]);
     }
     return Manager::RET_LOOP;
 }
Example #13
0
 public function run(array $context = [])
 {
     $filename = Manager::readConfig($context, self::CFG_FILENAME);
     $orientation = Manager::readConfig($context, self::CFG_ORIENTATION, Screen::AUTO);
     if (!is_readable($filename)) {
         throw new \RuntimeException("Image '{$filename}' is unable to read.");
     }
     try {
         $this->screen->load($filename, $orientation);
         $this->logger->info('Screen info: %uX%u mode %s, rotate fix is %s.', [$this->screen->width, $this->screen->height, $this->screen->orientation, $this->screen->rotateFix ? 'On' : 'Off']);
         return Manager::RET_LOOP;
     } catch (\Exception $e) {
         $this->logger->error("Image '{$filename}' is corrupt or not a PNG file.");
         return $this->errorReturnCode;
     }
 }
Example #14
0
 public function run(array $context = [])
 {
     $rectangles = Manager::readConfig($context, self::CFG_RECTANGLES);
     if (!is_array($rectangles) || ($count = count($rectangles)) === 0) {
         return Manager::RET_LOOP;
     }
     $delay = (int) Manager::readConfig($context, self::CFG_DELAY, self::DEFAULT_DELAY);
     if ($delay <= 0) {
         $delay = self::DEFAULT_DELAY;
         $this->logger->warning('%s: delay milliseconds should be positive integer. Use default value %u.', [__CLASS__, $delay]);
     }
     $delayOffset = intval($delay / 10);
     $this->logger->info('Tap screen for %u point(s) with delay %u-%u ms.', [$count, $delay, $delayOffset]);
     foreach ($rectangles as $rectangle) {
         $this->input->tapInRect($rectangle);
         $this->delay->delayOffset($delay, $delayOffset);
     }
     return Manager::RET_LOOP;
 }
Example #15
0
 /**
  * @param Manager $manager
  * @param string $app
  * @return static
  */
 public static function instance(Manager $manager, $app = Manager::COMMON)
 {
     return $manager->getService($app, get_called_class());
 }
Example #16
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->message = Manager::readConfig($config, self::CFG_MESSAGE, static::DEFAULT_MESSAGE);
 }
Example #17
0
 public function run(array $context = [])
 {
     $this->test = Manager::readConfig($context, self::CFG_TEST, $this->test);
     return Manager::RET_LOOP;
 }
Example #18
0
 public function setDefaultConfig(&$config)
 {
     $this->defaultMode = self::checkMode(Manager::readConfig($config, self::CFG_SCAN_MODE));
     $this->defaultColor = $this->screen->parseColor(Manager::readConfig($config, self::CFG_COLOR, 'FFFFFF:4'));
     $this->defaultWidth = self::checkDistance(Manager::readConfig($config, self::CFG_WIDTH, 0.001));
     $this->defaultMargin = self::checkDistance(Manager::readConfig($config, self::CFG_MARGIN, 0), true);
     return $this;
 }
Example #19
0
File: Run.php Project: acgrid/adbot
    $options['verbose'] = null;
}
if ($options['v'] === 'vv' || strcasecmp($options['verbose'], 'debug') === 0) {
    $log_level = Logger::DEBUG;
} elseif ($options['v'] === 'v' || strcasecmp($options['verbose'], 'info') === 0) {
    $log_level = Logger::INFO;
} elseif ($options['v'] === false || $options['verbose'] === false) {
    $log_level = Logger::NOTICE;
} else {
    $log_level = Logger::WARNING;
}
$logger = new Logger('main');
$logger->pushHandler(new StreamHandler(sprintf('%s/log/%s.log', __DIR__, date('Ymd-His')), min($log_level, Logger::INFO)));
$logger->pushHandler(new StreamHandler('php://output', $log_level));
try {
    if (!isset($argv[++$opt_num])) {
        throw new \InvalidArgumentException(sprintf("Usage: %s [-v[v|vv]|--verbose [debug|info]] CONFIG.json", $argv[0]));
    }
    $config_file = $argv[$opt_num];
    if (!is_readable($config_file)) {
        throw new \RuntimeException("Config file is not readable.");
    }
    $config = json_decode(file_get_contents($config_file), true);
    if (!is_array($config)) {
        throw new \InvalidArgumentException('Config file is not valid JSON: ' . json_last_error_msg());
    }
    exit(Manager::run($config, $logger));
} catch (\Exception $e) {
    $logger->error($e->getMessage());
    echo $e->getTraceAsString();
}
Example #20
0
 public function __construct(Manager $manager, array $config)
 {
     parent::__construct($manager, $config);
     $this->setRandomProvider(Manager::readConfig($config, self::CFG_RANDOM_PROVIDER, 'mt_rand'));
     $this->maxSlope = Manager::readConfig($config, self::CFG_MAX_SLOPE, mt_getrandmax());
 }
Example #21
0
 /**
  * @depends testComponent
  */
 public function testSharedData()
 {
     $key = 'foo';
     $value = 'bar';
     $manager = Manager::factory($this->configSkeleton, $this->logger);
     $this->assertSame($value, $manager->getAppShared(self::NS_APP, $key, $value));
     $value = 'another';
     $manager->setAppShared(self::NS_APP, $key, $value);
     $this->assertSame($value, $manager->getAppShared(self::NS_APP, $key));
 }