em-nodes 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b47ba8138b82b37389094a0e941603e8b1c4128
4
- data.tar.gz: 2044009a60a4947aa14a752f7ecf4a41613e1ec7
3
+ metadata.gz: ddccb975cd4137ced9c16858feba42614f81bcf5
4
+ data.tar.gz: 2e61ef3174a99ea5b024d4debf8fc31011a2c475
5
5
  SHA512:
6
- metadata.gz: 39e256163916d4d2ef972524e2a7789498b16349063aefa8ce5b42226fc167fd7e36ff873a177bff39f55c04fedbb3a1441c960646285ddc2fbbcd46b4015ebf
7
- data.tar.gz: 94abef2e1f64b5a7d9269d6811b671a1ad422567b6d2af54ac938796b4a1717a43c804c28517f115ab885153b2a389689c85945103fba5fe2835a8e2aaa1cd0d
6
+ metadata.gz: 09ae7052192a4bdfc4726dc810db41ba2f97c5d710652fdd7b6bf8fb33719d4d5386a607238a726fc3d3c4fb17270f48bab3509a3148e36e0f81084615349a22
7
+ data.tar.gz: 427c10dae0acd687425c51c49d5a9f749ef55b74cc7b2a700444caf1d90aa42bfcf27bccef1054027b03468bd5e51bcd5562734dfa0d30cb19bcb2f2fcfcef7a
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require "bundler/setup"
3
+ Bundler.require
4
+
5
+ class Client < EM::Nodes::Client
6
+ include HelloFeature
7
+ include TaskFeature
8
+
9
+ def info
10
+ { :name => "client" }
11
+ end
12
+
13
+ def on_task(task_id, data)
14
+ send_task_result(task_id, data + 1)
15
+ end
16
+
17
+ def unbind
18
+ super
19
+ EM.stop
20
+ end
21
+ end
22
+
23
+ EM.run do
24
+ puts "client run"
25
+ Client.connect '/tmp/test_em_nodes_sock'
26
+ end
27
+
data/benchmark/run.sh ADDED
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ ruby server.rb &
4
+ sleep 0.4
5
+ ruby client.rb &
6
+ ruby client.rb &
7
+ ruby client.rb &
8
+ ruby client.rb &
9
+ ruby client.rb &
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require "bundler/setup"
3
+ Bundler.require
4
+
5
+ CLIENTS_COUNT = 5
6
+ TASKS_COUNT = 100000
7
+
8
+ class Server < EM::Nodes::Server
9
+ include HelloFeature
10
+ include TaskFeature
11
+
12
+ def on_task_result(res)
13
+ $res_count += 1
14
+ $res += res
15
+
16
+ if $res_count >= TASKS_COUNT
17
+ EM.next_tick { EM.stop }
18
+ else
19
+ send_task(res + 1)
20
+ end
21
+ end
22
+ end
23
+
24
+ $res = 0
25
+ $res_count = 0
26
+
27
+ tm = Time.now
28
+
29
+ EM.run do
30
+ Server.start '/tmp/test_em_nodes_sock'
31
+
32
+ tm = Time.now
33
+ Thread.new do
34
+ sleep 0.5 while Server.ready_clients.size < CLIENTS_COUNT
35
+ tm = Time.now
36
+
37
+ Server.ready_clients.each do |client|
38
+ client.send_task(0)
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ puts "executed with #{Time.now - tm}, res: #{$res}, res_count: #{$res_count}"
@@ -8,11 +8,11 @@ class ChatClient < EM::Nodes::Client
8
8
  super
9
9
  end
10
10
 
11
- def who_are_you?
12
- server.send_i_am @name
11
+ def on_who_are_you?
12
+ send_i_am @name
13
13
  end
14
14
 
15
- def say(msg)
15
+ def on_say(msg)
16
16
  puts msg
17
17
  end
18
18
 
@@ -23,7 +23,7 @@ class ChatClient < EM::Nodes::Client
23
23
  end
24
24
 
25
25
  def say(msg)
26
- $cl.server.send_say(msg)
26
+ $cl.send_say(msg)
27
27
  end
