diff --git a/app/controllers/modbus_controller.rb b/app/controllers/modbus_controller.rb
index 559e264..380dcda 100644
--- a/app/controllers/modbus_controller.rb
+++ b/app/controllers/modbus_controller.rb
@@ -1,6 +1,17 @@
class ModbusController < ApplicationController
def index
@schedule = Schedule.all
+ @modbus_running = Modbus::PollingService.running?
+ end
+
+ def start
+ Modbus::PollingService.start
+ redirect_to modbus_index_path
+ end
+
+ def stop
+ Modbus::PollingService.stop
+ redirect_to modbus_index_path
end
def schedule_edit
diff --git a/app/services/modbus/polling_service.rb b/app/services/modbus/polling_service.rb
index b0f9dae..bc38eb2 100644
--- a/app/services/modbus/polling_service.rb
+++ b/app/services/modbus/polling_service.rb
@@ -2,9 +2,9 @@ module Modbus
class PollingService
class << self
def start
- return if @thread&.alive?
+ return if $modbus_polling_threads.any?(&:alive?)
- @thread = Thread.new do
+ thread = Thread.new do
puts "[#{Time.current}] Modbus polling service 시작됨"
last_logged_hour = nil
loop do
@@ -32,14 +32,17 @@ module Modbus
end
end
end
+ $modbus_polling_threads << thread
end
def stop
- if @thread
- @thread.exit
- @thread = nil
- puts "[#{Time.now}] Modbus polling service 중지됨"
- end
+ $modbus_polling_threads.each { |t| t.kill if t.alive? }
+ $modbus_polling_threads.clear
+ puts "[#{Time.now}] Modbus polling service 중지됨"
+ end
+
+ def running?
+ $modbus_polling_threads.any?(&:alive?)
end
end
end
diff --git a/app/views/modbus/index.html.erb b/app/views/modbus/index.html.erb
index ae77f45..1e8ec6e 100644
--- a/app/views/modbus/index.html.erb
+++ b/app/views/modbus/index.html.erb
@@ -1,3 +1,5 @@
+
+
<% if flash[:notice] %>
<%= flash[:notice] %>
@@ -15,4 +17,20 @@
<% end %>
-<%= link_to "수정", "/modbus/schedule_edit", class: "btn btn-primary" %>
+
+ <%= button_to "수정", schedule_edit_modbus_index_path, method: :get, class: "btn bg-primary" %>
+
+
+
+ <%= button_to "스케쥴러 시작", start_modbus_index_path, method: :post, class: "btn bg-accept" %>
+ <%= button_to "스케쥴러 정지", stop_modbus_index_path, method: :post, class: "btn bg-danger" %>
+
+
+
+ 스케쥴러 상태:
+ <% if @modbus_running %>
+ 실행 중
+ <% else %>
+ 정지됨
+ <% end %>
+
diff --git a/app/views/modbus/schedule_edit.html.erb b/app/views/modbus/schedule_edit.html.erb
index c986172..b2cd467 100644
--- a/app/views/modbus/schedule_edit.html.erb
+++ b/app/views/modbus/schedule_edit.html.erb
@@ -1,4 +1,4 @@
-<%= form_with url: "/modbus/schedule_edit_update", method: :post do %>
+<%= form_with url: schedule_edit_update_modbus_index_path, method: :post do %>
<% @schedule.each do |s| %>
<%= s.hour %>시
diff --git a/config/initializers/modbus_service.rb b/config/initializers/modbus_service.rb
index 490c40b..c1c0645 100644
--- a/config/initializers/modbus_service.rb
+++ b/config/initializers/modbus_service.rb
@@ -1,3 +1,5 @@
+$modbus_polling_threads ||= []
+
Rails.application.config.after_initialize do
Modbus::PollingService.start
end
diff --git a/config/routes.rb b/config/routes.rb
index a64c5f0..788f395 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -14,9 +14,8 @@ Rails.application.routes.draw do
resources :modbus do
collection do
- get "start"
- get "stop"
- get "status"
+ post "start"
+ post "stop"
get "schedule_edit"
post "schedule_edit_update"
end
diff --git a/db/seeds.rb b/db/seeds.rb
index 64f6801..b19f220 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -8,6 +8,6 @@
# MovieGenre.find_or_create_by!(name: genre_name)
# end
-(0..23).each_with_index do |h, index|
- Schedule.create!(hour: h, temperature: index)
+(0..23).each do | h |
+ Schedule.create!(hour: h, temperature: 15.0)
end