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;
 }