Ошибка сокета синхронизации BioMetric FingerPrint - PHP - PullRequest
0 голосов
/ 09 ноября 2018

Я использую устройства Matrix Cosec BioMetric для системы управления посещаемостью. Я кодировал синхронизировать биометрические удары в режиме реального времени. Но службы слушателей автоматически останавливаются.

Подробности журнала ошибок:

-- Socket Err: 2018-11-08 10:56:30New Client Connected

-- Socket Err: 2018-11-08 10:56:30Triggering Hook 'handle_connect' for 'CONNECT'

-- Socket Err: 2018-11-08 10:56:30<-- String?

-- Socket Err: 2018-11-08 10:56:300@103.92.200.253 --> [SND_EVT&91118&1&08112018&225421&101&490&0&40&0&&]

-- Socket Err: 2018-11-08 10:56:30Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:56:32<-- [ACK_EVT&91118&]

-- Socket Err: 2018-11-08 10:56:32<-- String?

-- Socket Err: 2018-11-08 10:56:32Client 0 from 103.92.200.253 Disconnecting    

-- Socket Err: 2018-11-08 10:56:46New Client Connected

-- Socket Err: 2018-11-08 10:56:46Triggering Hook 'handle_connect' for 'CONNECT'    

-- Socket Err: 2018-11-08 10:56:46<-- String?

-- Socket Err: 2018-11-08 10:56:460@103.92.200.253 --> [SND_EVT&88248&1&08112018&225343&101&153&0&40&0&&]    

-- Socket Err: 2018-11-08 10:56:46Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:56:48<-- [ACK_EVT&88248&]    

-- Socket Err: 2018-11-08 10:56:48<-- String?     

-- Socket Err: 2018-11-08 10:56:48Client 0 from 103.92.200.253 Disconnecting    

-- Socket Err: 2018-11-08 10:56:53New Client Connected    

-- Socket Err: 2018-11-08 10:56:53Triggering Hook 'handle_connect' for 'CONNECT'    

-- Socket Err: 2018-11-08 10:56:53<-- String?     

-- Socket Err: 2018-11-08 10:56:530@103.92.200.253 --> [SND_EVT&88249&1&08112018&225350&101&148&0&40&0&&]    

-- Socket Err: 2018-11-08 10:56:53Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:56:54<-- [ACK_EVT&88249&]    

-- Socket Err: 2018-11-08 10:56:54<-- String?     

-- Socket Err: 2018-11-08 10:56:54Client 0 from 103.92.200.253 Disconnecting    

-- Socket Err: 2018-11-08 10:56:56New Client Connected    

-- Socket Err: 2018-11-08 10:56:56Triggering Hook 'handle_connect' for 'CONNECT'    

-- Socket Err: 2018-11-08 10:56:56<-- String?     

-- Socket Err: 2018-11-08 10:56:560@103.92.200.253 --> [SND_EVT&88250&1&08112018&225353&101&132&0&40&0&&]    

-- Socket Err: 2018-11-08 10:56:56Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:56:58<-- [ACK_EVT&88250&]    

-- Socket Err: 2018-11-08 10:56:58<-- String?     

-- Socket Err: 2018-11-08 10:56:58New Client Connected    

-- Socket Err: 2018-11-08 10:56:58Triggering Hook 'handle_connect' for 'CONNECT'    

-- Socket Err: 2018-11-08 10:56:58<-- String?     

-- Socket Err: 2018-11-08 10:56:581@103.92.200.253 --> [SND_EVT&68845&1&08112018&225351&101&430&0&40&0&&]    

-- Socket Err: 2018-11-08 10:56:58Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:57:00<-- [ACK_EVT&68845&]    

-- Socket Err: 2018-11-08 10:57:00<-- String?     

-- Socket Err: 2018-11-08 10:57:00Client 0 from 103.92.200.253 Disconnecting    

-- Socket Err: 2018-11-08 10:57:00Client 1 from 103.92.200.253 Disconnecting    

-- Socket Err: 2018-11-08 10:57:03New Client Connected    

-- Socket Err: 2018-11-08 10:57:03Triggering Hook 'handle_connect' for 'CONNECT'    -

-- Socket Err: 2018-11-08 10:57:03<-- String?     

-- Socket Err: 2018-11-08 10:57:030@103.92.200.253 --> [SND_EVT&88251&1&08112018&225400&101&478&0&40&0&&]    

-- Socket Err: 2018-11-08 10:57:03Triggering Hook 'handle_input' for 'INPUT'    

-- Socket Err: 2018-11-08 10:57:05<-- [ACK_EVT&88251&]    

-- Socket Err: 2018-11-08 10:57:05<-- String?     

-- Socket Err: 2018-11-08 10:57:05Client 0 from 103.92.200.253 Disconnecting

Ниже приведен мой код для tcpListenerService.php

