private void OnReceived(object sender, BasicDeliverEventArgs ea)
{
var topic = ea.RoutingKey.Split('.');
var sid = topic[1];
var mode = MetaData.GetMode(topic[2]);//todo change string to char
var toQuery = mode == Mode.Return ? delegates : implements;
IMessageConsumer msgConsumer;
if (toQuery.TryGetValue(sid, out msgConsumer))
{
//todo srcUuid dup one, and unpack at RPC layer
msgConsumer.OnReceiveMessage(mode, ea.Body, 0, (buffer, dstUuid, rule) =>
{
lock (mqChannel)
{
mqChannel.BasicPublish(rule.AmqpRule.GetReturnExchangeName(), rule.AmqpRule.GetReturnRoutingKey(dstUuid), null, buffer);
//mqChannel.BasicPublish(exchangeName, routingKey, null, buffer);
}
});
}
}