private void OnReceived(object sender, BasicDeliverEventArgs ea) { CalculatePiResponse response = null; var body = ea.Body; var props = ea.BasicProperties; var replyProps = rpcServer.Channel.CreateBasicProperties(); replyProps.CorrelationId = props.CorrelationId; try { var deserialized = JsonConvert.DeserializeObject <CalculatePiMessage>(Encoding.UTF8.GetString(body)); Console.WriteLine($" [Server] Calculate Pi with precision {deserialized.PrecisionResult}"); //check if the request was canceled string pi = _cancelSynchronizedCollection.IsInCollection(deserialized) ? "-1" : PiCalculator.CalculatePi(deserialized.PrecisionResult); response = new CalculatePiResponse(deserialized, pi); } catch (Exception e) { Console.WriteLine(" [Server] " + e.Message); response = null; } finally { Console.WriteLine($" [Server] Send response: {response.Result} for { response.PrecisionResult}"); rpcServer.Channel.BasicPublish( exchange: "", routingKey: props.ReplyTo, mandatory: false, basicProperties: replyProps, body: response.SelfConvertToBytes()); rpcServer.Channel.BasicAck( deliveryTag: ea.DeliveryTag, multiple: false); } }
public ResponseEventArgs(CalculatePiResponse response) { _piResponse = response; }