Sha256: 42a307d893bfd8ed72c06b2b9fb590b8c624e4701f5eb9434991eb38200cc45b

Contents?: true

Size: 896 Bytes

Versions: 1

Compression:

Stored size: 896 Bytes

Contents

require 'socket'
require_relative 'tattler'

module Buschtelefon
  class NetTattler < Tattler
    attr_accessor :port

    def initialize(port: nil)
      super()
      @port = port || rand(1025..65365) # TODO: use port 0
    end

    def listen(&_callback)
      puts "Started UDP server on #{@port}..."

      Socket.udp_server_loop(@port) do |message, message_source|
        # puts "Got \"#{message}\" from #{message_source}"
        if message == "\x05"
          handle_knowledge_inquiry(message_source)
        else
          gossip = Gossip.new(message)
          handle_incoming_gossip(gossip)
          yield(gossip) if block_given?
        end
      end
    end

    private

    def handle_incoming_gossip(gossip)
      feed(gossip)
    end

    def handle_knowledge_inquiry(message_source)
      transfer_knowledge(RemoteTattler.new(message_source.local_address))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
buschtelefon-0.3.0 lib/buschtelefon/net_tattler.rb