aboutsummaryrefslogtreecommitdiff
path: root/src/hotstuff_app.cpp
diff options
context:
space:
mode:
authorDeterminant <tederminant@gmail.com>2018-07-20 20:09:24 -0400
committerDeterminant <tederminant@gmail.com>2018-07-20 20:09:24 -0400
commit41efd33a3e165ac329f14b6e1cea935076a8b790 (patch)
tree129dc7a6e161edffa35917707df7273a97cf1dfd /src/hotstuff_app.cpp
parent928b2c1910bfe957a4cc31746aa395c9ed98006f (diff)
improve msg & msg network interface
Diffstat (limited to 'src/hotstuff_app.cpp')
-rw-r--r--src/hotstuff_app.cpp29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/hotstuff_app.cpp b/src/hotstuff_app.cpp
index eae73d1..e91919e 100644
--- a/src/hotstuff_app.cpp
+++ b/src/hotstuff_app.cpp
@@ -37,10 +37,12 @@ using hotstuff::CommandDummy;
using hotstuff::Finality;
using hotstuff::command_t;
using hotstuff::uint256_t;
+using hotstuff::opcode_t;
using hotstuff::bytearray_t;
using hotstuff::DataStream;
using hotstuff::ReplicaID;
-using hotstuff::MsgClient;
+using hotstuff::MsgReqCmd;
+using hotstuff::MsgRespCmd;
using hotstuff::get_hash;
using hotstuff::promise_t;
@@ -55,7 +57,7 @@ class HotStuffApp: public HotStuff {
double stat_period;
EventContext eb;
/** Network messaging between a replica and its client. */
- ClientNetwork<MsgClient> cn;
+ ClientNetwork<opcode_t> cn;
/** Timer object to schedule a periodic printing of system statistics */
Event ev_stat_timer;
/** The listen address for client RPC */
@@ -63,9 +65,9 @@ class HotStuffApp: public HotStuff {
/** Maximum number of parents. */
int32_t parent_limit;
- using conn_client_t = MsgNetwork<MsgClient>::conn_t;
+ using conn_t = ClientNetwork<opcode_t>::conn_t;
- void client_request_cmd_handler(const MsgClient &, conn_client_t);
+ void client_request_cmd_handler(MsgReqCmd &&, conn_t);
void print_stat_cb(evutil_socket_t, short);
command_t parse_cmd(DataStream &s) override {
@@ -209,17 +211,15 @@ HotStuffApp::HotStuffApp(uint32_t blk_size,
clisten_addr(clisten_addr),
parent_limit(parent_limit) {
/* register the handlers for msg from clients */
- cn.reg_handler(hotstuff::REQ_CMD, std::bind(&HotStuffApp::client_request_cmd_handler, this, _1, _2));
+ cn.reg_handler(salticidae::handler_bind(&HotStuffApp::client_request_cmd_handler, this, _1, _2));
cn.listen(clisten_addr);
}
-void HotStuffApp::client_request_cmd_handler(const MsgClient &msg, conn_client_t conn_) {
- auto conn = static_pointer_cast<ClientNetwork<MsgClient>::Conn>(conn_);
+void HotStuffApp::client_request_cmd_handler(MsgReqCmd &&msg, conn_t conn) {
const NetAddr addr = conn->get_addr();
- command_t cmd;
+ msg.postponed_parse(this);
+ auto cmd = msg.cmd;
std::vector<promise_t> pms;
- msg.parse_reqcmd(cmd, this);
-
bool flag = true;
#ifndef HOTSTUFF_DISABLE_TX_VERIFY
flag &= cmd->verify();
@@ -228,17 +228,14 @@ void HotStuffApp::client_request_cmd_handler(const MsgClient &msg, conn_client_t
if (!flag)
{
LOG_WARN("invalid client cmd");
- MsgClient resp;
- resp.gen_respcmd(Finality(get_id(), -1, 0, 0, cmd_hash, uint256_t()));
- cn.send_msg(resp, addr);
+ cn.send_msg(MsgRespCmd(
+ Finality(get_id(), -1, 0, 0, cmd_hash, uint256_t())), addr);
}
else
{
LOG_DEBUG("processing %s", std::string(*cmd).c_str());
exec_command(cmd).then([this, addr](Finality fin) {
- MsgClient resp;
- resp.gen_respcmd(fin);
- cn.send_msg(resp, addr);
+ cn.send_msg(MsgRespCmd(fin), addr);
});
}
}