From 10296791a0d9210913a973b9e3f4fd7c21c78a2b Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa <32319439+darkterminal@users.noreply.github.com> Date: Sat, 25 Dec 2021 12:52:59 +0700 Subject: [PATCH 1/8] Create install-print-service.php Create windows service and running in PHPDESKTOP --- examples/install-print-service.php | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 examples/install-print-service.php diff --git a/examples/install-print-service.php b/examples/install-print-service.php new file mode 100644 index 0000000..1b931ad --- /dev/null +++ b/examples/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); From 664b2313e35b8953d3124d39dbf3c89f673c2e4d Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa <32319439+darkterminal@users.noreply.github.com> Date: Sat, 25 Dec 2021 13:07:04 +0700 Subject: [PATCH 2/8] Create printer-server.php php file that provice print service will regitstered to windows as service using nssm.exe --- examples/printer-server.php | 95 +++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 examples/printer-server.php diff --git a/examples/printer-server.php b/examples/printer-server.php new file mode 100644 index 0000000..8442c94 --- /dev/null +++ b/examples/printer-server.php @@ -0,0 +1,95 @@ + (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 + // ..... + + 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; +} From 22737e5b5dc7b6c5fc2845cb8d64c81e933bc041 Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa <32319439+darkterminal@users.noreply.github.com> Date: Sat, 25 Dec 2021 13:12:21 +0700 Subject: [PATCH 3/8] Create remove-print-service.php Remove Windows Print Service (On Shutdown Application) --- examples/remove-print-service.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 examples/remove-print-service.php diff --git a/examples/remove-print-service.php b/examples/remove-print-service.php new file mode 100644 index 0000000..d7d9180 --- /dev/null +++ b/examples/remove-print-service.php @@ -0,0 +1,25 @@ + Date: Sat, 25 Dec 2021 13:16:01 +0700 Subject: [PATCH 4/8] Update printer-server.php Add example print hello world to receipt printer --- examples/printer-server.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/examples/printer-server.php b/examples/printer-server.php index 8442c94..535fb5f 100644 --- a/examples/printer-server.php +++ b/examples/printer-server.php @@ -45,7 +45,15 @@ 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!" ); From f469e4a496da7fcbde7996e24b601698037e23de Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa <32319439+darkterminal@users.noreply.github.com> Date: Sat, 25 Dec 2021 13:18:12 +0700 Subject: [PATCH 5/8] Create index.php --- examples/index.php | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 examples/index.php diff --git a/examples/index.php b/examples/index.php new file mode 100644 index 0000000..f26c875 --- /dev/null +++ b/examples/index.php @@ -0,0 +1,80 @@ + + + + + + Printer Server + + + + + + + +
+ Printer Server + +
+
+
+ + MAC Address: | HOST: | Waiting... +
+ + + + + From 9046a185748c311556ac75b28cac48caabbdd784 Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa Date: Sat, 25 Dec 2021 13:24:22 +0700 Subject: [PATCH 6/8] Group Example into Folder --- examples/{ => create-windows-print-service}/index.php | 0 .../{ => create-windows-print-service}/install-print-service.php | 0 examples/{ => create-windows-print-service}/printer-server.php | 0 .../{ => create-windows-print-service}/remove-print-service.php | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename examples/{ => create-windows-print-service}/index.php (100%) rename examples/{ => create-windows-print-service}/install-print-service.php (100%) rename examples/{ => create-windows-print-service}/printer-server.php (100%) rename examples/{ => create-windows-print-service}/remove-print-service.php (100%) diff --git a/examples/index.php b/examples/create-windows-print-service/index.php similarity index 100% rename from examples/index.php rename to examples/create-windows-print-service/index.php diff --git a/examples/install-print-service.php b/examples/create-windows-print-service/install-print-service.php similarity index 100% rename from examples/install-print-service.php rename to examples/create-windows-print-service/install-print-service.php diff --git a/examples/printer-server.php b/examples/create-windows-print-service/printer-server.php similarity index 100% rename from examples/printer-server.php rename to examples/create-windows-print-service/printer-server.php diff --git a/examples/remove-print-service.php b/examples/create-windows-print-service/remove-print-service.php similarity index 100% rename from examples/remove-print-service.php rename to examples/create-windows-print-service/remove-print-service.php From d27d2323f12667dcedf6578917d16c4d79b2f8de Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa Date: Sat, 25 Dec 2021 13:33:01 +0700 Subject: [PATCH 7/8] Add README.md in example direcotry --- .../create-windows-print-service/README.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 examples/create-windows-print-service/README.md diff --git a/examples/create-windows-print-service/README.md b/examples/create-windows-print-service/README.md new file mode 100644 index 0000000..51bf1f7 --- /dev/null +++ b/examples/create-windows-print-service/README.md @@ -0,0 +1,30 @@ +# 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 + +## 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 From 04a1d8785370c136a82b52f797220f5d24945a65 Mon Sep 17 00:00:00 2001 From: Imam Ali Mustofa Date: Sat, 25 Dec 2021 13:35:17 +0700 Subject: [PATCH 8/8] Add README.md in example direcotry --- examples/create-windows-print-service/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/create-windows-print-service/README.md b/examples/create-windows-print-service/README.md index 51bf1f7..e2276a4 100644 --- a/examples/create-windows-print-service/README.md +++ b/examples/create-windows-print-service/README.md @@ -8,6 +8,7 @@ This example explain how to create and remove windows print service with nssm.ex - 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 ```