Sha256: c8dbdef6bee09fe688e17dfa939884a0ca1c3e562fb19cfb62cf4c580f67e9b5
Contents?: true
Size: 912 Bytes
Versions: 1
Compression:
Stored size: 912 Bytes
Contents
require 'socket' require 'fcntl' module PulseMeter module CommandAggregator class UDP def initialize(servers = []) raise ArgumentError, "No servers specified" if servers.empty? @servers = servers @buffer = [] @in_multi = false @sock = UDPSocket.new @sock.fcntl(Fcntl::F_SETFL, @sock.fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK) end def multi @in_multi = true yield ensure @in_multi = false send_buffer end def method_missing(*args) @buffer << args send_buffer unless @in_multi end private def send_buffer data = @buffer.to_json @sock.send(data, 0, *@servers.sample) rescue StandardError PulseMeter.error "error sending data: #{e}, #{e.backtrace.join("\n")}" ensure @buffer = [] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pulse-meter-0.4.4 | lib/pulse-meter/command_aggregator/udp.rb |