Class: DeepConnect::Event::Request

Inherits:
Event show all
Defined in:
lib/deep-connect/event.rb

Instance Attribute Summary collapse

Attributes inherited from Event

#receiver, #seq, #session

Class Method Summary collapse

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

#argsObject (readonly)

Returns the value of attribute args.



145
146
147
# File 'lib/deep-connect/event.rb', line 145

def args
  @args
end

#methodObject (readonly)

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_exceptionObject



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

#init_reqObject



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

#inspectObject



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_classObject



81
82
83
# File 'lib/deep-connect/event.rb', line 81

def reply_class
	Reply
end

#request?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'lib/deep-connect/event.rb', line 118

def request?
	true
end

#resultObject



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_eventObject



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

#serializeObject



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