Changeset 34358

Show
Ignore:
Timestamp:
07/08/09 22:07:13 (4 years ago)
Author:
tarchan
Message:

lang/java/IRCKit: URLHandlerを修正

Location:
lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc/Handler.java

    r34247 r34358  
    6464                return 6667; 
    6565        } 
     66 
     67        /** 
     68         * {@inheritDoc} 
     69         */ 
     70        @Override 
     71        protected void setURL(URL u, String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) 
     72        { 
     73                try 
     74                { 
     75                        // チャンネル名を設定 
     76                        if (ref != null) path = "#" + ref; 
     77                        else if (path.length() > 1) path = "#" + path.substring(1); 
     78 
     79//                      System.out.format("[URL] %s://%s:%s, %s, %s, %s, %s, %s\n", protocol, host, port, authority, userInfo, path, query, ref); 
     80                        super.setURL(u, protocol, host, port, authority, userInfo, path, query, ref); 
     81                } 
     82                catch (RuntimeException x) 
     83                { 
     84                        x.printStackTrace(); 
     85                        throw x; 
     86                } 
     87        } 
    6688} 
  • lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc/IRCConnection.java

    r34247 r34358  
    6969                // 接続する 
    7070                int port = url.getPort(); 
    71                 if (port < 0) port = url.getDefaultPort(); 
     71                if (port == -1) port = url.getDefaultPort(); 
    7272                socket = new Socket(url.getHost(), port); 
    7373                socket.setSoTimeout(5 * 60 * 1000); 
  • lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc/client/IRCClient.java

    r34247 r34358  
    101101        public IRCClient() 
    102102        { 
    103                 new PingPong(this); 
    104                 new AutoJoin(this); 
     103                addAllHandlers(new PingPong()); 
     104                addAllHandlers(new AutoJoin()); 
    105105        } 
    106106 
     
    296296        public void open() throws IOException 
    297297        { 
     298                String href = getProperty("irc.url"); 
    298299                String host = getProperty("irc.host"); 
    299300                String port = getProperty("irc.port"); 
    300                 URL url = new URL(String.format("irc://%s:%s", host, port)); 
     301//              System.out.format("[OPEN] %s\n", href); 
     302//              System.out.format("[OPEN] %s\n", host); 
     303//              System.out.format("[OPEN] %s\n", port); 
     304                if (isEmpty(href)) href = String.format("irc://%s:%s", host, port); 
     305//              System.out.format("[OPEN] %s\n", href); 
     306                URL url = new URL(href); 
     307                String channel = url.getPath(); 
     308//              System.out.format("[OPEN] ref=%s\n", ref); 
     309                if (!isEmpty(channel)) setProperty("irc.channel", channel); 
    301310//              System.out.format("[OPEN] %s\n", url); 
    302311                URLConnection con = url.openConnection(); 
     
    510519        public static class PingPong 
    511520        { 
    512                 /** IRCクライアント */ 
    513                 protected IRCClient irc; 
    514  
    515                 /** 
    516                  * PingPong を構築します。 
    517                  *  
    518                  * @param irc IRCクライアント 
    519                  */ 
    520                 public PingPong(IRCClient irc) 
    521                 { 
    522                         this.irc = irc; 
    523                         this.irc.addAllHandlers(this); 
    524                 } 
    525  
    526521                /** 
    527522                 * 接続を継続するために PONG を送信します。 
     
    530525                 */ 
    531526                @Reply("PING") 
    532                 public void ping(IRCMessage msg) 
    533                 { 
    534                         // サーバー名s 
     527                public void onPing(IRCMessage msg) 
     528                { 
     529                        IRCClient irc = (IRCClient)msg.getSource(); 
    535530                        String server = msg.getTrail(); 
    536531                        irc.postMessage(String.format("PONG :%s", server)); 
     
    545540        public static class AutoJoin 
    546541        { 
    547                 /** IRCクライアント */ 
    548                 protected IRCClient irc; 
    549  
    550542                /** 
    551                  * AutoJoin を構築します。 
    552                  *  
    553                  * @param irc IRCクライアント 
    554                  */ 
    555                 public AutoJoin(IRCClient irc) 
    556                 { 
    557                         this.irc = irc; 
    558                         this.irc.addAllHandlers(this); 
    559                 } 
    560  
    561                 /** 
    562                  * 指定されたチャンネルにJOINします。 
     543                 * 指定されたチャンネルに JOIN します。 
    563544                 *  
    564545                 * @param msg IRCメッセージ 
    565546                 */ 
    566547                @Reply("001") 
    567                 public void welcome(IRCMessage msg) 
    568                 { 
     548                public void onWelcome(IRCMessage msg) 
     549                { 
     550                        IRCClient irc = (IRCClient)msg.getSource(); 
    569551                        String channel = irc.getProperty("irc.channel"); 
    570552                        if (!isEmpty(channel)) 
     
    573555                        } 
    574556                } 
     557 
     558                /** 
     559                 * ニックネームを変更します。 
     560                 *  
     561                 * @param msg IRCメッセージ 
     562                 */ 
     563                @Reply("433") 
     564                public void onNicknameInUse(IRCMessage msg) 
     565                { 
     566                        IRCClient irc = (IRCClient)msg.getSource(); 
     567                        String oldNick = msg.getParam(1); 
     568                        String newNick = String.format("%s_", oldNick).substring(1); 
     569//                      System.out.format("nick=%s -> %s\n", oldNick, newNick); 
     570                        irc.postMessage(String.format("NICK %s", newNick)); 
     571                } 
    575572        } 
    576573} 
  • lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc/client/IRCMessage.java

    r34247 r34358  
    9898        private String _trail; 
    9999 
    100         /** サーバ名(prefix) */ 
    101         private String _server; 
    102  
    103         /** ニックネーム(prefix) */ 
    104         private String _nick; 
    105  
    106         /** ユーザ名(prefix) */ 
    107         private String _user; 
    108  
    109         /** ホスト名 (prefix) */ 
    110         private String _host; 
     100//      /** サーバ名(prefix) */ 
     101//      private String _server; 
     102// 
     103//      /** ニックネーム(prefix) */ 
     104//      private String _nick; 
     105// 
     106//      /** ユーザ名(prefix) */ 
     107//      private String _user; 
     108// 
     109//      /** ホスト名 (prefix) */ 
     110//      private String _host; 
    111111 
    112112        /** 文字エンコーディング */ 
     
    114114 
    115115        /** 
     116                 * IRCメッセージを解析して IRCMessage を作成します。 
     117                 *  
     118                 * @param source メッセージのソース 
     119                 * @param message メッセージ 
     120                 * @param when メッセージを受け取った時間 
     121                 */ 
     122                public IRCMessage(IRCClient source, String message, long when) 
     123                { 
     124                        // オリジナルのパラメータを保存する 
     125                        super(source); 
     126                        setMessage(message); 
     127                        setWhen(when); 
     128         
     129                        // デバッグ出力 
     130        //              System.out.println(this); 
     131                } 
     132 
     133        /** 
    116134         * IRCメッセージを解析して IRCMessage を作成します。 
    117135         *  
     
    119137         * @param message メッセージ 
    120138         */ 
    121         public IRCMessage(Object source, String message) 
     139        public IRCMessage(IRCClient source, String message) 
    122140        { 
    123141                this(source, message, System.currentTimeMillis()); 
    124         } 
    125  
    126         /** 
    127          * IRCメッセージを解析して IRCMessage を作成します。 
    128          *  
    129          * @param source メッセージのソース 
    130          * @param message メッセージ 
    131          * @param when メッセージを受け取った時間 
    132          */ 
    133         public IRCMessage(Object source, String message, long when) 
    134         { 
    135                 // オリジナルのパラメータを保存する 
    136                 super(source); 
    137                 setMessage(message); 
    138                 setWhen(when); 
    139  
    140                 // デバッグ出力 
    141 //              System.out.println(this); 
    142142        } 
    143143 
     
    238238        { 
    239239                _prefix = new IRCName(prefix); 
    240                 String[] token = prefix.split(ADDRESS_DELIMITER); 
    241                 if (token.length == 1) 
    242                 { 
    243                         _server = token[0]; 
    244                         _nick = token[0]; 
    245                 } 
    246                 else 
    247                 { 
    248                         _nick = token[0]; 
    249                         _user = token[1]; 
    250                         _host = token[2]; 
    251                 } 
     240//              String[] token = prefix.split(ADDRESS_DELIMITER); 
     241//              if (token.length == 1) 
     242//              { 
     243//                      _server = token[0]; 
     244//                      _nick = token[0]; 
     245//              } 
     246//              else 
     247//              { 
     248//                      _nick = token[0]; 
     249//                      _user = token[1]; 
     250//                      _host = token[2]; 
     251//              } 
    252252 
    253253//              _prefix = prefix; 
     
    416416 
    417417        /** 
     418         * @deprecated {@link #getPrefix()} 
    418419         * サーバ名を返します。 
    419420         *  
     
    422423        public String getServer() 
    423424        { 
    424                 return _server; 
    425         } 
    426  
    427         /** 
     425                return _prefix.toString(); 
     426        } 
     427 
     428        /** 
     429         * @deprecated {@link #getPrefix()} 
    428430         * ニックネームを返します。 
    429431         *  
     
    432434        public String getNick() 
    433435        { 
    434                 return _nick; 
    435         } 
    436  
    437         /** 
     436                return _prefix.getNick(); 
     437        } 
     438 
     439        /** 
     440         * @deprecated {@link #getPrefix()} 
    438441         * ユーザ名を返します。 
    439442         *  
     
    442445        public String getUser() 
    443446        { 
    444                 return _user; 
    445         } 
    446  
    447         /** 
    448          * ホストを返します。 
    449          *  
    450          * @return ホストまたは null 
     447                return _prefix.getUser(); 
     448        } 
     449 
     450        /** 
     451         * @deprecated {@link #getPrefix()} 
     452         * ホスト名を返します。 
     453         *  
     454         * @return ホスト名 
    451455         */ 
    452456        public String getHost() 
    453457        { 
    454                 return _host; 
     458                return _prefix.getHost(); 
    455459        } 
    456460 
     
    676680         * @return メッセージ 
    677681         */ 
    678         public static IRCMessage valueOf(String str, Object source) 
     682        public static IRCMessage valueOf(String str, IRCClient source) 
    679683        { 
    680684                return new IRCMessage(source, str); 
  • lang/java/IRCKit/trunk/src/com/mac/tarchan/net/irc/client/IRCName.java

    r34247 r34358  
    8181 
    8282        /** 
     83         * チャンネル名かどうか判定します。 
     84         *  
     85         * @return チャンネル名の場合は true 
     86         */ 
     87        public boolean isChannel() 
     88        { 
     89                return name.matches("[&#%]\\S+"); 
     90        } 
     91 
     92        /** 
    8393         * ロングネームを解析します。 
    8494         */ 
     
    100110 
    101111        /** 
     112         * ニックネームを返します。 
     113         *  
    102114         * @return ニックネーム 
    103115         */ 
     
    108120 
    109121        /** 
     122         * ユーザー名を返します。 
     123         *  
    110124         * @return ユーザー名 
    111125         */ 
     
    116130 
    117131        /** 
     132         * ホスト名を返します。 
     133         *  
    118134         * @return ホスト名 
    119135         */