28
28
 
29
29
  EM.run do
@@ -4,16 +4,16 @@ Bundler.require
4
4
  class ChatServer < EM::Nodes::Server
5
5
  def post_init
6
6
  super
7
- client.send_who_are_you?
7
+ send_who_are_you?
8
8
  end
9
9
 
10
- def i_am(name)
11
- client.data.name = name
10
+ def on_i_am(name)
11
+ self.data.name = name
12
12
  to_all "> coming #{name} <"
13
13
  end
14
14
 
15
- def say(msg)
16
- to_all "#{client.data.name} say: #{msg}"
15
+ def on_say(msg)
16
+ to_all "#{data.name} say: #{msg}"
17
17
  end
18
18
 
19
19
  def to_all(msg)
@@ -22,7 +22,7 @@ class ChatServer < EM::Nodes::Server
22
22
 
23
23
  def unbind
24
24
  super
25
- to_all("quiting #{client.data.name}")
25
+ to_all("quiting #{data.name}")
26
26
  end
27
27
  end
28
28
 
@@ -0,0 +1,21 @@
1
+ class EM::Nodes::Client
2
+ module HelloFeature
3
+
4
+ def on_who_are_you?
5
+ i = info
6
+ raise "info should be a Hash, but not #{i.inspect}" unless i.is_a?(Hash)
7
+ send_i_am(i.merge(__default_info__))
8
+ end
9
+
10
+ def info
11
+ {} # redefine me
12
+ end
13
+
14
+ private
15
+
16
+ def __default_info__
17
+ { :hostname => (`hostname` rescue "").chop }
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class EM::Nodes::Client
2
+ module TaskFeature
3
+
4
+ def on_task(task_id, data)
5
+ # redefine me
6
+ end
7
+
8
+ private
9
+
10
+ def on_task_internal(task_id, data)
11
+ on_task(task_id, data)
12
+ end
13
+
14
+ def send_task_result(task_id, result)
15
+ send_task_result_internal(task_id, result)
16
+ end
17
+ end
18
+ end
@@ -1,22 +1,23 @@
1
1
  class EM::Nodes::Client < EM::Connection
2
- autoload :Server, 'em-nodes/client/server'
3
-
4
- attr_reader :server
2
+ autoload :HelloFeature, 'em-nodes/client/hello'
3
+ autoload :TaskFeature, 'em-nodes/client/task'
5
4
 
6
5
  include EM::P::ObjectProtocol
7
6
  include EM::Nodes::Commands
8
7
 
8
+ attr_reader :alive
9
+
9
10
  def post_init
10
- @server = EM::Nodes::Client::Server.new(self)
11
- EM::Nodes.logger.debug "Connected to server"
11
+ @alive = true
12
+ EM::Nodes.logger.info { "Connected to server" }
12
13
  end
13
14
 
14
15
  def unbind
15
- @server.disconnect!
16
- EM::Nodes.logger.warn "connection has terminated"
16
+ @alive = false
17
+ EM::Nodes.logger.warn { "Connection has terminated" }
17
18
  end
18
19
 
19
- def self.connect(host, port, *args, &block)
20
+ def self.connect(host, port = nil, *args, &block)
20
21
  EM.connect(host, port, self, *args)
21
22
  end
22
23
  end
@@ -1,23 +1,37 @@
1
1
  module EM::Nodes::Commands
2
- def receive_object(h)
3
- unless h.is_a?(Hash)
4
- EM::Nodes.logger.error "received unknown object: #{obj.inspect}"
5
- return
6
- end
7
2
 
8
- method = h[:method]
9
- args = h[:args]
10
- EM::Nodes.logger.debug "<= #{method} #{args}"
3
+ def receive_object(h)
4
+ method, args = h
5
+ method = 'on_' + method
11
6
  t = Time.now
12
7
  send(method, *args)
13
- EM::Nodes.logger.info "<= #{method} #{args} (#{Time.now - t}s)"
8
+ EM::Nodes.logger.debug { "<= #{method} #{args.inspect} (#{Time.now - t}s)" }
9
+
14
10
  rescue Object => ex
