lib/kamerling/task_dispatcher.rb in kamerling-0.0.2 vs lib/kamerling/task_dispatcher.rb in kamerling-0.0.3

- old
+ new

@@ -1,29 +1,38 @@ -module Kamerling class TaskDispatcher - def initialize net_dispatcher: NetDispatcher, repos: Repos - @net_dispatcher = net_dispatcher - @repos = repos - end +require_relative 'dispatch' +require_relative 'message' +require_relative 'net_dispatcher' +require_relative 'repos' - 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 +module Kamerling + class TaskDispatcher + def initialize(net_dispatcher: NetDispatcher, repos: Repos) + @net_dispatcher = net_dispatcher + @repos = repos + end + + def dispatch_all + 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 - end - attr_reader :net_dispatcher, :repos - private :net_dispatcher, :repos + attr_reader :net_dispatcher, :repos + private :net_dispatcher, :repos - private + 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 + def dispatch_task(client:, project:, task:) + message = Message.build(client: client, payload: task.data, + project: project, task: task, type: :DATA) + dispatch = Dispatch.new(addr: client.addr, client: client, + project: project, task: task) + net_dispatcher.dispatch client.addr, message + client.busy = true + repos << client + repos << dispatch + end end -end end +end