Example #1
0
        internal async Task <MetadataResponse> MetadataRequest(TopicRequest request, BrokerMeta broker = null, bool noTransportErrors = false)
        {
            TcpClient  tcp;
            Connection conn;

            if (broker != null)
            {
                conn = broker.Conn;
                tcp  = await conn.GetClientAsync(noTransportErrors);
            }
            else
            {
                var clientAndConnection = await _cluster.GetAnyClientAsync();

                conn = clientAndConnection.Item1;
                tcp  = clientAndConnection.Item2;
            }

            //var tcp = await (broker != null ? broker.Conn.GetClientAsync() : _cluster.GetAnyClientAsync());
            _log.Debug("Sending MetadataRequest to {0}", tcp.Client.RemoteEndPoint);
            if (_etw.IsEnabled())
            {
                _etw.ProtocolMetadataRequest(request.ToString());
            }

            var response = await conn.Correlation.SendAndCorrelateAsync(
                id => Serializer.Serialize(request, id),
                Serializer.DeserializeMetadataResponse,
                tcp, CancellationToken.None);

            if (_etw.IsEnabled())
            {
                _etw.ProtocolMetadataResponse(response.ToString(),
                                              broker != null ? broker.Host : "",
                                              broker != null ? broker.Port : -1,
                                              broker != null ? broker.NodeId : -1);
            }


            return(response);
        }