社内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