Class: Dizby::BasicServer

Inherits:
AbstractServer show all
Extended by:
ClassicAttributeAccess
Defined in:
lib/dizby/server/basic.rb

Direct Known Subclasses

TCProtocol::Server, UnixProtocol::Server

Instance Attribute Summary collapse

Attributes inherited from AbstractServer

#log

Instance Method Summary collapse

Methods included from ClassicAttributeAccess

attr_accessor, attr_reader, attr_writer

Methods inherited from AbstractServer

#connect_to, #make_distributed, #spawn_on

Methods included from Configurable

#config_accessor, #config_reader, #config_writer

Constructor Details

#initialize(uri, front, stream, config) ⇒ BasicServer

Returns a new instance of BasicServer.



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/dizby/server/basic.rb', line 19

def initialize(uri, front, stream, config)
  super(config) { |msg| "#{uri} : #{msg}" }

  @uri = uri
  @front = front
  @stream = stream

  @exported_uri = Dizby.monitor([@uri])

  @shutdown_pipe = SelfPipe.new(*IO.pipe)
end

Instance Attribute Details

#exported_uri (readonly, private)

Returns the value of attribute exported_uri.



95
96
97
# File 'lib/dizby/server/basic.rb', line 95

def exported_uri
  @exported_uri
end

#front (readonly, private)

Returns the value of attribute front.



95
96
97
# File 'lib/dizby/server/basic.rb', line 95

def front
  @front
end

#shutdown_pipe (private)

Returns the value of attribute shutdown_pipe.



96
97
98
# File 'lib/dizby/server/basic.rb', line 96

def shutdown_pipe
  @shutdown_pipe
end

#stream (private)

Returns the value of attribute stream.



96
97
98
# File 'lib/dizby/server/basic.rb', line 96

def stream
  @stream
end

#uri (readonly)

Returns the value of attribute uri.



77
78
79
# File 'lib/dizby/server/basic.rb', line 77

def uri
  @uri
end

Instance Method Details

#accept



46
47
48
49
50
51
# File 'lib/dizby/server/basic.rb', line 46

def accept
  readables, = IO.select([stream, shutdown_pipe.read])
  fail LocalServerShutdown if readables.include? shutdown_pipe.read
  log.debug('Accepting connection')
  stream.accept
end

#add_uri_alias(uri)



80
81
82
83
84
85
86
# File 'lib/dizby/server/basic.rb', line 80

def add_uri_alias(uri)
  log.debug("Adding uri alias: #{uri}")

  exported_uri.synchronize do
    exported_uri << uri unless exported_uri.include?(uri)
  end
end

#alive?Boolean

Returns:

  • (Boolean)


53
54
55
56
57
58
59
# File 'lib/dizby/server/basic.rb', line 53

def alive?
  return false unless stream
  return true if stream.ready?

  shutdown
  false
end

#close



31
32
33
34
35
36
37
38
39
# File 'lib/dizby/server/basic.rb', line 31

def close
  log.debug('Closing')
  if stream
    stream.close
    self.stream = nil
  end

  close_shutdown_pipe
end

#close_shutdown_pipe (private)



98
99
100
101
102
103
104
105
# File 'lib/dizby/server/basic.rb', line 98

def close_shutdown_pipe
  return nil unless shutdown_pipe

  log.debug('Closing shutdown pipe')
  shutdown_pipe.close_read
  shutdown_pipe.close_write
  self.shutdown_pipe = nil
end

#here?(uri) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/dizby/server/basic.rb', line 88

def here?(uri)
  exported_uri.synchronize { exported_uri.include?(uri) }
end

#shutdown



41
42
43
44
# File 'lib/dizby/server/basic.rb', line 41

def shutdown
  log.debug('Shutting down')
  shutdown_pipe.close_write if shutdown_pipe
end

#to_id(obj)



72
73
74
75
# File 'lib/dizby/server/basic.rb', line 72

def to_id(obj)
  return nil if obj.__id__ == front.__id__
  idconv.to_id(obj)
end

#to_obj(ref)



61
62
63
64
65
66
67
68
69
70
# File 'lib/dizby/server/basic.rb', line 61

def to_obj(ref)
  case ref
  when nil
    front
  when QueryRef
    front[ref.to_s]
  else
    idconv.to_obj(ref)
  end
end