WebSocketããIRCç¹ãããã¤ä½ã£ã
ä»æ¥Web Audioã®ããã«ã½ã³ã¨ãããã¾ããããªæãã®ããã¦ã¦ãé³ã®ãªãIRC Client(on Browser)ãä½ãããã¨æã£ã¦ããã®ã¯ã©ã¤ã¢ã³ããä½ãã®ãç°¡åã«ããããã«ãWebSocketããIRCè¦ããããã¹ããããåºæ¥ãããã«ãããã¨æã£ã¦ä½ã£ããWeb Audioã®ä¼ãªã®ã«ãAudioé¢ä¿ããã¨ããã¾ã§ãããã«çµãã£ã¦ãã¾ã£ãã
https://github.com/ToQoz/ircmad
IRC <-> WebSoket Server(ããä½ã£ã) <-> WebSocket Client
ãããªæãã§ç«ã¡ä¸ãã
# proxy.rb require 'ircmad' Ircmad.new do set :host, '127.0.0.1' set :port, 6667 set :channel_list, [ '#channel', '#channel2' ] set :username, 'username' set :password, 'password' # å¿ è¦ã§ããã° set :websocket_port, 3333 end.run!
$ ruby proxy.rb
æ®éã«onmessageã«ã³ã¼ã«ããã¯ç»é²ãã¦ãããããJSONã渡ã£ã¦ããããsendã§JSONéã£ããæ稿ã§ããã
var socket = new WebSocket('ws://localhost:3333') // Send socket.send(JSON.stringify({ channel: '#channel1', body: 'yeah' })) // Get socket.onmessage = function(msg) { console.log(msg.data) }; // => '{"username":"ToQoz","channel":"#channel1","body":"hello world"}'
ãã©ã¦ã¶ã§IRCã¯ã©ã¤ã¢ã³ããä½ãã¨ãªãã¨ã¡ãã£ã¨é¢åããã ãã©ã ãããªæãã§WebSocketããæ±ããã°ãç°¡åã«ä½ãæ¾é¡ã ãã好ããªã®ä½ããããªã¨æã£ãã
追è¨
ãµã¼ãããã®:PINGã«å¯¾ãã PONG ã£ã¦ã©ã¼ãã¦ãããã?
ã¨ã®ãã¨ã§ããã使ç¨ãã¦ããzirconã¨ããgemããã£ã¦ããã¦ãã¾ãã https://github.com/r7kamura/zircon/blob/master/lib/zircon.rb#L69
ã¨ãããããããIRCã¨ã®ããã¨ãã¯ä»ã®ã¨ããå®å ¨ã«ä»»ãã£ããã§ããã
ã¾ãããã¯ã¨ãããã¨ãã¦ãIRC Serverå´ãè½ã¡ãæã¨ãé·æéã¹ãªã¼ãããæ(?)ã¨ãã«å¾®å¦ãªæããªã®ãç´ãããã¨æã£ã¦ããã¾ããã
è¿½è¨ v0.0.3
ããã¨ãããjsonã®ãã£ã¼ã«ãåå¤ãã¾ããã
at v0.0.3
var socket = new WebSocket('ws://localhost:3333') // Send socket.send(JSON.stringify({ to: '#channel1', body: 'yeah', type: 'privmsg' })) socket.send(JSON.stringify({ type: 'join', to: '#ruby'})) // Get socket.onmessage = function(msg) { console.log(msg.data) }; // => '{"from":"ToQoz","to":"#channel1","body":"hello world","type":"privmsg"}' // => {"from":"ToQoz","to":"#ruby","body":null,"type":"join"} // => {"from":"hybrid7.debian.local","to":"ToQoz","body":"@","type":"353"} // => {"from":"hybrid7.debian.local","to":"ToQoz","body":"#ruby","type":"366"}
ãã¨reconnectçãªã®ã¨ãã¡ããã¡ããå ¥ããã