private static void SendToServer(string server, int port, IEnumerable <string> metrics, bool stream) { UdpMessenger messenger = null; SimpleObjectPool <UdpMessenger> serverPool = null; try { serverPool = _messengerPool.GetOrAdd(string.Format(CultureInfo.InvariantCulture, "{0}:{1}", server, port), new SimpleObjectPool <UdpMessenger>(3, pool => new UdpMessenger(server, port))); messenger = serverPool.Pop(); //all used up, sorry! if (null == messenger) { return; } if (stream) { messenger.StreamMetrics(metrics); } else { messenger.SendMetrics(metrics); } } finally { if (null != serverPool && null != messenger) { serverPool.Push(messenger); } } }
/// <summary> /// Will stream the given metrics in the specified format, breaking up the metrics into 10 packets at a time, where multiple metrics may /// comprise a single packet. This call is appropriate for infinite IEnumerables. /// </summary> /// <exception cref="ArgumentNullException"> Thrown when the metrics are null. </exception> /// <param name="metrics"> The metrics. </param> public void Stream(IEnumerable <IMetric> metrics) { if (null == metrics) { throw new ArgumentNullException("metrics"); } _messenger.StreamMetrics(metrics.ToStrings(_key, _format)); }