From 8cb4fe21caa4a9413425bd07db7b2ecf2ab2fad6 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 1 May 2024 01:31:35 +0300 Subject: [PATCH] implement message save to blockchain --- config/example.json | 26 ++++++- src/Server/Ratchet.php | 166 ++++++++++++++++++++++++++++++----------- 2 files changed, 143 insertions(+), 49 deletions(-) diff --git a/config/example.json b/config/example.json index d0530a7..ad277dd 100644 --- a/config/example.json +++ b/config/example.json @@ -13,6 +13,17 @@ { "namespace":"", "account":null + }, + "event": + { + "put": + { + "debug": + { + "enabled":true, + "template":"[{time}] [put] {host}#{crid} namespace: {name} transaction: {txid} left: {keva}" + } + } } }, "nps": @@ -56,7 +67,7 @@ { "response": [ - "\u001b[34m\u001b[1mWelcome to KevaChat!\u001b[0m", + "\u001b[36m\u001b[1mWelcome to KevaChat NPS!\u001b[0m", "\u001b[34mEnter captcha to confirm you are human\u001b[0m" ], "debug": @@ -73,7 +84,7 @@ { "success": [ - "\u001b[34mGood, enter your message (commit by dot)\u001b[0m" + "\u001b[34mWell, enter your message (dot to commit)\u001b[0m" ], "failure": [ @@ -84,13 +95,20 @@ { "success": [ - "\u001b[32mThanks, your message successfully sent!\u001b[0m" + "\u001b[34mThanks, your message successfully sent!\u001b[0m", + "\u001b[35mNS:{name}\u001b[0m", + "\u001b[35mID:{txid}\u001b[0m" ], "failure": { + "length": + [ + "\u001b[31mReached message length limit!\u001b[0m" + ], "internal": [ - "\u001b[31mSomething went wrong, please make your feedback!\u001b[0m" + "\u001b[31mSomething went wrong, please make your feedback!\u001b[0m", + "\u001b[36mhttps://github.com/kevachat/npsapp/issues\u001b[0m" ] } } diff --git a/src/Server/Ratchet.php b/src/Server/Ratchet.php index 9042e0b..d2b29dc 100644 --- a/src/Server/Ratchet.php +++ b/src/Server/Ratchet.php @@ -107,6 +107,9 @@ class Ratchet implements MessageComponentInterface // Init connection counter $connection->count = 0; + // Init connection message + $connection->message = ''; + // Debug open event on enabled if ($config->event->open->debug->enabled) { @@ -146,8 +149,124 @@ class Ratchet implements MessageComponentInterface // Init config namespace $config = $this->_config->nps->event->message; - // Captcha request first for unconfirmed connections - if (!$connection->confirmed) + // Debug message event on enabled + if ($config->debug->enabled) + { + print( + str_ireplace( + [ + '{time}', + '{host}', + '{crid}', + '{code}', + '{iter}', + '{sent}', + '{size}' + ], + [ + (string) date('c'), + (string) $connection->remoteAddress, + (string) $connection->resourceId, + (string) $connection->captcha, + (string) $connection->count, + (string) str_replace('%', '%%', $request), + (string) mb_strlen($request) + ], + $config->debug->template + ) . PHP_EOL + ); + } + + // Connection confirmed + if ($connection->confirmed) + { + // Check message commit by dot + if ($request == '.') + { + // Save massage to KevaCoin blockchain + if ($txid = $this->_kevacoin->kevaPut($this->_config->kevacoin->wallet->namespace, time(), $connection->message)) + { + // Return success response + $connection->send( + str_replace( + [ + '{name}', + '{txid}' + ], + [ + $this->_config->kevacoin->wallet->namespace, + $txid + ], + implode( + PHP_EOL, + $config->response->submit->success + ) . PHP_EOL + ) + ); + + // Print transaction debug info on enabled + if ($this->_config->kevacoin->event->put->debug->enabled) + { + print( + str_ireplace( + [ + '{time}', + '{host}', + '{crid}', + '{name}', + '{txid}', + '{keva}' + ], + [ + (string) date('c'), + (string) $connection->remoteAddress, + (string) $connection->resourceId, + (string) $this->_config->kevacoin->wallet->namespace, + (string) $txid, + (string) $this->_kevacoin->getBalance( + $this->_config->kevacoin->wallet->account + ) + ], + $this->_config->kevacoin->event->put->debug->template + ) . PHP_EOL + ); + } + } + + // Could not receive transaction, something went wrong + else + { + $connection->send( + implode( + PHP_EOL, + $config->response->submit->failure->internal + ) . PHP_EOL + ); + } + + // Close connection at this point + $connection->close(); + } + + // Complete message by new line sent + $connection->message .= $request . PHP_EOL; + + // Check total message length limit allowed by KevaCoin protocol + if (mb_strlen($connection->message) > 3074) + { + $connection->send( + implode( + PHP_EOL, + $config->response->submit->failure->length + ) . PHP_EOL + ); + + $connection->close(); + } + } + + // Captcha request + else { // Request match captcha if ($request == $connection->captcha) @@ -174,52 +293,9 @@ class Ratchet implements MessageComponentInterface ) . PHP_EOL ); - // Drop connection or do something else.. $connection->close(); } } - - // @TODO compose request to KevaCoin, return transaction ID - else - { - // Save massage to kevacoin - /* - $connection->send( - implode( - PHP_EOL, - $config->response->captcha->failure - ) . PHP_EOL - ); - */ - } - - // Debug message event on enabled - if ($config->debug->enabled) - { - print( - str_ireplace( - [ - '{time}', - '{host}', - '{crid}', - '{code}', - '{iter}', - '{sent}', - '{size}' - ], - [ - (string) date('c'), - (string) $connection->remoteAddress, - (string) $connection->resourceId, - (string) $connection->captcha, - (string) $connection->count, - (string) str_replace('%', '%%', $request), - (string) mb_strlen($request) - ], - $config->debug->template - ) . PHP_EOL - ); - } } public function onClose(