Sha256: 5af5ac644a6daaf0ca2df37f6fb5ab92c98ecb5099a24160c7693e4b97f73eae

Contents?: true

Size: 835 Bytes

Versions: 1

Compression:

Stored size: 835 Bytes

Contents

module Kamerling class TaskDispatcher
  def initialize net_dispatcher: NetDispatcher.new, repos: Repos
    @net_dispatcher = net_dispatcher
    @repos          = repos
  end

  def dispatch
    repos.projects.each do |project|
      repos.free_clients_for(project).each do |client|
        task = repos.next_task_for(project)
        dispatch_task client: client, project: project, task: task if task
      end
    end
  end

  attr_reader :net_dispatcher, :repos
  private     :net_dispatcher, :repos

  private

  def dispatch_task client: req(:client), project: req(:project),
                    task: req(:task)
    message = Message[client: client, payload: task.data, project: project,
      task: task, type: :DATA]
    net_dispatcher.dispatch client.addr, message.to_s
    client.busy = true
    repos << client
  end
end end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kamerling-0.0.1 lib/kamerling/task_dispatcher.rb