-# join \e$B$7$F$$$k%A%c%M%k$NL>>N$r5-O?$9$k%O%C%7%e\e(B
-my %channel_name;
-
-# \e$B%A%c%M%k$N2qOCFbMF$r5-O?$9$k%O%C%7%e\e(B
-my (%channel_buffer, %channel_recent);
-
-# \e$B3F%A%c%M%k$N:G=*%"%/%;%9;~9o!":G?7H/8@;~9o\e(B
-my %mtime;
-
-# unread lines
-my %unread;
-
-# chk
-my ($send_chk, $update_chk);
-
-# irc component
-POE::Component::IRC->new('keitairc');
-POE::Session->new(
- _start => \&on_irc_start,
- irc_join => \&on_irc_join,
- irc_part => \&on_irc_part,
- irc_public => \&on_irc_public,
- irc_notice => \&on_irc_notice,
- );
-
-# web server component
+our $log = new Keitairc::Log({config => $cf});
+our $ib = new Keitairc::IrcBuffer({history => $cf->web_lines()});
+our $sm = new Keitairc::SessionManager({default_ttl => $cf->session_ttl()});
+our $pl = new Keitairc::Plugins({config => $cf});
+
+# create irc component
+our $irc = POE::Component::IRC->spawn(
+ Alias => 'keitairc_irc',
+ Nick => $cf->irc_nick(),
+ Username => $cf->irc_username(),
+ Ircname => $cf->irc_desc(),
+ Server => $cf->irc_server(),
+ Port => $cf->irc_port(),
+ Password => $cf->irc_password());
+
+# create POE session
+POE::Session->create(
+ heap => {
+ seen_traffic => 0,
+ disconnect_msg => 1,
+ Config => $cf,
+ Irc => $irc,
+ IrcBuffer => $ib,
+ },
+ inline_states => {
+ _start => \&Keitairc::IrcCallback::irc_start,
+ autoping => \&Keitairc::IrcCallback::irc_autoping,
+ connect => \&Keitairc::IrcCallback::irc_connect,
+ irc_registered => \&Keitairc::IrcCallback::irc_registered,
+ irc_001 => \&Keitairc::IrcCallback::irc_001,
+ irc_join => \&Keitairc::IrcCallback::irc_join,
+ irc_part => \&Keitairc::IrcCallback::irc_part,
+ irc_quit => \&Keitairc::IrcCallback::irc_quit,
+ irc_public => \&Keitairc::IrcCallback::irc_public,
+ irc_notice => \&Keitairc::IrcCallback::irc_notice,
+ irc_mode => \&Keitairc::IrcCallback::irc_mode,
+ irc_nick => \&Keitairc::IrcCallback::irc_nick,
+ irc_msg => \&Keitairc::IrcCallback::irc_msg,
+ irc_topic => \&Keitairc::IrcCallback::irc_topic,
+ irc_332 => \&Keitairc::IrcCallback::irc_topicraw,
+ irc_352 => \&Keitairc::IrcCallback::irc_whoreply,
+ irc_ctcp_action => \&Keitairc::IrcCallback::irc_ctcp_action,
+ irc_disconnected => \&Keitairc::IrcCallback::irc_reconnect,
+ irc_error => \&Keitairc::IrcCallback::irc_reconnect,
+ irc_socketerr => \&Keitairc::IrcCallback::irc_reconnect,
+ });
+
+# create web server component