Sha256: 8e03b4aba29e4a4278fbc8084e08fce0732ebd0b4ef77b8d7575aecdce742cb0

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

=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


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dango_generator-0.5.2 templates/sample_as3mode/dango/server/99_dango_server.rb