network engine: add "value update" message type

This commit is contained in:
Adrien Béraud committed 2017-10-30 13:12:16 -04:00
1 parent 8cd3ff9fc4
commit fcaaa01b2d
3 files changed
+17 -4

No files matched your search

+2 -1
View File
@@ -30,7 +30,8 @@ enum class MessageType {
AnnounceValue,
Refresh,
Listen,
ValueData
ValueData,
ValueUpdate
};
} /* namespace net */
+10 -1
View File
@@ -410,7 +410,16 @@ NetworkEngine::process(std::unique_ptr<ParsedMessage>&& msg, const SockAddr& fro
const auto& now = scheduler.time();
auto node = cache.getNode(msg->id, from, now, true, msg->is_client);
if (msg->type == MessageType::Error or msg->type == MessageType::Reply) {
if (msg->type == MessageType::ValueUpdate) {
auto rsocket = node->getSocket(msg->tid);
if (not rsocket)
throw DhtProtocolException {DhtProtocolException::UNKNOWN_TID, "Can't find socket", msg->id};
node->received(now, {});
onNewNode(node, 2);
deserializeNodes(*msg, from);
rsocket->on_receive(node, std::move(*msg));
}
else if (msg->type == MessageType::Error or msg->type == MessageType::Reply) {
auto rsocket = node->getSocket(msg->tid);
auto req = node->getRequest(msg->tid);
+5 -2
View File
@@ -125,6 +125,7 @@ ParsedMessage::msgpack_unpack(msgpack::object msg)
{
auto y = findMapValue(msg, "y");
auto r = findMapValue(msg, "r");
auto u = findMapValue(msg, "u");
auto e = findMapValue(msg, "e");
auto v = findMapValue(msg, "p");
@@ -153,6 +154,8 @@ ParsedMessage::msgpack_unpack(msgpack::object msg)
type = MessageType::Reply;
else if (v)
type = MessageType::ValueData;
else if (u)
type = MessageType::ValueUpdate;
else if (y and y->as<std::string>() != "q")
throw msgpack::type_error();
else if (q == "ping")
@@ -185,9 +188,9 @@ ParsedMessage::msgpack_unpack(msgpack::object msg)
}
auto a = findMapValue(msg, "a");
if (!a && !r && !e)
if (!a && !r && !e && !u)
throw msgpack::type_error();
auto& req = a ? *a : (r ? *r : *e);
auto& req = a ? *a : (r ? *r : (u ? *u : *e));
if (e) {
if (e->type != msgpack::type::ARRAY)