diff options
author | Determinant <[email protected]> | 2018-08-01 14:15:43 -0400 |
---|---|---|
committer | Determinant <[email protected]> | 2018-08-01 14:15:43 -0400 |
commit | d542aa0b24d5607ee066a2a50f5e29064c1aaef7 (patch) | |
tree | 3ea26f118645e67f4969a723dad60db71b519d63 | |
parent | bc078abd9d5fcc420dfbcda06869a95aba39b1ea (diff) |
...
-rw-r--r-- | include/salticidae/msg.h | 7 | ||||
-rw-r--r-- | include/salticidae/network.h | 6 | ||||
-rw-r--r-- | test/bench_network.cpp | 20 |
3 files changed, 22 insertions, 11 deletions
diff --git a/include/salticidae/msg.h b/include/salticidae/msg.h index bc1a633..80b468a 100644 --- a/include/salticidae/msg.h +++ b/include/salticidae/msg.h @@ -61,7 +61,8 @@ class MsgBase { template<typename MsgType, typename = typename std::enable_if< !std::is_same<MsgType, MsgBase>::value && - !std::is_same<MsgType, uint8_t *>::value>::type> + !std::is_same<MsgType, bytearray_t>::value && + !std::is_same<MsgType, DataStream>::value>::type> MsgBase(const MsgType &msg): magic(0x0) { set_opcode(MsgType::opcode); set_payload(std::move(msg.serialized)); @@ -87,15 +88,13 @@ class MsgBase { payload(std::move(other.payload)), no_payload(other.no_payload) {} - MsgBase(const uint8_t *raw_header): no_payload(true) { + MsgBase(DataStream &&s): no_payload(true) { uint32_t _magic; opcode_t _opcode; uint32_t _length; #ifndef SALTICIDAE_NOCHECKSUM uint32_t _checksum; #endif - DataStream s(raw_header, raw_header + MsgBase::header_size); - s >> _magic >> _opcode >> _length diff --git a/include/salticidae/network.h b/include/salticidae/network.h index f6623b6..c7b7f66 100644 --- a/include/salticidae/network.h +++ b/include/salticidae/network.h @@ -377,8 +377,7 @@ void MsgNetwork<OpcodeType>::Conn::on_read() { { if (recv_buffer.size() < Msg::header_size) break; /* new header available */ - bytearray_t data = recv_buffer.pop(Msg::header_size); - msg = Msg(data.data()); + msg = Msg(recv_buffer.pop(Msg::header_size)); msg_state = Conn::PAYLOAD; } if (msg_state == Conn::PAYLOAD) @@ -386,8 +385,7 @@ void MsgNetwork<OpcodeType>::Conn::on_read() { size_t len = msg.get_length(); if (recv_buffer.size() < len) break; /* new payload available */ - bytearray_t data = recv_buffer.pop(len); - msg.set_payload(std::move(data)); + msg.set_payload(recv_buffer.pop(len)); msg_state = Conn::HEADER; #ifndef SALTICIDAE_NOCHECKSUM if (!msg.verify_checksum()) diff --git a/test/bench_network.cpp b/test/bench_network.cpp index 19f0dd9..bd31ee0 100644 --- a/test/bench_network.cpp +++ b/test/bench_network.cpp @@ -26,6 +26,7 @@ #include <string> #include <functional> #include <thread> +#include <signal.h> /* disable SHA256 checksum */ #define SALTICIDAE_NOCHECKSUM @@ -142,6 +143,10 @@ salticidae::EventContext ec; NetAddr alice_addr("127.0.0.1:1234"); NetAddr bob_addr("127.0.0.1:1235"); +void signal_handler(int) { + throw salticidae::SalticidaeError("got terminal signal"); +} + int main() { /* test two nodes */ MyNet alice(ec, "Alice", bob_addr, 10); @@ -150,9 +155,18 @@ int main() { salticidae::EventContext ec; MyNet bob(ec, "Bob", alice_addr); bob.connect(alice_addr); - ec.dispatch(); + try { + ec.dispatch(); + } catch (std::exception &) {} }); - - ec.dispatch(); + signal(SIGTERM, signal_handler); + signal(SIGINT, signal_handler); + try { + ec.dispatch(); + } catch (std::exception &e) { + pthread_kill(bob_thread.native_handle(), SIGINT); + bob_thread.join(); + SALTICIDAE_LOG_INFO("exception: %s", e.what()); + } return 0; } |