1 package zirc.threads ; 2 3 import java.io.* ; 4 import java.net.* ; 5 import java.util.* ; 6 import zirc.base.* ; 7 import zirc.gui.* ; 8 import zirc.msg.* ; 9 import zirc.dcc2.* ; 10 11 24 31 32 public class ConnectThread extends Thread 33 { 34 private IRCconnexion chatIRC ; 36 private static IdentListenerThread il ; 37 38 private ArrayList userLists = new ArrayList() ; 40 41 private int replyCode ; 43 44 private boolean loop = true ; 46 47 MessageRecuSplite servRep ; 49 50 private String lastOne = "" ; 51 52 public ConnectThread(IRCconnexion _chatIRC) 53 { 54 chatIRC = _chatIRC ; 55 } 56 57 private void connectSocket(int port) throws UnknownHostException, ConnectException, IOException 58 { 59 63 64 67 chatIRC.setMainSock(new Socket(chatIRC.GetMainSockServer(), port )) ; 69 70 chatIRC.setMainSockIn(new BufferedReader(new InputStreamReader(chatIRC.getMainSock().getInputStream()))) ; 72 chatIRC.setMainSockOut(new PrintWriter(chatIRC.getMainSock().getOutputStream())) ; 73 74 if (il == null) 76 { 77 il = new IdentListenerThread() ; 78 il.start() ; 79 } 80 il.addConnection(this.chatIRC) ; 81 82 chatIRC.sendCommand("PASS none") ; 84 chatIRC.sendCommand("NICK " + chatIRC.GetUser_nickName()) ; 85 chatIRC.sendCommand("USER " + chatIRC.getUser_nomUser() + " " + chatIRC.GetUser_hote() + " " + chatIRC.GetUser_serverName() + " : " + 86 chatIRC.getUser_realName()) ; 87 88 } 89 90 public void run() 91 { 92 93 int p = 0 ; int nbOfPorts = chatIRC.getServerPortList().length ; boolean portOK = false ; 97 do { 99 try 100 { 101 (new MSGinfoPlus(chatIRC, chatIRC.GetStatusFrm(), 102 ("Tentative de connexion au serveur sur le port " + chatIRC.getServerPortList()[p] + "..."))).affiche() ; 103 connectSocket(chatIRC.getServerPortList()[p]) ; 104 105 portOK = true ; 107 108 } 109 catch (UnknownHostException ex) 110 { 111 (new MSGinfoPlus(chatIRC, chatIRC.GetStatusFrm(), 112 ("Hote inconnu..."))).affiche() ; 113 ex.printStackTrace() ; 114 loop = false ; } 116 catch (ConnectException ex1) 117 { 118 (new MSGinfoPlus(chatIRC, chatIRC.GetStatusFrm(), 119 ("Tentative de connexion au serveur sur le port " + chatIRC.getServerPortList()[p] + " echouee..."))).affiche() ; 120 p++ ; 121 portOK = false ; 122 } 123 catch (IOException ex) 124 { 125 ex.printStackTrace() ; 126 } 127 128 catch (Exception ex) 129 { 130 ex.printStackTrace() ; 131 } 132 } 133 while (p < nbOfPorts && !portOK && loop) ; 134 135 137 String line ; 138 139 try 140 { 141 while (loop && (line = chatIRC.getMainSockIn().readLine()) != null) 142 { 143 parserRepServ(line) ; 144 } 145 } 146 catch (SocketException ex) 147 { 148 ex.printStackTrace() ; 149 System.out.println("!!!!!!CATCHEE!!!!!!") ; 150 151 (new MSGinfoPlus(chatIRC, chatIRC.GetStatusFrm(), 152 ("Connexion perdue..."))).affiche() ; 153 } 154 catch (IOException ex) 155 { 156 ex.printStackTrace() ; 157 System.out.println("!!!!!!CATCHEE!!!!!!") ; 158 } 159 catch (NullPointerException ex) 160 { 161 ex.printStackTrace() ; 162 System.out.println("!!!!!!CATCHEE!!!!!!") ; 163 164 (new MSGinfoPlus(chatIRC, chatIRC.GetStatusFrm(), 165 ("Connexion impossible..."))).affiche() ; 166 } 167 } 168 169 private void parserRepServ(String _line) 170 { 171 System.out.println(_line) ; 172 173 AbstractMessage msg = null ; 175 176 servRep = new MessageRecuSplite(_line) ; 178 179 boolean DejaTraite = false ; 181 182 if (((String )(servRep.get(1))).equalsIgnoreCase("PRIVMSG")) 184 { 185 try 186 { 187 if (servRep.get(3).toString().substring(2).equalsIgnoreCase("DCC")) 189 { 190 DCCin dcc = new DCCin(chatIRC.GetMainFrm(), chatIRC,_line) ; 191 } 192 else 193 { 194 msg = new MSGprivMsg(chatIRC, servRep.get(0), servRep.get(2), _line) ; 195 } 196 } 197 catch (StringIndexOutOfBoundsException ex) 198 { 199 msg = new MSGprivMsg(chatIRC, servRep.get(0), servRep.get(2), _line) ; 200 } 201 finally 202 { 203 DejaTraite = true ; 204 } 205 } 206 207 if (!DejaTraite && servRep.get(0).toString().equalsIgnoreCase("PING")) 209 { 210 msg = new MSGpingpong(chatIRC, chatIRC.GetStatusFrm(), _line) ; 212 213 DejaTraite = true ; 214 } 215 216 if (!DejaTraite && ((String )(servRep.get(1))).equalsIgnoreCase("NICK")) 218 { 219 msg = new MSGnick(chatIRC, servRep.get(0).toString(), servRep.get(2).toString()) ; 220 DejaTraite = true ; 221 } 222 223 if (!DejaTraite && ((String )(servRep.get(1))).equalsIgnoreCase("JOIN")) 225 { 226 msg = new MSGJoin(chatIRC, servRep.get(0).toString(), servRep.get(2).toString(), _line) ; 227 DejaTraite = true ; 228 } 229 230 if (!DejaTraite && ((String )(servRep.get(1))).equalsIgnoreCase("MODE")) 232 { 233 try 234 { msg = new MSGmode(chatIRC, servRep.get(0), servRep.get(1), servRep.get(2), servRep.get(3), servRep.get(4)) ; 236 } 237 catch (IndexOutOfBoundsException ex) 238 { msg = new MSGmode(chatIRC, servRep.get(0), servRep.get(1), servRep.get(2), servRep.get(3), null) ; 240 } 241 finally 242 { 243 DejaTraite = true ; 244 } 245 } 246 247 if (!DejaTraite && ((String )(servRep.get(1))).equalsIgnoreCase("PART")) 249 { 250 msg = new MSGPart(chatIRC, servRep.get(0).toString(), servRep.get(2).toString(), _line) ; 251 msg.reagit() ; 252 DejaTraite = true ; 253 } 254 255 if (!DejaTraite && servRep.get(1).equals("QUIT")) 257 { 258 msg = new MSGquit(chatIRC, servRep.get(0).toString(), _line) ; 259 msg.reagit() ; 260 DejaTraite = true ; 261 } 262 263 267 if (!DejaTraite && servRep.get(1).equals("KICK")) 268 { 269 msg = new MSGkick(chatIRC, servRep.get(0), servRep.get(1), servRep.get(2), servRep.get(3), servRep.get(4)) ; 270 DejaTraite = true ; 271 } 272 273 if (!DejaTraite && servRep.get(1).equals("NOTICE")) 275 { 276 277 if (servRep.get(2).equals("AUTH")) 278 { 279 msg = new MSGnoticeAuth(chatIRC, chatIRC.GetStatusFrm(), _line) ; 281 282 } 283 else 284 { 285 msg = new MSGnotice(chatIRC, chatIRC.GetStatusFrm(), _line) ; 287 } 288 DejaTraite = true ; 289 } 290 291 if (!DejaTraite) 293 { 294 replyCode = getReplyCode(_line) ; 296 297 if (replyCode == 1) 301 { 302 for (int i = 0 ; i < OptionDialog.getOnConnectCommand().size() ; i++) 303 { 304 if (!OptionDialog.getOnConnectCommand().get(i).toString().equals(null)) 305 { 306 chatIRC.sendCommand(OptionDialog.getOnConnectCommand().get(i).toString()) ; 307 } 308 } 309 } 310 311 315 if (!DejaTraite && replyCode == 353) 317 { 318 gere353(servRep, _line) ; 319 DejaTraite = true ; 320 } 321 322 if (!DejaTraite && replyCode == 366) 325 { 326 gere366(servRep, _line) ; 327 DejaTraite = true ; 328 } 329 330 334 if (replyCode == 321) 336 { 337 DejaTraite = true ; 338 } 339 340 if (replyCode == 322) 342 { 343 DejaTraite = true ; 344 chatIRC.addChanToList(_line) ; 345 } 346 347 if (replyCode == 323) 349 { 350 DejaTraite = true ; 351 chatIRC.addChanToList("END") ; 352 } 353 354 if (replyCode == 332) 356 { 357 String chan = servRep.get(3).toString().replaceAll(":", "") ; 358 String msg1 = "" ; 359 for (int i = 0 ; i < chatIRC.getOpenChanArray().size() ; i++) 360 { 361 if (((ChatFrame)((chatIRC.getOpenChanArray().get(i)))).getName().equals(chan)) 362 { 363 for (int j = 4 ; j < servRep.size() ; j++) 364 { 365 msg1 += servRep.get(j).toString() + " " ; 366 } 367 msg = new MSGtopic(chatIRC, ((ChatFrame)((chatIRC.getOpenChanArray().get(i)))), msg1) ; 368 } 369 } 370 DejaTraite = true ; 371 } 372 373 377 if (!DejaTraite && replyCode > 0) 379 { 380 msg = new MSGcodeNonGere(chatIRC, chatIRC.GetStatusFrm(), _line, replyCode) ; 381 DejaTraite = true ; 382 } 383 384 if (!DejaTraite) 386 { 387 msg = new MSGServer(chatIRC, chatIRC.GetStatusFrm(), _line) ; 388 } 389 } 390 391 if (msg != null) 395 { 396 msg.reagit() ; 397 msg.affiche() ; 398 } 399 400 } 401 402 private void gere353(MessageRecuSplite _split, String _line) 404 { 405 407 411 String chan = (String )(_split.get(4)) ; 413 414 int ind = -1 ; 416 417 for (int i = 0 ; i < userLists.size() ; i++) 419 { 420 if (((ArrayList)(userLists.get(i))).get(0).toString().equalsIgnoreCase(chan)) 421 { 422 ind = i ; 423 } 424 } 425 426 ArrayList arr ; 427 428 if (ind == -1) 430 { 431 arr = new ArrayList() ; 433 arr.add(chan) ; 434 userLists.add(arr) ; 435 } 436 else 437 { 438 arr = (ArrayList)(userLists.get(ind)) ; 440 } 441 442 arr.add(_line.substring(_line.indexOf(":", 5) + 1)) ; 444 } 445 446 private void gere366(MessageRecuSplite _split, String _line) 448 { 449 451 String chan = (String )(_split.get(3)) ; 453 454 int ind = -1 ; 456 457 for (int i = 0 ; i < userLists.size() ; i++) 459 { 460 if (((ArrayList)(userLists.get(i))).get(0).toString().equalsIgnoreCase(chan)) 461 { 462 ind = i ; 463 } 464 } 465 466 ArrayList arr ; 467 468 if (ind != -1) 470 { 471 arr = (ArrayList)(userLists.get(ind)) ; 473 474 ChatFrame frm = chatIRC.GetFenetreDuChan(chan) ; 476 477 if (frm != null) 478 { 479 StringBuffer ret = new StringBuffer ("") ; 481 for (int i = 1 ; i < arr.size() ; i++) 482 { 483 ret.append(" " + arr.get(i).toString()) ; 484 } 485 486 frm.addUserListInChan(new String (ret)) ; 487 488 } 489 490 userLists.remove(arr) ; 492 } 493 } 494 495 private int getReplyCode(String line) 497 { 498 int code = -1 ; 499 500 StringTokenizer str = new StringTokenizer(line, " ") ; 501 str.nextElement() ; 502 try 503 { 504 code = Integer.parseInt(str.nextElement().toString()) ; 505 } 507 catch (NumberFormatException e) 508 { 509 } 511 return code ; 512 } 513 514 public void stopConnexion() 515 { 516 if (il != null) 518 { 519 il.removeConnection(this.chatIRC) ; 520 } 521 522 chatIRC.sendCommand("QUIT " + chatIRC.getQuitMSG()) ; 523 loop = false ; 524 } 525 } 526
| Popular Tags
|