=begin = dangoサーバー =end class DangoServer < DangoServerFramework # サーバー起動時のインスタンス変数などを定義するメソッド # ここで定義されるインスタンス変数はサーバー全体で共有される def dango_server_init() shared[:sids] = [] end # クライアント接続時に呼び出されるメソッド def dango_connect() current_sids = [] shared.transaction(:sids) do |sids| sids.push(session[:sid]) current_sids = sids.deep_dup shared.commit(sids) end send_obj = { # 全員に現在のsid一覧を送る :sids => current_sids, :is_connect => true, :_from_sid => session[:sid], } send_notice(:notice_current_sids, current_sids, send_obj) end # クライアント接続解除時に呼び出されるメソッド def dango_close() current_sids = [] shared.transaction(:sids) do |sids| sids.delete(session[:sid]) current_sids = sids.deep_dup shared.commit(sids) end send_obj = { # 全員に現在のsid一覧を送る :sids => current_sids, :is_close => true, :_from_sid => session[:sid], } send_notice(:notice_current_sids, current_sids, send_obj) end # オブジェクトを特定sidに送信する def dango_receive_send_object(rec_obj) send_obj = rec_obj["object"] to_sids = rec_obj["sids"] current_sids = shared[:sids] logger.warn "send_obj=#{send_obj.inspect}" logger.warn "to_sids=#{to_sids.inspect}" logger.warn "current_sids=#{current_sids.inspect}" if to_sids.is_a?(Array) if to_sids == [] to_sids = current_sids else to_sids.delete_if {|sid| !current_sids.include?(sid) } end send_obj[:_from_sid] = session[:sid] send_notice(:notice_send_object, to_sids, send_obj) end end end