00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package de.fhg.fokus.diameter.DiameterPeer;
00032
00033
00034 import java.util.concurrent.ArrayBlockingQueue;
00035 import java.util.Vector;
00036
00037 import org.apache.log4j.Logger;
00038
00039 import de.fhg.fokus.diameter.DiameterPeer.data.DiameterTask;
00040
00047 public class DiameterWorker extends Thread {
00048
00050 private static final Logger LOGGER = Logger.getLogger(DiameterWorker.class);
00051
00052 int id;
00053 private boolean running;
00054 private ArrayBlockingQueue<DiameterTask> queueTasks;
00055
00056
00063 public DiameterWorker(int id, ArrayBlockingQueue<DiameterTask> tasks) {
00064 this.id = id;
00065 this.running = true;
00066 this.queueTasks = tasks;
00067 this.start();
00068 }
00069
00070
00071
00077 public void run() {
00078 DiameterTask task;
00079 int i, size;
00080 EventListener e;
00081 Vector listeners;
00082
00083 while(running){
00084 task=null;
00085 try {
00086 task = (DiameterTask) queueTasks.take();
00087 } catch (InterruptedException e1) { }
00088
00089 if (task==null||task.peer==null||task.msg==null) {
00090
00091 continue;
00092 }
00093
00094
00095 listeners = task.peer.diameterPeer.eventListeners;
00096
00097 size = listeners.size();
00098 for(i=0;i<size;i++){
00099 e = (EventListener) listeners.get(i);
00100 e.recvMessage(task.peer.FQDN,task.msg);
00101 }
00102 }
00103
00104 }
00105
00106
00110 public void shutdown()
00111 {
00112 this.running = false;
00113
00114
00115 try {
00116 this.queueTasks.put(new DiameterTask(null,null));
00117 } catch (InterruptedException e) {
00118 e.printStackTrace();
00119 }
00120 }
00121 }