Один вопрос с EventMachine

 require 'eventmachine'

  module EchoServer
    def post_init
      puts "-- someone connected to the echo server!"
    end

    def receive_data data
      send_data ">>>you sent: #{data}"
      close_connection if data =~ /quit/i
    end

    def unbind
      puts "-- someone disconnected from the echo server!"
    end
  end

  class Test
    attr_reader :some_value
    def start
      EventMachine::run {
      EventMachine::start_server "127.0.0.1", 8081, EchoServer
      }
    end
  end

Мой вопрос: как получить значение some_value в модуле EchoServer? и какая связь между классом Test и модулем EchoServer?


person why    schedule 21.10.2010    source источник
comment
Вы должны поставить вопрос в заголовке вопроса вместо One question with EventMachine   -  person SeanJA    schedule 21.10.2010
comment
да, не могли бы вы дать одно лучшее название? Прошу прощения, с заголовком не разобрался :)   -  person why    schedule 21.10.2010


Ответы (1)


Если вы измените свой EchoServer на класс и добавите attr_accessor для some_value, вы сможете прикрепить блок к начальному серверу и передать значение.

#!/usr/bin/env ruby

require 'rubygems'
require 'eventmachine'

class EchoServer < EM::Connection
  attr_accessor :some_value
  def post_init
    puts "blah with #{some_value}"
  end

  def receive_data(data)
   puts "#{some_value} received #{data}"
  end

  def unbind
   puts "unbound"
  end
end

v = "some_value"
EM.run do
  EM.start_server "127.0.0.1", 8081, EchoServer do |conn|
    conn.some_value = v
  end
end

В вашем примере единственная связь между Test и EchoServer заключается в том, что вы запустили цикл событий EM из тестового класса. Это не влияет на EM или на то, как он будет использовать EchoServer.

person dj2    schedule 14.11.2010