[#20675] RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...>

Hi,

49 messages 2001/09/01
[#20774] Re: RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...> 2001/09/03

I wrote:

[#20778] Re: RCR: non-bang equivalent to []= — Kevin Smith <kevinbsmith@...> 2001/09/03

--- Tobias Reif <tobiasreif@pinkjuice.com> wrote:

[#20715] oreilly buch von matz - website online — markus jais <info@...>

hi

43 messages 2001/09/02
[#20717] Re: OReilly Ruby book has snail on cover — ptkwt@...1.aracnet.com (Phil Tomson) 2001/09/02

Actually, thanks for posting it here. I was trying to search OReilly's

[#20922] Re: OReilly Ruby book has snail on cover — Paul Brannan <pbrannan@...> 2001/09/05

On Mon, 3 Sep 2001, Phil Tomson wrote:

[#20768] Minor cgi.rb question — "Hal E. Fulton" <hal9000@...>

I don't have much experience with

25 messages 2001/09/03

[#20770] Calling member methods from C++ — jglueck@... (Bernhard Glk)

Some quetsions have been solved for me, but my message system does not

12 messages 2001/09/03

[#20976] destructor — Frank Sonnemans <ruby@...>

Does Ruby have a destructor as in C++?

25 messages 2001/09/07

[#21218] Ruby objects <-> XML: anyone working on this? — senderista@... (Tobin Baker)

Are there any Ruby analogs of these two Python modules (xml_pickle,

13 messages 2001/09/15

[#21296] nested require files need path internally — Bob Gustafson <bobgus@...>

Version: 1.64

29 messages 2001/09/18
[#21298] Re: nested require files need path internally — David Alan Black <dblack@...> 2001/09/18

Hello --

[#21302] Re: nested require files need path internally — Bob Gustafson <bobgus@...> 2001/09/18

On Tue, 18 Sep 2001, David Alan Black wrote:

[#21303] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21306] Re: nested require files need path internally — Lars Christensen <larsch@...> 2001/09/18

On Tue, 18 Sep 2001, Yukihiro Matsumoto wrote:

[#21307] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21331] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

> The big difference is C++ search done in compile time, Ruby search

[#21340] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21353] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21366] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21368] Re: nested require files need path internally — "Julian Fitzell" <julian-ml@...4.com> 2001/09/19

On 19/09/2001 at 10:12 AM matz@ruby-lang.org wrote:

[#21376] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21406] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/19

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21315] Suggestions for new CGI lib — anders@... (Anders Johannsen)

From the comp.lang.ruby thread "Minor cgi.rb question" (2001-09-03), I

21 messages 2001/09/18

[#21413] Ruby/objects book in style of The Little Lisper — Brian Marick <marick@...>

I fell in love with Lisp in the early 80's. Back then, I read a book called

36 messages 2001/09/19
[#21420] Re: Ruby/objects book in style of The Little Lisper — Christopher Sawtell <csawtell@...> 2001/09/20

On 20 Sep 2001 06:19:44 +0900, Brian Marick wrote:

[#21479] Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Christopher Sawtell <csawtell@paradise.net.nz> wrote:

[#21491] SV: Re: Ruby/objects book in style of The Little Lisper — "Mikkel Damsgaard" <mikkel_damsgaard@...> 2001/09/21

[#21494] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Mikkel Damsgaard <mikkel_damsgaard@mailme.dk> wrote:

[#21510] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Todd Gillespie <toddg@...> 2001/09/22

On Sat, 22 Sep 2001, Kevin Smith wrote:

[#21514] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/22

--- Todd Gillespie <toddg@mail.ma.utexas.edu> wrote:

[#21535] irb — Fabio <fabio.spelta@...>

Hello. :) I'm new here, and I have not found an archive of the previous

15 messages 2001/09/22

[#21616] opening a named pipe? — "Avdi B. Grimm" <avdi@...>

I'm having trouble reading from a named pipe in linux. basicly, I'm

12 messages 2001/09/24

[#21685] manipulating "immutable" objects such as Fixnum from within callbacks & al... — Guillaume Cottenceau <gc@...>

Hello,

15 messages 2001/09/25

[#21798] Ruby internal (guide to the source) — "Benoit Cerrina" <benoit.cerrina@...>

Hi,

22 messages 2001/09/28

[ruby-talk:21280] Re: Peer-to-peer

From: Masatoshi SEKI <m_seki@...>
Date: 2001-09-17 09:52:15 UTC
List: ruby-talk #21280


Hi,

> [1] client B contacts server A (on a well known port), publishes
> list of shared files, and _port_ on which it's listening and willing
> to serve peer requests
> [2] client C contacts server A (on same well known port), requesting
> a file. Server discovers a match in B's list, and directs C to B's
> listening port. (I don't mean automatic redirection, C needs to
> explicitly contact B on its advertised port)
> [3] C serves request(s) on published port


I wrote using dRuby.


## gossip.rb
require 'drb/drb'
require 'drb/eq'
require 'thread'

class Gossip
  include DRbUndumped

  def initialize(entry={})
    @neighborhood = {}
    @entry = entry
    @gossip = {}
    @mutex = Mutex.new
  end
  
  def regist(who, keys)
    @mutex.synchronize do
      @neighborhood[who] = true
      keys.each do |key|
	@gossip[key] = [] unless @gossip[key]
	@gossip[key].push(who) unless @gossip[key].include?(who)
      end
    end
  end

  def regist_to(who)
    who.regist(self, @entry.keys)
    @mutex.synchronize do
      @neighborhood[who] = true
    end
  end

  def introduce(key)
    @gossip.fetch(key, [])
  end

  def topics
    (@gossip.keys + @entry.keys).uniq
  end

  def [](key)
    @entry[key]
  end

  def walk(who, key, visited)
    return nil if visited[who]
    visited[who] = true

    begin
      found = who[key]
      return found if found

      who.introduce(key).each do |fwd|
	found = walk(fwd, key, visited)
	return found if found
      end
    rescue
      # die?
    end
    nil
  end

  def talk(key)
    return @entry[key] if @entry.include?(key)

    visited = {}
    @neighborhood.keys.each do |who|
      found = walk(who, key, visited)
      return found if found
    end
    nil
  end
end



## a.rb
require 'gossip'

uri = ARGV.shift

gossip = Gossip.new({})
DRb.start_service(uri, gossip)

puts DRb.uri
puts '[enter] to exit.'
gets



## b.rb
require 'gossip'

there = ARGV.shift || raise

entry = {
  'dRuby'=>'too slow.',
  'Ruby'=>'snail',
  'Hello'=>'World'
}

b = Gossip.new(entry)
DRb.start_service(nil, b)

a = DRbObject.new(nil, there)
b.regist_to(a)

puts DRb.uri
puts '[enter] to exit.'
gets



## c.rb
require 'gossip'

there = ARGV.shift || raise

DRb.start_service

c = Gossip.new
a = DRbObject.new(nil, there)

c.regist_to(a)

p a.topics

puts c.talk('Ruby')
puts c.talk('dRuby')
puts c.talk('eRuby')


== How to play?
Terminal A
% a.rb druby://juke:1234
druby://juke:1234
[enter] to exit.

Terminal B
% b.rb druby://juke:1234
druby://juke:1238
[enter] to exit.

Terminal C
% c.rb druby://juke:1234
["Hello", "Ruby", "dRuby"]
snail
too slow.
nil


= File sharing demo
## rbsrc.rb
require 'gossip'

class Entry
  def make_entry
    entry = []
    Dir.open('.').each do |fname|
      entry.push(fname) if /\.rb$/ =~ fname
    end
    entry
  end

  def initialize
    @entry = make_entry
  end

  def include?(key)
    @entry.include?(key)
  end
  
  def [](key)
    return nil unless include?(key)
    File.open(key) do |fp|
      puts "Read: [#{key}]"
      return fp.read
    end
    nil
  end

  def keys
    @entry
  end
end

if __FILE__ == $0
  begin
    if ARGV[0] == '-s'
      neighbor_uri = nil
      ARGV.shift
      uri = ARGV.shift || raise
    else
      neighbor_uri = ARGV.shift || raise
      uri = nil
    end
  rescue
    puts "usage: #{$0} [-s] <uri> "
    exit
  end

  entry = Entry.new
  gossip = Gossip.new(entry)

  DRb.start_service(uri, gossip)
  
  if neighbor_uri
    there = DRbObject.new(nil, neighbor_uri)
    gossip.regist_to(there)
  end

  puts "URI: #{DRb.uri}"

  puts "query?>"
  while s = gets
    puts gossip.talk(s.chomp)
    p gossip.topics
    puts "query?>"
  end
end

== How to play?
* start central server
% ruby rbsrc.rb -s druby://juke:1234

* leaf client/server
% ruby rbsrc.rb druby://juke:1234


SeKi.

In This Thread

Prev Next