Class: DeepConnect::Reference
Defined Under Namespace
Classes: UndefinedClass
Instance Attribute Summary collapse
-
#csid ⇒ Object
readonly
Returns the value of attribute csid.
-
#deep_space ⇒ Object
(also: #deepspace)
readonly
Returns the value of attribute deep_space.
-
#peer_id ⇒ Object
readonly
Returns the value of attribute peer_id.
Class Method Summary collapse
- .materialize(deep_space, type, csid, object_id, uuid = nil) ⇒ Object
- .materialize_val(deep_space, type, csid, klass, value) ⇒ Object
-
.new(deep_space, csid, peer_id) ⇒ Object
def Reference.register(deep_space, o) deep_space.peer.set_root(o) Reference.new(session, o.id) end.
-
.serialize(deep_space, value, spec = nil) ⇒ Object
session ローカルなプロキシを生成 [クラス名, 値] [クラス名, ローカルSESSION, 値].
- .serialize_val(deep_space, value, spec) ⇒ Object
- .serialize_with_spec(deep_space, value, spec) ⇒ Object
Instance Method Summary collapse
-
#==(obj) ⇒ Object
(also: #eql?)
def ==(obj) return true if obj.equal?(self).
- #__deep_connect_real_class ⇒ Object
-
#__deep_connect_reference? ⇒ Boolean
(also: #dc_reference?)
def coerce(other) return other, peer end.
- #asynchronus_send_with_callback(method, *args, &callback) ⇒ Object (also: #asynchronus_send)
- #deep_connect_deep_copy ⇒ Object (also: #dc_deep_copy)
- #deep_connect_dup ⇒ Object (also: #dc_dup)
- #equal?(obj) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(deep_space, csid, peer_id) ⇒ Reference
constructor
A new instance of Reference.
- #inspect(force = false) ⇒ Object
- #kind_of?(klass) ⇒ Boolean
-
#method_missing(method, *args, &block) ⇒ Object
TO_METHODS = [:to_ary, :to_str, :to_int, :to_regexp] TO_METHODS = [:to_ary, :to_str, :to_int, :to_regexp, :to_splat].
- #my_inspect ⇒ Object
- #nil? ⇒ Boolean
- #peer ⇒ Object
- #peer_class ⇒ Object
- #peer_inspect ⇒ Object
- #release ⇒ Object
- #respond_to?(m, include_private = false) ⇒ Boolean
-
#to_s(force = false) ⇒ Object
def to_a self.dc_dup.to_a end.
Constructor Details
#initialize(deep_space, csid, peer_id) ⇒ Reference
Returns a new instance of Reference.
147 148 149 150 151 |
# File 'lib/deep-connect/reference.rb', line 147 def initialize(deep_space, csid, peer_id) @deep_space = deep_space @csid = csid @peer_id = peer_id end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
TO_METHODS = [:to_ary, :to_str, :to_int, :to_regexp]
TO_METHODS = [:to_ary, :to_str, :to_int, :to_regexp, :to_splat]
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/deep-connect/reference.rb', line 169 def method_missing(method, *args, &block) puts "SEND MESSAGE: #{self.inspect} #{method.id2name}" if Conf.DISPLAY_MESSAGE_TRACE # if TO_METHODS.include?(method) # return self.dc_dup.send(method) # end begin if iterator? @deep_space.session.send_to(self, method, args, &block) else @deep_space.session.send_to(self, method, args) end # rescue NoMethodError # p $@ # p $! # super end end |
Instance Attribute Details
#csid ⇒ Object (readonly)
Returns the value of attribute csid.
155 156 157 |
# File 'lib/deep-connect/reference.rb', line 155 def csid @csid end |
#deep_space ⇒ Object (readonly) Also known as: deepspace
Returns the value of attribute deep_space.
153 154 155 |
# File 'lib/deep-connect/reference.rb', line 153 def deep_space @deep_space end |
#peer_id ⇒ Object (readonly)
Returns the value of attribute peer_id.
156 157 158 |
# File 'lib/deep-connect/reference.rb', line 156 def peer_id @peer_id end |
Class Method Details
.materialize(deep_space, type, csid, object_id, uuid = nil) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/deep-connect/reference.rb', line 102 def Reference.materialize(deep_space, type, csid, object_id, uuid=nil) if type == Reference if uuid if uuid == :PEER_OBJECT deep_space.root(object_id) else if uuid[0] == :SAME_UUIDADDR uuid[0] = deep_space.peer_uuid[0].dup end peer_deep_space = deep_space.organizer.deep_space(uuid) peer_deep_space.register_root_to_peer(object_id) type.new(peer_deep_space, csid, object_id) end else type.new(deep_space, csid, object_id) end else if type == :VAL materialize_val(deep_space, type, csid, object_id[0], object_id[1]) else # 即値 object_id end end end |
.materialize_val(deep_space, type, csid, klass, value) ⇒ Object
129 130 131 |
# File 'lib/deep-connect/reference.rb', line 129 def Reference.materialize_val(deep_space, type, csid, klass, value) klass.deep_connect_materialize_val(deep_space, value) end |
.new(deep_space, csid, peer_id) ⇒ Object
def Reference.register(deep_space, o)
deep_space.peer.set_root(o)
Reference.new(session, o.id)
end
138 139 140 141 142 143 144 145 |
# File 'lib/deep-connect/reference.rb', line 138 def Reference.new(deep_space, csid, peer_id) if r = deep_space.import_reference(peer_id) return r end r = super deep_space.register_import_reference(r) r end |
.serialize(deep_space, value, spec = nil) ⇒ Object
session ローカルなプロキシを生成
- クラス名, 値
- クラス名, ローカルSESSION, 値
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/deep-connect/reference.rb', line 30 def Reference.serialize(deep_space, value, spec = nil) if spec return Reference.serialize_with_spec(deep_space, value, spec) end if value.__deep_connect_reference? if deep_space == value.deep_space [value.__deep_connect_real_class, value.csid, value.peer_id, :PEER_OBJECT] else uuid = value.deep_space.peer_uuid.dup if uuid[0] == "127.0.0.1" || uuid[0] == "::ffff:127.0.0.1" uuid[0] = :SAME_UUIDADDR end [value.__deep_connect_real_class, value.csid, value.peer_id, uuid] end else case value when *Organizer::immutable_classes [value.__deep_connect_real_class, value.__deep_connect_real_class.name, value] else object_id = deep_space.set_root(value) csid = deep_space.my_csid_of(value) [Reference, csid, object_id] end end end |
.serialize_val(deep_space, value, spec) ⇒ Object
92 93 94 95 96 97 98 99 100 |
# File 'lib/deep-connect/reference.rb', line 92 def Reference.serialize_val(deep_space, value, spec) case value when *Organizer::immutable_classes [value.__deep_connect_real_class, value.__deep_connect_real_class.name, value] else [:VAL, value.__deep_connect_real_class.name, [value.__deep_connect_real_class, value.deep_connect_serialize_val(deep_space)]] end end |
.serialize_with_spec(deep_space, value, spec) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/deep-connect/reference.rb', line 58 def Reference.serialize_with_spec(deep_space, value, spec) if value.__deep_connect_reference? if deep_space == value.deep_space [value.__deep_connect_real_class, value.csid, value.peer_id, :PEER_OBJECT] else uuid = value.deep_space.peer_uuid.dup if uuid[0] == "127.0.0.1" || uuid[0] == "::ffff:127.0.0.1" uuid[0] = :SAME_UUIDADDR end [value.__deep_connect_real_class, value.csid, value.peer_id, uuid] end elsif Organizer::absolute_immutable_classes.include?(value.class) [value.__deep_connect_real_class, value.__deep_connect_real_class.name, value] else case spec when MethodSpec::DefaultParamSpec Reference.serialize(deep_space, value) when MethodSpec::RefParamSpec object_id = deep_space.set_root(value) csid = deep_space.my_csid_of(value) [Reference, csid, object_id] when MethodSpec::ValParamSpec serialize_val(deep_space, value, spec) when MethodSpec::DValParamSpec # 第2引数意味なし [value.__deep_connect_real_class, value.__deep_connect_real_class.name, value] else raise ArgumentError, "argument is only specified(#{MethodSpec::ARG_SPEC.join(', ')})(#{spec})" end end end |
Instance Method Details
#==(obj) ⇒ Object Also known as: eql?
def ==(obj)
return true if obj.equal?(self)
self.deep_connect_copy == obj
false
end
268 269 270 271 272 |
# File 'lib/deep-connect/reference.rb', line 268 def ==(obj) obj.__deep_connect_reference? && @deep_space == obj.deep_space && @peer_id == obj.peer_id end |
#__deep_connect_real_class ⇒ Object
236 237 238 |
# File 'lib/deep-connect/reference.rb', line 236 def __deep_connect_real_class Reference end |
#__deep_connect_reference? ⇒ Boolean Also known as: dc_reference?
def coerce(other)
return other, peer
end
231 232 233 |
# File 'lib/deep-connect/reference.rb', line 231 def __deep_connect_reference? true end |
#asynchronus_send_with_callback(method, *args, &callback) ⇒ Object Also known as: asynchronus_send
188 189 190 |
# File 'lib/deep-connect/reference.rb', line 188 def asynchronus_send_with_callback(method, *args, &callback) @deep_space.session.asyncronus_send_to(self, method, args, callback) end |
#deep_connect_deep_copy ⇒ Object Also known as: dc_deep_copy
396 397 398 |
# File 'lib/deep-connect/reference.rb', line 396 def deep_connect_deep_copy @deep_space.session.send_to(self, :deep_connect_deep_copy) end |
#deep_connect_dup ⇒ Object Also known as: dc_dup
391 392 393 |
# File 'lib/deep-connect/reference.rb', line 391 def deep_connect_dup @deep_space.session.send_to(self, :deep_connect_dup) end |
#equal?(obj) ⇒ Boolean
276 277 278 |
# File 'lib/deep-connect/reference.rb', line 276 def equal?(obj) self.object_id == obj.object_id end |
#hash ⇒ Object
280 281 282 |
# File 'lib/deep-connect/reference.rb', line 280 def hash @deep_space.object_id ^ @peer_id end |
#inspect(force = false) ⇒ Object
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
# File 'lib/deep-connect/reference.rb', line 354 def inspect(force = false) if !force && /deep-connect/ =~ caller(1).first unless /deep-connect\/test/ =~ caller(1).first return sprintf("<DC::Ref: deep_space=%s csid=%s id=%x>", @deep_space.to_s, @csid, @peer_id) end end if Conf.DEBUG_REFERENCE sprintf("<DC::Ref[deep_space=%s csid=%s id=%x]: %s>", @deep_space.to_s, @csid, @peer_id, to_s) else sprintf("<DC::Ref: %s>", to_s(true)) end end |
#kind_of?(klass) ⇒ Boolean
284 285 286 287 288 289 290 |
# File 'lib/deep-connect/reference.rb', line 284 def kind_of?(klass) if klass.__deep_connect_reference? @deep_space.session.send_to(self, :kind_of?, klass) else self.peer_class <= klass end end |
#my_inspect ⇒ Object
387 388 389 |
# File 'lib/deep-connect/reference.rb', line 387 def my_inspect __deep_connect_org_inspect end |
#nil? ⇒ Boolean
292 293 294 |
# File 'lib/deep-connect/reference.rb', line 292 def nil? false end |
#peer ⇒ Object
158 159 160 |
# File 'lib/deep-connect/reference.rb', line 158 def peer @deep_space.root(@peer_id) end |
#peer_class ⇒ Object
242 243 244 245 246 247 248 249 250 |
# File 'lib/deep-connect/reference.rb', line 242 def peer_class return @peer_class if @peer_class begin @peer_class = self.class.dc_deep_copy rescue @peer_class = UndefinedClass end @peer_class end |
#peer_inspect ⇒ Object
375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/deep-connect/reference.rb', line 375 def peer_inspect begin @deep_space.session.send_to(self, :inspect) rescue SessionServiceStopped sprintf("<DC::Ref[deep_space=%s csid=%s id=%x]: %s>", @deep_space.to_s, @csid, @peer_id, "(service stoped)") end end |
#release ⇒ Object
162 163 164 |
# File 'lib/deep-connect/reference.rb', line 162 def release @deep_space.deregister_import_reference_id(self) end |
#respond_to?(m, include_private = false) ⇒ Boolean
252 253 254 255 256 257 258 259 |
# File 'lib/deep-connect/reference.rb', line 252 def respond_to?(m, include_private = false) # m = m.intern # if m != :to_ary && super # return true # end return true if super return @deep_space.session.send_to(self, :respond_to?, [m, include_private]) end |
#to_s(force = false) ⇒ Object
def to_a
self.dc_dup.to_a
end
340 341 342 343 344 345 346 347 348 349 350 351 352 |
# File 'lib/deep-connect/reference.rb', line 340 def to_s(force = false) if !force && /deep-connect/ =~ caller(1).first unless /deep-connect\/test/ =~ caller(1).first return __deep_connect_org_to_s end end if @deep_space.status == :SERVICING @deep_space.session.send_to(self, :to_s) else "(no service)" end end |