PHP 8.2.31
Preview: timeridconv.rb Size: 1.73 KB
//proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/drb/timeridconv.rb

require 'drb/drb'
require 'monitor'

module DRb
  class TimerIdConv < DRbIdConv
    class TimerHolder2
      include MonitorMixin

      class InvalidIndexError < RuntimeError; end

      def initialize(timeout=600)
        super()
        @sentinel = Object.new
        @gc = {}
        @curr = {}
        @renew = {}
        @timeout = timeout
        @keeper = keeper
      end

      def add(obj)
        synchronize do
          key = obj.__id__
          @curr[key] = obj
          return key
        end
      end

      def fetch(key, dv=@sentinel)
        synchronize do
          obj = peek(key)
          if obj == @sentinel
            return dv unless dv == @sentinel
            raise InvalidIndexError
          end
          @renew[key] = obj # KeepIt
          return obj
        end
      end

      def include?(key)
        synchronize do
          obj = peek(key)
          return false if obj == @sentinel
          true
        end
      end

      def peek(key)
        synchronize do
          return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))
        end
      end

      private
      def alternate
        synchronize do
          @gc = @curr       # GCed
          @curr = @renew
          @renew = {}
        end
      end

      def keeper
        Thread.new do
          loop do
            alternate
            sleep(@timeout)
          end
        end
      end
    end

    def initialize(timeout=600)
      @holder = TimerHolder2.new(timeout)
    end

    def to_obj(ref)
      return super if ref.nil?
      @holder.fetch(ref)
    rescue TimerHolder2::InvalidIndexError
      raise "invalid reference"
    end

    def to_id(obj)
      return @holder.add(obj)
    end
  end
end

# DRb.install_id_conv(TimerIdConv.new)

Directory Contents

Dirs: 0 × Files: 11

Name Size Perms Modified Actions
4.65 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
53.09 KB lrw-r--r-- 2011-06-29 21:33:36
Edit Download
234 B lrw-r--r-- 2010-01-26 11:22:20
Edit Download
1.19 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
1.71 KB lrw-r--r-- 2012-05-19 05:41:23
Edit Download
1.88 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
732 B lrw-r--r-- 2011-05-18 21:19:18
Edit Download
473 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
5.46 KB lrw-r--r-- 2014-01-30 12:04:22
Edit Download
1.73 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
2.55 KB lrw-r--r-- 2012-05-19 05:40:29
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).