Browse Source

implement message save to blockchain

main
ghost 7 months ago
parent
commit
8cb4fe21ca
  1. 26
      config/example.json
  2. 154
      src/Server/Ratchet.php

26
config/example.json

@ -13,6 +13,17 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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"
]
}
}

154
src/Server/Ratchet.php

@ -107,6 +107,9 @@ class Ratchet implements MessageComponentInterface @@ -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,79 +149,152 @@ class Ratchet implements MessageComponentInterface @@ -146,79 +149,152 @@ class Ratchet implements MessageComponentInterface
// Init config namespace
$config = $this->_config->nps->event->message;
// Captcha request first for unconfirmed connections
if (!$connection->confirmed)
{
// Request match captcha
if ($request == $connection->captcha)
// Debug message event on enabled
if ($config->debug->enabled)
{
$connection->confirmed = true;
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->captcha->success
$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
);
}
}
// Captcha request invalid
// Could not receive transaction, something went wrong
else
{
$connection->confirmed = false;
$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->captcha->failure
$config->response->submit->failure->length
) . PHP_EOL
);
// Drop connection or do something else..
$connection->close();
}
}
// @TODO compose request to KevaCoin, return transaction ID
// Captcha request
else
{
// Save massage to kevacoin
/*
// Request match captcha
if ($request == $connection->captcha)
{
$connection->confirmed = true;
$connection->send(
implode(
PHP_EOL,
$config->response->captcha->failure
$config->response->captcha->success
) . PHP_EOL
);
*/
}
// Debug message event on enabled
if ($config->debug->enabled)
// Captcha request invalid
else
{
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
$connection->confirmed = false;
$connection->send(
implode(
PHP_EOL,
$config->response->captcha->failure
) . PHP_EOL
);
$connection->close();
}
}
}

Loading…
Cancel
Save