if (!$ms_client->connect()) {
    exit(1);
}
$params = array("presentation" => "doPresentation", "set" => "doSet", "req" => "doReq", "internal" => "doInternal");
$ms_client->subscribe($params);
//=== Req values ===
$rec = SQLSelect("SELECT * FROM msnodeval WHERE req=1;");
$total = count($rec);
if ($total) {
    for ($i = 0; $i < $total; $i++) {
        $ms->cmd($rec[$i]['NID'] . ";" . $rec[$i]['SID'] . ";2;" . $rec[$i]['ACK'] . ";" . $rec[$i]['SUBTYPE'] . ";");
    }
}
//== Cycle ===
$previousMillis = 0;
while ($ms_client->proc()) {
    // Send
    $rec = SQLSelectOne("SELECT * FROM mssendstack;");
    if ($rec['ID']) {
        //echo "Send: ".print_r($rec, true)."\n";
        $expire = $rec['EXPIRE'] < time();
        // Del not ACK packet
        if ($rec['ACK'] == 0 || $expire) {
            SQLExec("DELETE FROM mssendstack WHERE ID='" . $rec['ID'] . "'");
        }
        if ($expire) {
            $sens = SQLSelectOne("SELECT * FROM msnodeval WHERE NID='" . $rec['NID'] . "' AND SID='" . $rec['SID'] . "' AND SUBTYPE='" . $rec['SUBTYPE'] . "';");
            if ($sens['LINKED_OBJECT'] && $sens['LINKED_PROPERTY']) {
                echo "Expire send set rollback : " . $sens['LINKED_OBJECT'] . '.' . $sens['LINKED_PROPERTY'] . "=" . $sens['VAL'] . "\n";
                // Rollback value if not comin
                setGlobal($sens['LINKED_OBJECT'] . '.' . $sens['LINKED_PROPERTY'], $rec['VAL'], array($ms->name => '0'));
$params = array("presentation" => "doPresentation", "set" => "doSet", "req" => "doReq", "internal" => "doInternal");
$ms_client->subscribe($params);
//=== Req values ===
$rec = SQLSelect("SELECT * FROM msnodeval WHERE req=1;");
$total = count($rec);
if ($total) {
    for ($i = 0; $i < $total; $i++) {
        $ms->cmd($rec[$i]['NID'] . ";" . $rec[$i]['SID'] . ";2;" . $rec[$i]['ACK'] . ";" . $rec[$i]['SUBTYPE'] . ";");
    }
}
//== Cycle ===
$previousMillis = 0;
while (true) {
    //echo "Process\n";
    //	echo  date("Y-m-d H:i:s u")." Proc start\n";
    $ret = $ms_client->proc();
    if ($ret === false) {
        echo "Error process\n";
        sleep(5);
        // Sleep 5 seconds
        continue;
    }
    //	echo  date("Y-m-d H:i:s u")." Send\n";
    // Send
    $rec = SQLSelectOne("SELECT * FROM mssendstack;");
    if ($rec['ID']) {
        //echo "Send: ".print_r($rec, true)."\n";
        $expire = $rec['EXPIRE'] < time();
        // Del not ACK packet
        if ($rec['ACK'] == 0 || $expire) {
            SQLExec("DELETE FROM mssendstack WHERE ID='" . $rec['ID'] . "'");