Class: DeepConnect::Event::Request
Instance Attribute Summary collapse
Attributes inherited from Event
#receiver, #seq, #session
Class Method Summary
collapse
-
.materialize_sub(session, type, klass, seq, receiver_id, method, args) ⇒ Object
-
.receipt(session, seq, receiver, method, args) ⇒ Object
-
.request(session, receiver, method, args) ⇒ Object
Instance Method Summary
collapse
Constructor Details
#initialize(session, receiver, method, args) ⇒ Request
Returns a new instance of Request.
85
86
87
88
89
|
# File 'lib/deep-connect/event.rb', line 85
def initialize(session, receiver, method, args)
super(session, receiver)
@method = method
@args = args
end
|
Instance Attribute Details
Returns the value of attribute args.
145
146
147
|
# File 'lib/deep-connect/event.rb', line 145
def args
@args
end
|
Returns the value of attribute method.
144
145
146
|
# File 'lib/deep-connect/event.rb', line 144
def method
@method
end
|
Class Method Details
.materialize_sub(session, type, klass, seq, receiver_id, method, args) ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/deep-connect/event.rb', line 67
def Request.materialize_sub(session, type, klass, seq, receiver_id, method, args)
receiver = session.deep_space.root(receiver_id)
type.receipt(session, seq,
receiver,
method,
args.collect{|elm|
Reference.materialize(session.deep_space, *elm)})
end
|
.receipt(session, seq, receiver, method, args) ⇒ Object
61
62
63
64
65
|
# File 'lib/deep-connect/event.rb', line 61
def Request.receipt(session, seq, receiver, method, args)
rec = new(session, receiver, method, args)
rec.set_seq(seq)
rec
end
|
.request(session, receiver, method, args) ⇒ Object
55
56
57
58
59
|
# File 'lib/deep-connect/event.rb', line 55
def Request.request(session, receiver, method, args)
req = new(session, receiver, method, args)
req.init_req
req
end
|
Instance Method Details
#create_exception ⇒ Object
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/deep-connect/event.rb', line 151
def create_exception
exp = nil
begin
exp = @result.exp.dc_dup
rescue
exp = PeerSideException.new(@result.exp)
end
bt = @result.exp.backtrace
bt.push "-- peer side --"
bt.push *caller(0)
bt = bt.select{|e| /deep-connect/ !~ e} unless Conf.DEBUG
exp.set_backtrace(bt)
exp
end
|
91
92
93
94
95
96
|
# File 'lib/deep-connect/event.rb', line 91
def init_req
@seq = @session.next_request_event_id
@result = :__DEEPCONNECT__NO_VALUE__
@result_mutex = Mutex.new
@result_cv = ConditionVariable.new
end
|
147
148
149
|
# File 'lib/deep-connect/event.rb', line 147
def inspect
sprintf "#<#{self.class}, session=#{@session}, seq=#{@seq}, receiver=#{@receiver}, method=#{@method.id2name}, args=#{@args.collect{|e| e.to_s}.join(', ')}>"
end
|
#reply(ret, exp = nil, reply_class = reply_class) ⇒ Object
77
78
79
|
# File 'lib/deep-connect/event.rb', line 77
def reply(ret, exp = nil, reply_class = reply_class)
reply_class.reply(self.session, self, ret, exp)
end
|
#reply_class ⇒ Object
81
82
83
|
# File 'lib/deep-connect/event.rb', line 81
def reply_class
Reply
end
|
#request? ⇒ Boolean
118
119
120
|
# File 'lib/deep-connect/event.rb', line 118
def request?
true
end
|
131
132
133
134
135
136
137
|
# File 'lib/deep-connect/event.rb', line 131
def result
result_event
if @result.exp
raise create_exception
end
@result.result
end
|
#result=(ev) ⇒ Object
139
140
141
142
|
# File 'lib/deep-connect/event.rb', line 139
def result=(ev)
@result = ev
@result_cv.broadcast
end
|
#result_event ⇒ Object
122
123
124
125
126
127
128
129
|
# File 'lib/deep-connect/event.rb', line 122
def result_event
@result_mutex.synchronize do
while @result == :__DEEPCONNECT__NO_VALUE__
@result_cv.wait(@result_mutex)
end
end
@result
end
|
#serialize ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/deep-connect/event.rb', line 102
def serialize
mspec = @session.deep_space.method_spec(@receiver, @method)
if mspec && mspec.args
args = mspec.arg_zip(@args){|spec, arg|
Reference.serialize_with_spec(@session.deep_space, arg, spec)
}
else
args = @args.collect{|elm|
Reference.serialize(@session.deep_space, elm)
}
end
sel = [self.class, @seq, @receiver.peer_id, @method]
sel.push args
sel
end
|
#set_seq(seq) ⇒ Object
98
99
100
|
# File 'lib/deep-connect/event.rb', line 98
def set_seq(seq)
@seq = seq
end
|