社内IRCへWebSocketで接続してみたい
ちょうど去年の3月末に某CSKを退社。去年の今頃新しい会社に拾われました。入った感想としては、驚きの文化として社内のコミュニケーションツールにIRCを使っているというところ。慣れるまでは大変でした。 IT企業だと案外普通みたいですね。
さて本題、社内IRCにブラウザーからアクセスしてみたかったのでInspIRCdをWebSocketに対応させてみました。InspIRCdは、C++によるIRCの実装です。
HTMLソース
<html> <script> webSocket = new WebSocket('ws://localhost:3000/'); webSocket.onopen = function() { console.log("open"); this.send("NICK shogo4405\r\n"); this.send("USER shogo4405 * 0 :shogo4405\r\n"); }; webSocket.onmessage = function(event) { console.log(event); }; webSocket.onerror = function(event) { console.log(event); } webSocket.onclose = function(event) { console.log(event); } </script> <body><h1>It works!</h1></body></html>
ブラウザはChromeで
http://tools.ietf.org/html/rfc6455 に対応させています。2012/04/27現在は、最新版のChromeが対応しているのかな。
キャプチャーだとみにくいのですが確かに、IRCの情報が流れてきています。
NOTICE Auth :Welcome to Omega!\r\n:penguin.omega.org.za 001 shogo4405 :Welcome to the Omega IRC Network shogo4405!shogo4405@0::1\r\n:penguin.omega.org.za 002 shogo4405 :Your host is penguin.omega.org.za, running version InspIRCd-2.0\r\n:penguin.omega.org.za 003 shogo4405 :This server was created 20:20:03 Apr 14 2012\r\n:penguin.omega.org.za 004 shogo4405 penguin.omega.org.za InspIRCd-2.0 iosw biklmnopstv bklov\r\n:penguin.omega.org.za 005 shogo4405 AWAYLEN=201 CASEMAPPING=rfc1459 CHANMODES=b,k,l,imnpst CHANTYPES=#
InspiRCdのほうは
inspircd.conf
WebSocketのデフォルトポートが80らしいのですが、私の環境ではポートが塞がっているため3000番に設定しています。websocket="m_websocket"がおまじないです。
今回作成した自作モジュールをloadするだけ。
<bind address="" port="3000" websocket="m_websocket" type="clients"> <module name="m_websocket.so">
InspIRCdの再起動
./inspircd restart
ということで、PORT3000がIRC over WebSocketというべきでしょうかWebSocketに対応します。デフォルトの6667は、プレーンなIRCでも運用できますね。
最後に
あー。社内のIRCサーバーは、InspIRCdじゃなかったー。まずはそこからだ。
ソースコード
githubに置いておきますが、まだまだ実装段階なのでバギーです。ましなものが出来たらv1.0.0つけて公開しようと思います。そのうち...
https://github.com/shogo4405/m_websocket