15
11
  EM::Nodes.exception(ex)
16
12
  end
17
13
 
18
14
  def send_command(method, args)
19
- obj = {:method => method, :args => args}
20
- EM::Nodes.logger.debug "=> #{method}"
21
- EM.schedule { send_object(obj) }
15
+ EM::Nodes.logger.debug { "=> #{method}" }
16
+ EM.schedule { send_object [method.to_s, args] }
17
+ end
18
+
19
+ COMMAND_PREFIX = 'send_'
20
+
21
+ def method_missing(method, *args)
22
+ method = method.to_s
23
+
24
+ unless method.start_with?(COMMAND_PREFIX)
25
+ EM::Nodes.logger.warn { "unknown send :#{method} #{args.inspect}" }
26
+ super(method, *args)
27
+ return
28
+ end
29
+
30
+ if @alive
31
+ send_command(method[5..-1], args)
32
+ else
33
+ EM::Nodes.logger.error { "failed command attempt #{method}, connection dead" }
34
+ end
22
35
  end
36
+
23
37
  end
@@ -0,0 +1,27 @@
1
+ class EM::Nodes::Server
2
+ module HelloFeature
3
+ def self.included(base)
4
+ base.send :extend, ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def ready_clients
9
+ clients.select{ |cl| cl.data.ready }
10
+ end
11
+ end
12
+
13
+ def post_init
14
+ super
15
+ send_who_are_you?
16
+ end
17
+
18
+ def on_i_am(params)
19
+ params.each do |key, value|
20
+ self.data.send "#{key}=", value
21
+ end
22
+
23
+ self.data.ready = true
24
+ EM::Nodes.logger.info { "Hello client #{self.data.inspect}" }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ require 'thread'
2
+
3
+ class EM::Nodes::Server
4
+ module TaskFeature
5
+ def initialize(*args)
6
+ super(*args)
7
+ @mutex = Mutex.new
8
+ @tasks = {}
9
+ @task_inc = 0
10
+ end
11
+
12
+ def task_count
13
+ @mutex.synchronize { @tasks.size }
14
+ end
15
+
16
+ def send_task(data)
17
+ task_id = next_task_id
18
+ add_task(task_id, data)
19
+ send_task_internal(task_id, data)
20
+ end
21
+
22
+ def on_task_result(res)
23
+ # redefine me
24
+ end
25
+
26
+ def on_reschedule_tasks(values)
27
+ # redefine me
28
+ end
29
+
30
+ def unbind
31
+ super
32
+ on_reschedule_tasks(@tasks.values)
33
+ @mutex.synchronize { @tasks.clear }
34
+ end
35
+
36
+ private
37
+
38
+ def on_task_result_internal(task_id, res)
39
+ del_task(task_id)
40
+ on_task_result(res)
41
+ end
42
+
43
+ def add_task(task_id, data)
44
+ @mutex.synchronize { @tasks[task_id] = data }
45
+ end
46
+
47
+ def del_task(task_id)
48
+ @mutex.synchronize { @tasks.delete(task_id) }
49
+ end
50
+
51
+ def next_task_id
52
+ @mutex.synchronize { @task_inc += 1 }
53
+ end
54
+
55
+ end
56
+ end
@@ -1,13 +1,15 @@
1
1
  require 'socket'
2
+ require 'ostruct'
2
3
 
3
4
  class EM::Nodes::Server < EM::Connection
4
- autoload :Client, 'em-nodes/server/client'
5
-
6
- attr_reader :client
5
+ autoload :HelloFeature, 'em-nodes/server/hello'
6
+ autoload :TaskFeature, 'em-nodes/server/task'
7
7
 
8
8
  include EM::P::ObjectProtocol
9
9
  include EM::Nodes::Commands
10
10
 
11
+ attr_reader :alive
12
+
11
13
  class << self
12
14
  def clients
13
15
  @clients ||= []
@@ -18,6 +20,8 @@ class EM::Nodes::Server < EM::Connection
18
20
  end
19
21
  end
20
22
 
