1 package org.claros.chat.threads; 2 3 import java.util.HashMap ; 4 import java.util.List ; 5 6 import org.claros.chat.controllers.QueueController; 7 import org.claros.chat.models.Queue; 8 import org.jivesoftware.smack.Chat; 9 import org.jivesoftware.smack.XMPPConnection; 10 11 14 public class ChatSender extends Thread { 15 private String user; 16 private XMPPConnection conn; 17 private HashMap chatMap; 18 private boolean running; 19 20 23 private ChatSender() { 24 super(); 25 } 26 27 public ChatSender(String user, XMPPConnection conn) { 28 if (chatMap == null) { 29 chatMap = new HashMap (); 30 } 31 this.user = user; 32 this.conn = conn; 33 this.running = true; 34 } 35 36 40 public void terminate() { 41 running = false; 42 } 43 44 47 public void run() { 48 while (running) { 49 try { 50 List msgs = QueueController.fetchUserMessages(user, QueueController.QUEUE_OUT); 51 if (msgs != null) { 52 Queue tmp = null; 53 for (int i=0; i<msgs.size(); i++) { 54 tmp = (Queue)msgs.get(i); 55 56 Chat chat = (Chat)chatMap.get(tmp.getMsgTo()); 57 if (chat == null) { 58 chat = conn.createChat(tmp.getMsgTo()); 59 chatMap.put(tmp.getMsgTo(), chat); 60 } 61 chat.sendMessage(tmp.getMsgBody()); 62 } 63 } 64 } catch (Throwable e) { 65 e.printStackTrace(); 66 } 67 try { 69 Thread.sleep((long)(Math.random() * 1500L)); 70 } catch (InterruptedException e1) { 71 e1.printStackTrace(); 72 } 73 } 74 } 75 76 82 public void sendMessage(String to, String body) { 83 QueueController.push(QueueController.prepareName(user), to, body, QueueController.QUEUE_OUT); 84 } 85 86 public boolean isRunning() { 87 return running; 88 } 89 90 public void setRunning(boolean running) { 91 this.running = running; 92 } 93 94 } 95 | Popular Tags |