2010-10-21 11 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 

Ma question est de savoir comment obtenir some_value dans le module EchoServer? et quelle est la relation entre la classe Test et le module EchoServer?Une question eventmachine

+1

Vous devriez mettre la question dans le titre de la question au lieu de 'Une question avec EventMachine' – SeanJA

+0

oui, pourriez-vous s'il vous plaît donner un meilleur titre? Je suis désolé, je n'ai aucune idée avec le titre :) – why

Répondre

1

Si vous changez EchoServer dans une classe et d'ajouter un attr_accessor pour some_value vous pouvez pouvez joindre un bloc au serveur de démarrage et passer la valeur.

#!/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 

Dans votre exemple, la seule relation entre le test et EchoServer est que vous avez exécuté la boucle d'événement EM depuis l'intérieur de la classe de test. Cela n'a aucun effet sur EM ou comment il utilisera EchoServer.

+0

merci pour vous "bloquer", ça marche! – why