23
+ attr_reader :data
24
+
21
25
  def accept?(host, port)
22
26
  true
23
27
  end
@@ -27,27 +31,32 @@ class EM::Nodes::Server < EM::Connection
27
31
  end
28
32
 
29
33
  def post_init
30
- self.comm_inactivity_timeout = inactivity_timeout
34
+ @data = OpenStruct.new
31
35
 
32
- port, host = Socket.unpack_sockaddr_in(get_peername)
36
+ self.comm_inactivity_timeout = inactivity_timeout if EM.reactor_running?
37
+
38
+ port, host = Socket.unpack_sockaddr_in(get_peername) rescue []
33
39
  unless accept?(host, port)
34
40
  unbind
35
41
  return
36
42
  end
43
+ self.data.host = host
44
+ self.data.port = port
37
45
 
38
- @client = EM::Nodes::Server::Client.new(self)
39
- self.class.clients << @client
40
- EM::Nodes.logger.info "Incomming connection from #{host}:#{port}"
46
+ @alive = true
47
+ self.class.clients << self
48
+ EM::Nodes.logger.info { "Incomming connection from #{host}:#{port}" }
41
49
  end
42
50
 
43
51
  def unbind
44
- @client.disconnect!
45
- self.class.clients.delete @client
46
- EM::Nodes.logger.info "Client has disconnected"
52
+ @alive = false
53
+ self.class.clients.delete self
54
+ EM::Nodes.logger.info { "Client #{self.data.inspect} has disconnected" }
47
55
  end
48
56
 
49
- def self.start(host, port, *args)
50
- EM::Nodes.logger.info "start server on #{host}:#{port}"
57
+ def self.start(host, port = nil, *args)
58
+ EM::Nodes.logger.info { "Start server #{host}:#{port}" }
51
59
  EM.start_server host, port, self, *args
52
60
  end
53
61
  end
62
+
data/lib/em-nodes.rb CHANGED
@@ -2,7 +2,7 @@ require 'eventmachine'
2
2
  require 'logger'
3
3
 
4
4
  module EM::Nodes
5
- VERSION = "0.1"
5
+ VERSION = "0.2"
6
6
 
7
7
  class << self
8
8
  def logger=(logger)
data/spec/base_spec.rb ADDED
@@ -0,0 +1,56 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ class Client0 < EM::Nodes::Client
4
+ attr_reader :bla
5
+
6
+ def post_init
7
+ super
8
+ @bla = 1
9
+ end
10
+
11
+ def unbind
12
+ super
13
+ @bla = 2
14
+ end
15
+ end
16
+
17
+ class Server0 < EM::Nodes::Server
18
+ attr_reader :bla
19
+
20
+ def post_init
21
+ super
22
+ @bla = 1
23
+ end
24
+
25
+ def unbind
26
+ super
27
+ @bla = 2
28
+ end
29
+ end
30
+
31
+ describe "Base spec" do
32
+ it "base callbacks should work" do
33
+ EM.run do
34
+ $server0 = Server0.start('/tmp/_emn_server0')
35
+ $client0 = Client0.connect('/tmp/_emn_server0')
36
+
37
+ EM.next_tick do
38
+ $client0.bla.should == 1
39
+ $client0.alive.should == true
40
+
41
+ $client00 = Server0.clients.first
42
+ $client00.bla.should == 1
43
+ $client00.alive.should == true
44
+ end
45
+
46
+ EM.add_timer(0.2) { EM.next_tick { EM.stop } }
47
+ end
48
+
49
+ $client0.bla.should == 2
50
+ $client0.alive.should == false
51
+
52
+ Server0.clients.size.should == 0
53
+ $client00.bla.should == 2
54
+ $client00.alive.should == false
55
+ end
56
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ class Client3 < EM::Nodes::Client
4
+ include HelloFeature
5
+
6
+ def info
7
+ { :name => "vasya" }
8
+ end
9
+ end
10
+
11
+ class Server3 < EM::Nodes::Server
12
+ include HelloFeature
13
+
14
+ def on_i_am(params)
15
+ super
16
+ $client3_result = self.data
17
+ $server3_ready_clients = Server3.ready_clients
18
+ EM.stop
19
+ end
20
+ end
21
+
22
+ describe "Hello spec" do
23
+ it "should work" do
24
+ EM.run do
25
+ $server3 = Server3.start('127.0.0.1', 19994)
26
+ $client3 = Client3.connect('127.0.0.1', 19994)
27
+ end
28
+
29
+ $client3_result.name.should == 'vasya'
30
+ $server3_ready_clients.size.should == 1
31
+ end
32
+ end
data/spec/simple2_spec.rb CHANGED
@@ -3,15 +3,15 @@ require File.dirname(__FILE__) + '/spec_helper'
3
3
  $pong = []
