dango 0.0.29 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
@@ -152,6 +152,16 @@ class DangoClientFramework
152
152
  def dango_receive__notice_system_message(rec_obj)
153
153
  end
154
154
 
155
+ # ハートビートなら
156
+ def dango_receive__heart_beat(rec_obj)
157
+ end
158
+
159
+ # 必要に応じて追加するメソッド
160
+ def method_missing(name, *args)
161
+ logger.info "method not found. #{name.inspect} #{args.inspect}"
162
+ raise(NameError, "method not found. #{name.inspect} #{args.inspect}")
163
+ end
164
+
155
165
  # ユーザーが終了させたい時に呼び出すメソッド(セッションを切る)
156
166
  def dango_client_close
157
167
  client_quit() # クライアントの終了処理
@@ -253,8 +263,6 @@ class DangoClientFramework
253
263
  raise(DangoFrameworkError, "received data is none")
254
264
  end
255
265
 
256
- #remove_method(instance_method_name) # 定義したインスタンスメソッドを削除しておく
257
-
258
266
  send_return_shared[action_name]
259
267
  end
260
268
  end
@@ -556,7 +556,7 @@ class DangoServerFramework
556
556
  # sock = socket_list[sid]
557
557
  # logger.debug "heart_beat_thread_start:sid=#{sid} #{sock} #{sock.closed?}"
558
558
  # dango_send_data(sock, {})
559
- logger.debug "heart_beat_thread_start:sid=#{sid}"
559
+ # logger.debug "heart_beat_thread_start:sid=#{sid}"
560
560
  send_notice(sid, "_heart_beat", {}, {:timeout=>@heart_beat_response_wait_sec})
561
561
  end
562
562
  end
@@ -679,7 +679,7 @@ class DangoServerFramework
679
679
  end # catch 終わり
680
680
 
681
681
  if !have_came_response # 戻ってきたデータがあるかどうかチェック
682
- logger.warn "!!! received data is none:#{notice_name} #{sid} #{Time.now_to_s}"
682
+ logger.warn "!!! received data is none:#{notice_name} #{sid} #{send_obj_dup['_id']} #{Time.now_to_s}"
683
683
  end
684
684
  end
685
685
  end # mutex
@@ -122,19 +122,19 @@ class TestClient < DangoClientFramework
122
122
  raise(ArgumentError, ":proc is not Proc class.") if trap_proc && ! trap_proc.is_a?(Proc)
123
123
 
124
124
  # 戻ってきたデータのチェックメソッド
125
- notice_name_sym = (notice_name.class == Symbol) ? (":"+notice_name.to_s) : ('"'+notice_name+'"')
126
125
 
127
- if ! @receive_methods.include?(notice_name_sym)
126
+ # if ! @receive_methods.include?(notice_name_sym)
127
+ notice_name_sym = (notice_name.class == Symbol) ? (":"+notice_name.to_s) : ('"'+notice_name+'"')
128
128
  instance_method_name = "dango_receive_#{notice_name}"
129
129
  expr = <<-EOF
130
130
  def self.#{instance_method_name}(ret_obj)
131
- logger.debug "ret_obj:" + ret_obj.inspect + " " + Time.now_to_s
131
+ logger.debug "ret_obj:#{notice_name_sym}:" + ret_obj.inspect + " " + Time.now_to_s
132
132
  send_receive_shared[#{notice_name_sym}] = ret_obj
133
133
  end
134
134
  EOF
135
135
  instance_eval expr
136
- @receive_methods.push(notice_name_sym)
137
- end
136
+ # @receive_methods.push(notice_name_sym)
137
+ # end
138
138
 
139
139
  # @trap_thread_hashにスレッド登録
140
140
  if ! @trap_thread_hash.has_key?(notice_name)
@@ -157,7 +157,7 @@ class TestClient < DangoClientFramework
157
157
 
158
158
  # 戻ってきたデータがあれば
159
159
  if send_receive_shared[notice_name]
160
- logger.debug "notice_name:#{send_receive_shared[notice_name].inspect} #{Time.now_to_s}"
160
+ logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect} #{Time.now_to_s}"
161
161
  break
162
162
  end
163
163
 
@@ -173,18 +173,28 @@ class TestClient < DangoClientFramework
173
173
  if trap_proc
174
174
  logger.debug "trap_receive_data:trap_proc:#{trap_proc.inspect} #{Time.now_to_s}"
175
175
  trap_proc.call(send_receive_shared[notice_name])
176
+ send_receive_shared[notice_name] = nil
176
177
  break if ! trap_loop # loopする必要がなければスレッド終了
177
178
 
178
179
  # :procが設定されていなければ、wait用に@receive_arrに入れておく
179
180
  else
180
181
  @receive_mutex.synchronize do
181
182
  logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect} #{Time.now_to_s}"
182
- @receive_arr.push([notice_name, send_receive_shared[notice_name]])
183
+ @receive_arr.push([notice_name.deep_dup, send_receive_shared[notice_name].deep_dup])
184
+ send_receive_shared[notice_name] = nil
183
185
  end
184
186
  break # スレッド終了
185
187
 
186
188
  end
187
189
  end # loop
190
+
191
+ # メソッドの削除
192
+ instance_method_name = "dango_receive_#{notice_name}"
193
+ expr = <<-EOF
194
+ def self.#{instance_method_name}(ret_obj); end
195
+ EOF
196
+ instance_eval expr
197
+
188
198
  end # Thread
189
199
 
190
200
  @trap_thread_hash[notice_name] = th
@@ -201,13 +211,21 @@ class TestClient < DangoClientFramework
201
211
 
202
212
  # trapスレッドの削除
203
213
  if @trap_thread_hash[notice_name]
214
+ logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:#{Time.now_to_s}"
204
215
  @trap_thread_hash[notice_name].kill
216
+ logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:#{Time.now_to_s}"
205
217
  @trap_thread_hash[notice_name].join
218
+ logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:#{Time.now_to_s}"
206
219
 
207
220
  @trap_thread_hash.delete(notice_name)
208
221
  end
209
222
 
210
- send_receive_shared[notice_name] = nil # 受信データのごみを削除
223
+ # 受信データのごみを削除
224
+ send_receive_shared[notice_name] = nil
225
+
226
+ @receive_mutex.synchronize do
227
+ @receive_arr.delete_if{|r| r[0] == notice_name}
228
+ end
211
229
  end
212
230
 
213
231
  # wait_receive
data/lib/dango/version.rb CHANGED
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 29
5
+ TINY = 30
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: dango
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.29
7
- date: 2007-11-07 00:00:00 +09:00
6
+ version: 0.0.30
7
+ date: 2007-11-09 00:00:00 +09:00
8
8
  summary: Realtime communications network framework for Ruby and Flash on Rails.
9
9
  require_paths:
10
10
  - lib