<?php
require_once (dirname ( dirname ( __FILE__ ) ) . "/include/config.php");
require_once ( LIBRARY_PATH. "/SocketServer.class.php"); // Include the File
date_default_timezone_set('Asia/Kolkata');


if(!isset($_GET["ip"])||!isset($_GET['port']))
        die("Enter Valid IP & POrt");

        $ip = trim($_GET["ip"]);
        $port=trim($_GET['port']);
        $close = null;





if(isset($_GET["close"]))
    $close=1;
$server = new SocketServer($ip,$port,$close); // Create a Server binding to the given ip address and listen to port 31337 for connections
//$server = new SocketServer("192.168.100.110",1500);
$server->max_clients = 10; // Allow no more than 10 people to connect at a time
$server->hook("CONNECT","handle_connect"); // Run handle_connect every time someone connects
$server->hook("INPUT","handle_input"); // Run handle_input whenever text is sent to the server
$server->infinite_loop(); // Run Server Code Until Process is terminated.



function handle_connect($server,$client,$input){

    SocketServer::socket_write_smart($client->socket,"String? ","");

}


function handle_input($server,$client,$input){  

    // You probably want to sanitize your inputs here
    $trim = trim($input); // Trim the input, Remove Line Endings and Extra Whitespace.

    $result = explode("&", $trim);




    //for date and time conversions
    $dt = $result[3];
    $year=substr($dt,4);
    $month=substr($dt,2,2);
    $date=substr($dt,0,2);
    $ty=$result[4];
    $hr=substr($ty,0,2);
    $min=substr($ty,2,2);
    $sec= substr($ty,4,5);


    $date_time = date("Y-m-d", strtotime("$date-$month-$year")) . ' ' . date('H:i:s', strtotime("$hr:$min:$sec"));

    //get the device IP

    $device_ip=$client->{"ip"};


    try {
        // open the connection to the database - $host, $user, $password, $database should already be set
        //connect to the master DB
        $masterconn = mysqli_connect ( MASTER_DB_HOST, MASTER_DB_USER, MASTER_DB_PASSWORD, MASTER_DB_NAME );


        // did it work?
        if (mysqli_connect_errno()) {
            throw new Exception("Failed to connect to MySQL: " . mysqli_connect_error());
        }


        //get the appropriate company mapped for the device IP
        $query=mysqli_query($masterconn,"SELECT c.company_id,d.company_db_name
                FROM company_biometric_devices_ip c
                INNER JOIN company_details d ON c.company_id = d.company_id
                WHERE device_ip ='$device_ip'");

        $devices=array();
        //get the multiple companies for single device
        while($row = mysqli_fetch_array($query,MYSQLI_ASSOC))
            $devices[] = $row;

        // did it has values?
        if (!$devices) {
            throw new Exception("No Company Found for the device [{$device_ip}]");
        }

        //loop and connect it to the company database
        foreach($devices as $device){
            $company_id=$device["company_id"];
            $company_name=DB_PREFIX.$device['company_db_name'];


        //connect with the company DB Insert the data into the biometrics table
        $conn = mysqli_connect ( MASTER_DB_HOST, MASTER_DB_USER, MASTER_DB_PASSWORD,$company_name);
        if (mysqli_connect_errno()) {
            throw new Exception("Failed to connect to Company Db [ $company_name]: " . mysqli_connect_error());
        }


        $stmt=mysqli_prepare($conn, "INSERT INTO employee_biometric (date_time,employee_id,ip,event_seq_no,event_id) 
                (SELECT '$date_time',$result[6],'$device_ip','$result[1]','$result[5]' FROM device_users WHERE ref_id='$result[6]');");

        //$stmt = mysqli_prepare ($conn,"INSERT INTO employee_biometric (employee_id,date_time,ip,company_id) VALUES (?,?,?,?)" );
        //mysqli_stmt_bind_param ($stmt, 'ssss',$result[6],$date_time,$client->{"ip"},$company_id);

        if (!$res = mysqli_stmt_execute ( $stmt ))
            throw new Exception("MySQL Error: " . mysqli_error ($conn));
        if($res)
            $summary_insert = "CALL ATTENDANCE_SUMMARY_INSERT($result[6],'{$date_time}')";
            $query=mysqli_query($conn,$summary_insert);
            SocketServer::socket_write_smart($client->socket,"[ACK_EVT&{$result[1]}&]");// Send the Client back the String
            SocketServer::socket_write_smart($client->socket,"String? ",""); // Request Another String
        if(mysqli_stmt_affected_rows($stmt)>0)
            break;
    }
    }catch (Exception $e) {
        SocketServer::log($e->getMessage()."String: $trim"." IP: $device_ip",6);
    }


}

Мой сервер и устройство автоматически отключаются, как исправить то же самое. Я проверил в конкретном порту также в открытом состоянии.

...