Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/rakiura/mbot/WhoThread.java


1   
2   package org.rakiura.mbot;
3   
4   /**/
5   import java.util.*;
6   import java.io.*;
7   
8   /**
9    * Thread for managing user list updates...
10   *
11   * WhoThread.java
12   * Created: Wed Jul 14 16:59:28 1999
13   *
14   *@author Mariusz Nowostawski
15   *@version 0.3 $Revision: 1.1.1.1 $
16   */
17  public class WhoThread extends Thread {
18  
19    private Engine engine;
20  
21    /**/
22    public WhoThread(Engine engine) {
23      super();
24      this.engine = engine;
25    }
26  
27    /**/
28    private boolean b_korekta = false;
29    private int ilezmian = 0;
30    private int trojka = 0;
31    private boolean plus = false;
32    private String mody="";
33    private String nicki="";
34    private String schan="";
35  
36    /**/
37    public synchronized void run(){
38      while(true){
39        String line = engine.whoLineVector.getString();
40        while(line !=null && line.indexOf("352") == -1){
41          if(b_korekta) engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
42          b_korekta = false; trojka = 0;
43          line = engine.whoLineVector.getString();
44        }
45        if(line != null && line.indexOf("352") != -1){
46          StringTokenizer st = new StringTokenizer(line, " ");
47          st.nextToken(); // server name
48          st.nextToken(); // number
49          st.nextToken(); // nick
50          String ch = st.nextToken(); // channel
51          if(schan=="" || schan.length() == 0) schan = ch;
52          Channel chan = engine.getChannel(ch);
53          if(chan == null) {
54            chan = new Channel();
55            chan.setName(ch);
56            engine.addChannel(chan);
57          }
58  
59          String user = st.nextToken(); // username
60          String server = st.nextToken(); // server
61          String ircServer = st.nextToken(); // irc server
62          String nick = st.nextToken();
63          String status = st.nextToken();
64          boolean op = status.indexOf("@") != -1;
65          boolean oper = status.indexOf("*") != -1;
66          boolean voice = status.indexOf("+") != -1;
67  
68          LUser luser = new LUser(nick, user, server);
69          luser.setOp(op);
70          luser.setOper(oper);
71          luser.setVoice(voice);
72          luser.setIrcServer(ircServer);
73  
74          Enumeration enum = engine.getUsersForMask(nick+"!"+user+"@"+server);
75          while(enum.hasMoreElements()){//loop throu users
76            User u = (User)enum.nextElement();
77            Enumeration e1 = u.getFlags();
78            while(e1.hasMoreElements())
79              luser.addFlag((Character)e1.nextElement());    
80            e1 = u.getChannels();
81            while(e1.hasMoreElements()){
82              String key = (String)e1.nextElement();
83              Enumeration e2 = u.getChanFlags(key);
84              while(e2.hasMoreElements())
85                luser.addFlag(key, (Character)e2.nextElement());
86            }
87          }
88          chan.addUser(nick, luser);
89          if(luser.isOp() && !luser.isFlag(ch,'O'))
90            takeOp(nick, ch);
91          if(!luser.isOp() && luser.isFlag(ch,'O'))
92            giveOp(nick, ch);
93        }
94      }
95    }
96  
97    protected void takeOp(String nick, String ch){
98      if(!schan.equals(ch) || ilezmian == 2){
99        engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
100       b_korekta = false; trojka = 0; ilezmian = 0;
101       schan = ch;
102     }   
103     if(trojka == 0){
104       mody = "-o"; ilezmian = 1;
105       plus = false;
106       nicki = nick;
107       trojka++;
108       b_korekta = true;
109     }else
110       if(trojka < 3){
111         if(plus){
112           mody += "-";
113           plus = false; ilezmian++;
114         }
115         mody += "o";
116         nicki += " "+nick;
117         trojka++;
118         b_korekta = true;
119       }else{
120         engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
121         b_korekta = false;
122         mody = nicki = "";
123         trojka = 0;
124       }
125   }
126 
127   protected void giveOp(String nick, String ch){
128     if(!schan.equals(ch) || ilezmian == 2){
129       engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
130       b_korekta = false; trojka = 0;
131       schan = ch;
132       ilezmian=0;
133     }
134     if(trojka == 0){
135       mody = "+o"; ilezmian = 1;
136       plus = true;
137       nicki = nick;
138       trojka++;
139       b_korekta = true;
140     }else
141       if(trojka < 3){
142         if(!plus){
143           mody += "+";
144           plus = true;
145         }
146         mody += "o";
147         nicki += " "+nick;
148         trojka++;
149         b_korekta = true;
150       }else{
151         engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
152         b_korekta = false;
153         mody = nicki = "";
154         trojka = 0;
155       }
156   }
157 
158     
159 
160 } // LimitThread
161 //////////////////// end of file ////////////////////