diff --git a/examples/create-windows-print-service/README.md b/examples/create-windows-print-service/README.md new file mode 100644 index 0000000..e2276a4 --- /dev/null +++ b/examples/create-windows-print-service/README.md @@ -0,0 +1,31 @@ +# Create & Remove Windows Print Service +This example explain how to create and remove windows print service with nssm.exe and communicate with browser with websocket server. + +## Requirements: +- Install nssm http://nssm.cc/download and store into root directory +- Create ESCPOS PHP (In my case, I use https://github.com/mike42/escpos-php) to communicate with ESCPOS Printer Devices in www directory +- Install Hoa Project / Workerman to create websocket server to communicate with browser + - Hoa Project (Read Only Repository) + - Workerman +- Create log file to store printer status and activities in www directory +- set this value `"start_fullscreen": true` in `settings.json` + +## Directery structure +``` +php/ + - php.exe +www/ + vendor/ + composer.json + composer.lock + - index.php + - install-print-service.php + - remove-print-service.php + - printer-server.php + - printer.log +nssm.exe +``` + +## If this example may useful for you, please give me feedback +- metions @darkterminal +- or send me email to ddarkterminal@pm.me diff --git a/examples/create-windows-print-service/index.php b/examples/create-windows-print-service/index.php new file mode 100644 index 0000000..f26c875 --- /dev/null +++ b/examples/create-windows-print-service/index.php @@ -0,0 +1,80 @@ + + + + + + Printer Server + + + + + + + +
+ Printer Server + +
+
+
+ + MAC Address: | HOST: | Waiting... +
+ + + + + diff --git a/examples/create-windows-print-service/install-print-service.php b/examples/create-windows-print-service/install-print-service.php new file mode 100644 index 0000000..1b931ad --- /dev/null +++ b/examples/create-windows-print-service/install-print-service.php @@ -0,0 +1,33 @@ + (Read Only Repository) + - Workerman +- Create log file to store printer status and activities in www directory + +**/ + +// nssm.exe in root directory +$nssm = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'nssm.exe'; +// php file that provice print service will regitstered to windows as service using nssm.exe +$service = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'www' . DIRECTORY_SEPARATOR . 'printer-server.php'; +// php.exe for running php file inside service +$php = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'php.exe'; + +// Execute nssm.exe command to register php file to windows service +exec($nssm . ' install PrinterServerServiceRunner ' . $php . ' ' . $service); +// Execute nssm.exe command to start windows service has been registered +exec($nssm . ' start PrinterServerServiceRunner'); + +// Create printer log file +$logfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'printer.log'; +$timestamps = date('Y-m-d H:i:s'); +// Put log into that file when service is successfully install and running on machine +file_put_contents($logfile, "[$timestamps][INFO] Service has been install and registered on your machine" . PHP_EOL); diff --git a/examples/create-windows-print-service/printer-server.php b/examples/create-windows-print-service/printer-server.php new file mode 100644 index 0000000..535fb5f --- /dev/null +++ b/examples/create-windows-print-service/printer-server.php @@ -0,0 +1,103 @@ + (Read Only Repository) + - Workerman +- Create log file to store printer status and activities in www directory + +**/ + +date_default_timezone_set("Asia/Jakarta"); + +use Mike42\Escpos\Printer +use Mike42\Escpos\PrintConnectors\WindowsPrintConnector; + +require_once dirname(__FILE__) . '/vendor/autoload.php'; + +$websocket = new Hoa\Websocket\Server( + new Hoa\Socket\Server('ws://127.0.0.1:8889') +); + +$websocket->on('open', function (Hoa\Event\Bucket $bucket) { + $message = createMessage('info', 'New connection open! '); + sendToAll($bucket, $message); + logger( $message ); + return; +}); + +$websocket->on('message', function (Hoa\Event\Bucket $bucket) { + $bucketData = $bucket->getData(); + $message = $bucketData['message']; + + $data = json_decode($message, true); + + sendToAll( $bucket, createMessage('info', 'metadata: ' . $data['from']) ); + logger( createMessage('info', 'metadata: ' . $data['from']) ); + sendToAll( $bucket, createMessage('info', 'active_printer: ' . $data['printer_name']) ); + logger( createMessage('info', 'active_printer: ' . $data['printer_name']) ); + + try { + + // write your own php ESCPOS scripts + // ..... or use this example + // Print a "Hello world" to receipt printer + /** + $connector = new WindowsPrintConnector($data['printer_name']); + $printer = new Printer($connector); + $printer->text("Hello world\n"); + $printer->cut(); + $printer->close(); + **/ + + sendToAll( $bucket, createMessage('info', "notifiy: Receipt has been printered!" ); + logger( createMessage('info', "notifiy: Receipt has been printered!" ); + + } catch (Exception $e) { + sendToAll( $bucket, createMessage('error', "Couldn't print to this printer: " . $e->getMessage()) ); + logger( createMessage('error', "Couldn't print to this printer: " . $e->getMessage()) ); + } + + return; +}); + +$websocket->on('close', function (Hoa\Event\Bucket $bucket) { + echo 'Connection closed', "\n"; + sendToAll($bucket, createMessage('info', 'connection closed!')); + logger( createMessage('info', 'connection closed!') ); + return; +}); + +$websocket->run(); + +function sendToAll( $bucket, $message ) +{ + $bucket->getSource()->broadcast($message); +} + +function logger( $message ) +{ + $logfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'printer.log'; + if ( !file_exists($logfile) ) { + touch($logfile); + } + + $longline = count(file($logfile)); + if ( $longline >= 1500 ) { + file_put_contents($logfile, createMessage('info', 'New connection open!')); + } + + file_put_contents($logfile, $message, FILE_APPEND); +} + +function createMessage( $type = 'info', $message ) +{ + $timestamps = date('Y/m/d H:i:s'); + $log = strtoupper($type); + return "[$timestamps][$log] $message" . PHP_EOL; +} diff --git a/examples/create-windows-print-service/remove-print-service.php b/examples/create-windows-print-service/remove-print-service.php new file mode 100644 index 0000000..d7d9180 --- /dev/null +++ b/examples/create-windows-print-service/remove-print-service.php @@ -0,0 +1,25 @@ +