KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > IncomingChatThread


1 import org.jivesoftware.smack.packet.*;
2 import org.jivesoftware.smack.*;
3 import org.jivesoftware.smack.util.StringUtils;
4 import whisper.*;
5
6 /** Thread that processes new incoming chats.*/
7 public final class IncomingChatThread extends Thread JavaDoc{
8     
9     private org.jivesoftware.smack.packet.Message message;
10     
11     public IncomingChatThread(org.jivesoftware.smack.packet.Message message){
12         super("Incoming ChatThread");
13         setDaemon(true);
14         setPriority(Thread.MIN_PRIORITY);
15         this.message=message;
16     }
17     
18     public void run(){
19         // get from details
20
if(message.getBody()==null){
21             return;
22         }
23         if(message.getBody().trim().startsWith("<wchannel>")){
24             if(WhisperIM.MainWindow.secureChannelPanel!=null && WhisperIM.MainWindow.secureChannelPanel.amProviding){
25                 WhisperIM.MainWindow.secureChannelPanel.messageListener.incoming(message);
26                 //System.out.println("channel packet recieved by Incoming chat thread");
27
}
28             return; // secure channel message
29
}
30         final String JavaDoc fromID=message.getFrom();
31         String JavaDoc fromName=StringUtils.parseBareAddress(fromID.toLowerCase());
32         final String JavaDoc bareID=StringUtils.parseBareAddress(fromID.toLowerCase());
33         // check tere's not already a chat panel for this contact
34
if(WhisperIM.MainWindow.Chats.get("jabber"+bareID)!=null){
35             return;
36         }
37         // see if its a MUC private message
38
final MUCPanel mp=(MUCPanel)WhisperIM.MainWindow.MUCs.get(bareID);
39         if(mp!=null && (!StringUtils.parseResource(fromID).equals(""))){
40             javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc(){
41                     public void run(){
42                         mp.pm(message.getBody(),StringUtils.parseResource(fromID),"",GUI.getTime(message));
43                     }
44                 });
45             return;
46         }
47         
48         // see if its on roster so we can translate name
49
String JavaDoc tabName=StringUtils.parseName(bareID)+"@";
50         ContactListItem cli=(ContactListItem)WhisperIM.MainWindow.Contacts.get("jabber"+fromName);
51         if(cli!=null){
52             fromName=cli.toString();
53             tabName=fromName;
54         }
55         
56         final String JavaDoc finalfromName=fromName;
57         final String JavaDoc finaltabName=tabName;
58         
59         // see if message is encrypted or not
60
if(message.getBody().trim().startsWith("<wmsg>")){
61             //its a whisper message
62
PublicKey pk;
63             try{
64                 whisper.Message wm=new whisper.Message(message.getBody().trim());
65                 // have we got a key?
66
if(WhisperIM.MainWindow.hasNoKey("jabber",bareID)){
67                     return;
68                 }
69                 pk=(PublicKey) WhisperIM.MainWindow.Keys.get("jabber"+bareID);
70                 if(pk==null){
71                     // try and fetch
72
pk=WhisperIM.MainWindow.getKey("jabber",fromID);
73                     if(pk==null){ //still no key, ignore message
74
javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc(){
75                             public void run(){
76                                 GUI.showInfo(WhisperIM.MainWindow,"bad message received","no public key",Lang.gs("from")+fromID);
77                             }
78                         });
79                         return;
80                     }
81                 }
82                 // check theres an ESK for the first message
83
if(wm.getESK()==null){
84                     javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc(){
85                         public void run(){
86                             GUI.showInfo(WhisperIM.MainWindow,"bad message received","could not decrypt",Lang.gs("from")+fromID);
87                         }
88                     });
89                     return;
90                 }
91                 final Chat c;
92                 if(message.getThread()==null){
93                     c=new Chat(WhisperIM.MainWindow.Conn,fromID);
94                 }
95                 else{
96                     c=new Chat(WhisperIM.MainWindow.Conn,fromID,message.getThread());
97                 }
98                 javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc(){
99                     public void run(){
100                         ChatPanel p=new ChatPanel(finalfromName,fromID,c,true,GUI.getDate(message));
101                         WhisperIM.MainWindow.Chats.put("jabber"+bareID,p);
102                         p.process(message.getBody(),"");
103                         WhisperIM.MainWindow.chatPane.addTab(finaltabName,Icons.CHAT,p,Lang.gs("chatting with")+fromID);
104                         WhisperIM.MainWindow.statusLbl.setText(GUI.getTime()+" "+Lang.gs("chatting with")+finalfromName);
105                     }
106                 });
107                 Alert.newChat();
108                 return;
109             }
110             catch(Exception JavaDoc e){
111                 return;
112             }
113         }
114         // non encrypted message
115
final Chat c2;
116         if(message.getThread()==null){
117             c2=new Chat(WhisperIM.MainWindow.Conn,fromID);
118         }
119         else{
120             c2=new Chat(WhisperIM.MainWindow.Conn,fromID,message.getThread());
121         }
122         
123         javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc(){
124             public void run(){
125                 ChatPanel p2=new ChatPanel(finalfromName,fromID,c2,true,GUI.getDate(message));
126         
127                 WhisperIM.MainWindow.Chats.put("jabber"+bareID,p2);
128         
129                 p2.process(message.getBody(),GUI.getTime(message));
130                 WhisperIM.MainWindow.chatPane.addTab(finaltabName,Icons.CHAT,p2,Lang.gs("chatting with")+fromID);
131                 WhisperIM.MainWindow.statusLbl.setText(GUI.getTime()+" "+Lang.gs("chatting with")+finalfromName);
132             }
133         });
134         Alert.newChat();
135     }
136     
137 }
Popular Tags