Class: Simultaneous::Server
- Inherits:
-
EM::Connection
- Object
- EM::Connection
- Simultaneous::Server
- Defined in:
- lib/simultaneous/server.rb
Class Method Summary collapse
- .broadcast(data) ⇒ Object
- .channel ⇒ Object
- .get_pid(task) ⇒ Object
- .kill(task_name, signal = "TERM") ⇒ Object
- .pids ⇒ Object
- .receive_data(data) ⇒ Object
- .run(command) ⇒ Object
- .set_pid(task_name, pid) ⇒ Object
- .start(connection_string = Simultaneous.connection, options = {}) ⇒ Object
- .task_complete(task_name) ⇒ Object
Instance Method Summary collapse
Class Method Details
.broadcast(data) ⇒ Object
19 20 21 |
# File 'lib/simultaneous/server.rb', line 19 def self.broadcast(data) channel << data end |
.channel ⇒ Object
8 9 10 |
# File 'lib/simultaneous/server.rb', line 8 def self.channel @channel ||= EM::Channel.new end |
.get_pid(task) ⇒ Object
41 42 43 |
# File 'lib/simultaneous/server.rb', line 41 def self.get_pid(task) pids[task.name] end |
.kill(task_name, signal = "TERM") ⇒ Object
49 50 51 52 |
# File 'lib/simultaneous/server.rb', line 49 def self.kill(task_name, signal="TERM") pid = pids[task_name] Process.kill(signal, pid) unless pid == 0 end |
.pids ⇒ Object
45 46 47 |
# File 'lib/simultaneous/server.rb', line 45 def self.pids @pids ||= {} end |
.receive_data(data) ⇒ Object
23 24 25 26 |
# File 'lib/simultaneous/server.rb', line 23 def self.receive_data(data) command = Simultaneous::Command.load(data) run(command) end |
.run(command) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/simultaneous/server.rb', line 28 def self.run(command) if Command.allowed?(command) puts command.debug if $debug command.run else raise PermissionsError, "'#{command.class}' is not an approved command" end end |
.set_pid(task_name, pid) ⇒ Object
37 38 39 |
# File 'lib/simultaneous/server.rb', line 37 def self.set_pid(task_name, pid) pids[task_name] = pid.to_i end |
.start(connection_string = Simultaneous.connection, options = {}) ⇒ Object
12 13 14 15 16 |
# File 'lib/simultaneous/server.rb', line 12 def self.start(connection_string = Simultaneous.connection, = {}) Simultaneous.connection = connection_string connection = Simultaneous::Connection.new(connection_string, ) @server = connection.start_server(self) end |
.task_complete(task_name) ⇒ Object
54 55 56 |
# File 'lib/simultaneous/server.rb', line 54 def self.task_complete(task_name) pid = pids.delete(task_name) end |
Instance Method Details
#channel ⇒ Object
58 59 60 |
# File 'lib/simultaneous/server.rb', line 58 def channel Simultaneous::Server.channel end |
#post_init ⇒ Object
62 63 64 |
# File 'lib/simultaneous/server.rb', line 62 def post_init @sid = channel.subscribe { |m| send_data "#{m}\n" } end |
#receive_data(data) ⇒ Object
66 67 68 |
# File 'lib/simultaneous/server.rb', line 66 def receive_data(data) Simultaneous::Server.receive_data(data) end |
#unbind ⇒ Object
70 71 72 |
# File 'lib/simultaneous/server.rb', line 70 def unbind channel.unsubscribe @sid if @sid end |