4
4
 
5
5
  class Client2 < EM::Nodes::Client
6
- def pong(a)
6
+ def on_pong(a)
7
7
  $pong << a
8
8
  EM.stop if $pong.size >= 2
9
9
  end
10
10
  end
11
11
 
12
12
  class Server2 < EM::Nodes::Server
13
- def ping(a)
14
- client.send_pong(a)
13
+ def on_ping(a)
14
+ send_pong(a + 1)
15
15
  end
16
16
  end
17
17
 
@@ -22,10 +22,10 @@ describe "Simple spec" do
22
22
  $client21 = Client2.connect('127.0.0.1', 19993)
23
23
  $client22 = Client2.connect('127.0.0.1', 19993)
24
24
 
25
- $client21.server.send_ping(1)
26
- $client22.server.send_ping(2)
25
+ $client21.send_ping(1)
26
+ $client22.send_ping(2)
27
27
  end
28
28
 
29
- $pong.should == [1, 2]
29
+ $pong.should == [2, 3]
30
30
  end
31
31
  end
data/spec/simple_spec.rb CHANGED
@@ -3,11 +3,11 @@ require File.dirname(__FILE__) + '/spec_helper'
3
3
  class Client1 < EM::Nodes::Client
4
4
  def initialize(name)
5
5
  @name = name
6
- super
6
+ super()
7
7
  end
8
8
 
9
- def who_are_you?
10
- server.send_i_am @name
9
+ def on_who_are_you?
10
+ send_i_am @name
11
11
  end
12
12
 
13
13
  def unbind
@@ -19,13 +19,13 @@ end
19
19
  class Server1 < EM::Nodes::Server
20
20
  def post_init
21
21
  super
22
- client.send_who_are_you?
22
+ send_who_are_you?
23
23
  end
24
24
 
25
- def i_am(name)
26
- client.data.name = name
25
+ def on_i_am(name)
26
+ self.data.name = name
27
27
  $client1_result = { :name => name, :clients => Server1.clients.clone }
28
- client.send_unbind
28
+ EM.stop
29
29
  end
30
30
  end
31
31
 
