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());
[]

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