PHP Classes

File: test/messageReader.php

Recommend this page to a friend!
  Classes of Kjell-Inge Gustafsson   MesQ PHP Queue Management System   test/messageReader.php   Download  
File: test/messageReader.php
Role: Example script
Content type: text/plain
Description: Example script
Class: MesQ PHP Queue Management System
Queue and pull messages store in directory files
Author: By
Last change: 1.05
Date: 3 years ago
Size: 3,055 bytes
 

Contents

Class file image Download
<?php
/**
 * MesQ, PHP disk based message lite queue manager
 *
 * Copyright 2021 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
 * Link https://kigkonsult.se
 * Package MesQ
 * Version 1.05
 * License LGPL
 *
 * This file is a part of MesQ.
 *
 * This php script read test messages
 *
 * messageReader.php
 * Usage
 * php -f /path/to/MesQ/test/messageReader.php arg1 arg2 arg3
 *
 * arguments :
 * 0 : '/path/to/MesQ/test/messageReader.php'
 * 1 : directory
 * 2 : read chunk size
 * 3 : return chunk size
 * 4 : opt prio, single or min, force queueType to PRIO
 * 5 : opt prio max, only if min is set
 */
declare( strict_types = 1 );
namespace
Kigkonsult\MesQ;

use function
getmypid;
use function
intval;
use function
microtime;
use function
realpath;
use function
sprintf;

include
realpath( '../autoload.php' );
include
realpath( './test.inc.php' );

static
$FMT1 = 'pid %d %s : message %s%s';
static
$FMT2 = 'pid %s : %sread %d messages in %s sec%s';
static
$WAIT = 'wait for any prio message';
static
$FMT4 = 'count messages : ';
static
$FMT5 = 'count bytes : ';
static
$SP0 = '';
static
$TTL = 'total ';

// load args and prepare config
list( $queueName, $directory ) = getArgv1and2( $argv );
$config = [ MesQ::QUEUENAME => $queueName, MesQ::DIRECTORY => $directory ];
if(
isArgSet( $argv, 3 )) {
   
$config[MesQ::READCHUNKSIZE] = intval( $argv[3] );
}
if(
isArgSet( $argv, 4 )) {
   
$config[MesQ::RETURNCHUNKSIZE] = intval( $argv[4] );
}
// set up
$time = microtime( true );
$pid = getmypid();
$prio = null;
$mesq = MesQ::singleton( $config );
if(
isArgSet( $argv, 5 )) {
   
$prio = intval( $argv[5] );
    if(
isArgSet( $argv, 6 )) {
       
$prio = [ $prio, intval( $argv[6] ) ];
    }
   
$mesq->setQueueType( MesQ::PRIO );
}
$mesq = MesQ::singleton( $config ); // test, should be factory method
echo $mesq->configToString() . PHP_EOL;
// check fot opt priority messages
$cnt = $cnt2 = 0;
$time2 = $time;
if(
$mesq->isQueueTypePrio()) {
    while( !
$mesq->messageExist( $prio )) {
        if(
true !== time_nanosleep( 0, 10000000 )) { // 0.01 sec
           
sleep( 1 );
        }
        echo
$WAIT . PHP_EOL; // test
   
} // end while
} // end if
echo $FMT4 . var_export( $mesq->size(), true ) . PHP_EOL; // test ###
echo $FMT5 . $mesq->GetDirectorySize() . PHP_EOL;
// retrieve messages
while( $message = $mesq->getMessage( $prio )) {
   
$cnt += 1;
    echo
sprintf( $FMT1, $pid, getTime( $time ), $message->ToString(), PHP_EOL );
   
$cnt2 += 1;
    if(
0 == ( $cnt % 1000 )) {
        echo
sprintf( $FMT2, $pid, $SP0, $cnt2, getTime( $time2 ), PHP_EOL );
       
$time2 = microtime( true );
       
$cnt2 = 0;
        echo
$FMT4 . var_export( $mesq->size(), true ) . PHP_EOL; // test ###
       
echo $FMT5 . $mesq->GetDirectorySize() . PHP_EOL;
    }
// end if
    /*
    // should emulate some php logic here, wait 10000000 (0.01) sec,
    if( true !== time_nanosleep( 0, 10000000 )) {
        sleep( 1 );
    }
    */
} // end while
echo sprintf( $FMT2, $pid, $TTL, $cnt, getTime( $time ), PHP_EOL );