![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/lib/gems/2.5.0/gems/em-synchrony-1.0.3/lib/em-synchrony/ |
Upload File : |
begin require "remcached" rescue LoadError => error raise "Missing EM-Synchrony dependency: gem install remcached" end module Memcached class << self def connect(servers) Memcached.servers = servers f = Fiber.current @w = EM::Timer.new(10.0) { f.resume :error } @t = EM::PeriodicTimer.new(0.01) do if Memcached.usable? @w.cancel @t.cancel f.resume(self) end end r = Fiber.yield (r == :error) ? (raise Exception.new('Cannot connect to memcached server')) : r end %w[add get set delete].each do |type| class_eval %[ def a#{type}(contents, &callback) df = EventMachine::DefaultDeferrable.new df.callback &callback cb = Proc.new { |res| df.succeed(res) } operation Request::#{type.capitalize}, contents, &cb df end def #{type}(contents, &callback) fiber = Fiber.current paused = false cb = Proc.new do |res| if paused fiber.resume(res) else return res end end df = a#{type}(contents, &cb) df.callback &callback paused = true Fiber.yield end ] end %w[add get set delete].each do |type| class_eval %[ def amulti_#{type}(contents, &callback) df = EventMachine::DefaultDeferrable.new df.callback &callback cb = Proc.new { |res| df.succeed(res) } multi_operation Request::#{type.capitalize}, contents, &cb df end def multi_#{type}(contents, &callback) fiber = Fiber.current paused = false cb = Proc.new do |res| if paused fiber.resume(res) else return res end end df = amulti_#{type}(contents, &cb) df.callback &callback paused = true Fiber.yield end ] end end end