2010-10-21 2 views
0
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? и какова связь между тестом класса и модулем EchoServer?Один вопрос с EventMachine

+1

Вы должны задать вопрос в названии вопроса вместо «Один вопрос с EventMachine» – SeanJA

+0

Да, не могли бы вы дать один лучший заголовок? Извините, я понятия не имею с названием :) – why

ответ

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 

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

+0

спасибо вам за "блок", он работает! – why