Orthoclaseでkeitaircを動かしたい
LimeChatとkeitaircで接続を共有するために,LimeChat->IRC Proxy<-keitaircと,IRC Proxy経由で接続しなければならないのがうっとうしい.そこで,折角Orthoclaseでperlが動くんだから,keitaircをLimeChatに寄生させればいいんじゃないかと思った.
早速ちょこちょことポーティングを始めたんだけど,ポーティングを進めていくうちに,perlじゃどうしようもない部分がいくつか出てきてしまった.
まず一つ目がLimeArrayのアクセス.ActivePerlのIDispatchサポートでは数字が名前になっているプロパティを取得するルートがない.Win32::OLEを試してみようかと思ったけど,Win32::OLEで閉じちゃっているので,こっちもダメ.仕方ないので LimeExt.JInvoke(receiver, message, invoketype, args) を用意して,不正な文字列になっちゃうメソッドでも呼び出せるようにした.
my $channels = main::channels(); my $channel = $main::LimeExt->JInvoke($channels, '0', 1); # (invoketype:1 => DISPATCH_PROPERTYGET) my $channelName = $channel->name; # ...
もう一つはsetIntervalに設定する関数.どうも,\&〜じゃ通らないらしい.通ってくれないとにっちもさっちもいかないわけだが・・・これも LimeExt.JFunction(funcName) を用意して,ラッパーを生成できるようにした.
sub on_timer { &do_something; } my $on_timer_wrap = $main::LimeExt->JFunction("on_timer"); my $timer_id = setInterval($on_timer_wrap, 500);