Sha256: 6d5f5e8c024dbf558d5f401d8ca41bb3e25f588be26cedd189e4e73d991d7dae

Contents?: true

Size: 917 Bytes

Versions: 12

Compression:

Stored size: 917 Bytes

Contents

require 'socket'
require 'timeout'

module PulseMeter
  class UDPServer
    MAX_PACKET = 1024
  
    def initialize(host, port)
      @socket = UDPSocket.new
      @socket.do_not_reverse_lookup = true
      @socket.bind(host, port)
    end

    def start(max_packets = nil)
      while true do
        if max_packets
          break if max_packets <= 0
          max_packets -= 1
        end
        process_packet
      end
    end

    private

    def process_packet
      raw_data, _ = @socket.recvfrom(MAX_PACKET)
      data = parse_data(raw_data)
      PulseMeter.redis.multi do
        data.each do |command|
          PulseMeter.redis.send(*command)
        end
      end
    rescue StandardError => e
      PulseMeter.error "Error processing packet: #{e}"
    end

    def parse_data(data)
      JSON.parse(data)
    rescue
      PulseMeter.error "Bad redis data: #{data.inspect}"
      []
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
pulse_meter_core-0.5.5 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.5.4 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.5.3 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.5.2 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.5.1 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.5.0 lib/pulse_meter/udp_server.rb
pulse_meter_core-0.4.13 lib/pulse_meter/udp_server.rb
pulse-meter-0.4.9 lib/pulse-meter/udp_server.rb
pulse-meter-0.4.8 lib/pulse-meter/udp_server.rb
pulse-meter-0.4.7 lib/pulse-meter/udp_server.rb
pulse-meter-0.4.6 lib/pulse-meter/udp_server.rb
pulse-meter-0.4.5 lib/pulse-meter/udp_server.rb