data/spec/task_spec.rb ADDED
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+
4
+ class Client4 < EM::Nodes::Client
5
+ include TaskFeature
6
+
7
+ def on_task(task_id, data)
8
+ $client4_results << data
9
+ send_task_result(task_id, data + 1) if $client4_results.size <= 10
10
+ end
11
+ end
12
+
13
+ class Server4 < EM::Nodes::Server
14
+ include TaskFeature
15
+
16
+ def on_task_result(res)
17
+ $server4_results << res
18
+ EM.next_tick { EM.stop } if $server4_results.size >= 10
19
+ end
20
+
21
+ def on_reschedule_tasks(values)
22
+ $server4_unbind_results = values
23
+ end
24
+ end
25
+
26
+ describe "Task spec" do
27
+ before {
28
+ $client4_results = []
29
+ $server4_results = []
30
+ $server4_unbind_results = []
31
+ }
32
+
33
+ it "should work" do
34
+ client4 = nil
35
+ EM.run do
36
+ $server4 = Server4.start('127.0.0.1', 19995)
37
+ $client4 = Client4.connect('127.0.0.1', 19995)
38
+
39
+ EM.next_tick do
40
+ client4 = Server4.clients.first
41
+ 10.times { |i| client4.send_task(i) }
42
+ end
43
+ end
44
+
45
+ $server4_results.should == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
46
+ $server4_unbind_results.should == []
47
+ client4.task_count.should == 0
48
+ end
49
+
50
+ it "on unbind" do
51
+ EM.run do
52
+ $server4 = Server4.start('127.0.0.1', 19996)
53
+ $client4 = Client4.connect('127.0.0.1', 19996)
54
+
55
+ EM.next_tick do
56
+ client4 = Server4.clients.first
57
+ 20.times { |i| client4.send_task(i) }
58
+ end
59
+ end
60
+
61
+ $server4_results.should == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
62
+ $server4_unbind_results.sort.should == [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
63
+ end
64
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-nodes
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - '''Konstantin Makarchev'''
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-20 00:00:00.000000000 Z
11
+ date: 2014-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -74,23 +74,31 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - .gitignore
77
+ - .rspec
77
78
  - Gemfile
78
79
  - LICENSE.txt
79
80
  - README.md
80
81
  - Rakefile
82
+ - benchmark/client.rb
83
+ - benchmark/run.sh
84
+ - benchmark/server.rb
81
85
  - em-nodes.gemspec
82
86
  - examples/chat_client.rb
83
87
  - examples/chat_server.rb
84
88
  - lib/em-nodes.rb
85
- - lib/em-nodes/abstract_command.rb
86
89
  - lib/em-nodes/client.rb
87
- - lib/em-nodes/client/server.rb
90
+ - lib/em-nodes/client/hello.rb
91
+ - lib/em-nodes/client/task.rb
88
92
  - lib/em-nodes/commands.rb
89
93
  - lib/em-nodes/server.rb
90
- - lib/em-nodes/server/client.rb
94
+ - lib/em-nodes/server/hello.rb
95
+ - lib/em-nodes/server/task.rb
96
+ - spec/base_spec.rb
97
+ - spec/hello_spec.rb
91
98
  - spec/simple2_spec.rb
92
99
  - spec/simple_spec.rb
93
100
  - spec/spec_helper.rb
101
+ - spec/task_spec.rb
94
102
  homepage: https://github.com/kostya/em-nodes
95
103
  licenses:
96
104
  - MIT
@@ -116,6 +124,9 @@ signing_key:
116
124
  specification_version: 4
117
125
  summary: Simple EM client server, and some stuffs
118
126
  test_files:
127
+ - spec/base_spec.rb
128
+ - spec/hello_spec.rb
119
129
  - spec/simple2_spec.rb
120
130
  - spec/simple_spec.rb
121
131
  - spec/spec_helper.rb
132
+ - spec/task_spec.rb
@@ -1,19 +0,0 @@
1
- module EM::Nodes::AbstractCommand
2
- COMMAND_PREFIX = 'send_'
3
-
4
- def method_missing(method, *args)
5
- method = method.to_s
6
-
7
- unless method.start_with?(COMMAND_PREFIX)
8
- EM::Nodes.logger.debug "unknown send #{method} #{args.inspect}"
9
- super
10
- return
11
- end
12
-
13
- if @alive
14
- @connection.send_command(method.sub(COMMAND_PREFIX, ''), args)
15
- else
16
- EM::Nodes.logger.error "failed command attempt #{method}, connection dead"
17
- end
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- class EM::Nodes::Client::Server
2
- include EM::Nodes::AbstractCommand
3
-
4
- attr_accessor :connection, :alive
5
- def initialize(conn)
6
- @connection = conn
7
- @alive = true
8
- end
9
-
10
- def disconnect!
11
- @alive = false
12
- end
13
- end
@@ -1,18 +0,0 @@
1
- require 'ostruct'
2
-
3
- class EM::Nodes::Server::Client
4
- include EM::Nodes::AbstractCommand
5
-
6
- attr_accessor :connection, :alive
7
- attr_reader :data
8
-
9
- def initialize(conn)
10
- @connection = conn
11
- @alive = true
12
- @data = OpenStruct.new
13
- end
14
-
15
- def disconnect!
16
- @alive = false
17
- end
18
- end