トップ «前の日記(2006-07-11) 最新 次の日記(2006-07-24)» 編集

3 日坊主日記


2006-07-21 [長年日記]

_ [Rails] Rails Chat

最初の接続で "<li>New User</li>" が Ajax insert されるまで。

  • Flash --(XMLSocket)--> push_server # この接続は維持される
  • Flash (onConnect) --(getURL)--> JavaScript --(Ajax.Request)--> /chat/login --(TCPSocket)--> push_server
  • (broadcast) --> Flash (onXML) --(getURL)--> JavaScript (Insertion.Top)

ぐるぐる回る。楽しす!

図にするとこんな感じ。 シーケンス図がほしい。

 (1)
 socket_server.as:
 function connect()
   socket = new XMLSocket();
   socket.connect(host, port);
   socket.onXML = newXML;
   socket.onConnect = newConnection;
   socket.onClose = endConnection;

 push_server (serve):
     @socket = @server.accept  # 接続成功; socket_server.swfで socket.onConnect が呼び出される
     add_client
     listen
       @socket.gets  # 待機

 (2)
 socket_server.as:
 function newConnection(success=true)
   getURL("javascript:flashConnected()");

 (3)
 flash_socket_javascript.js:
   flashConnected()
     new Ajax.Request('/chat/login', ...)

 (4)
 chat_controller.rb:
   def login
     FlashSocket.send(data="<li>New User</li>")

 flash_socket.rb:
   def self.send(data)
     @socket = TCPSocket.new(self.host, self.port)
     @socket.puts data
     @socket.puts('QUIT')
     @socket.close

 (5)
 push_server (serve):
     @socket = @server.accept
     add_client
     listen
       @socket.gets
       broadcast  # 全Client(socket_server.swf)で socket.onXML が呼び出される
       # break if /^QUIT/ =~ line
       remove_client
       client.close

 (6)
 socket_server.as:
 function newXML(input)
   getURL("javascript:flashData('"+input.toString()+"')");

 (7)
 flash_socket_javascript.js:
 function flashData(data)
   add(utf8to16(decode64(data)));

 function add(message)
     new Insertion.Top('chat_data', message);
     new Effect.Highlight($$("ul li").first());

_ [Rails] Juggernaut

Juggernaut Released!

本日のツッコミ(全1件) [ツッコミを入れる]
# のりお (2006-07-21 09:08)

解説ありがとうございます!!ちょと複雑な構成なので、これはありがたいです。図も流れがすごく把握できてナイスwだと思いまいました!

[]