View Javadoc

1   package cz.cuni.amis.pogamut.base.utils.logging;
2   
3   import cz.cuni.amis.pogamut.base.agent.IAgentId;
4   import cz.cuni.amis.pogamut.base.agent.impl.AbstractAgent;
5   import cz.cuni.amis.pogamut.base.agent.impl.AgentId;
6   import cz.cuni.amis.pogamut.base.agent.module.IAgentLogic;
7   import cz.cuni.amis.pogamut.base.agent.module.LogicModule;
8   import cz.cuni.amis.pogamut.base.component.bus.ComponentBus;
9   import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
10  import cz.cuni.amis.pogamut.base.utils.Pogamut;
11  import java.io.EOFException;
12  import java.io.IOException;
13  import java.io.ObjectInputStream;
14  import java.io.ObjectOutputStream;
15  import java.io.StreamCorruptedException;
16  import java.net.InetAddress;
17  import java.net.Socket;
18  import java.net.UnknownHostException;
19  import java.util.concurrent.LinkedBlockingQueue;
20  import java.util.logging.Level;
21  import java.util.logging.Logger;
22  
23  public class TestAgents {
24  
25  	public static class NetworkLoggingAgent extends AbstractAgent {
26  
27  		public IAgentLogic myLogic = new IAgentLogic() {
28  
29  			@Override
30  			public long getLogicInitializeTime() {
31  				return 1000;
32  			}
33  
34  			@Override
35  			public long getLogicShutdownTime() {
36  				return 1000;
37  			}
38  
39  			@Override
40  			public void logic() {
41  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").finest("I'm alive! FINEST"+this.toString());
42  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").finer("I'm alive! FINER");
43  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").fine("I'm alive! FINE");
44  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").info("I'm alive! INFO");
45  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").warning("I'm alive! WARNING");
46  				NetworkLoggingAgent.this.getLogger().getCategory("my-log").severe("I'm alive! SEVERE");
47  				try {
48  					Thread.sleep(200);
49  				} catch (InterruptedException e) {
50  				}
51  			}
52  
53  			@Override
54  			public void logicInitialize(LogicModule logicModule) {
55  			}
56  
57  			@Override
58  			public void logicShutdown() {
59  			}
60  
61  			@Override
62  			public void beforeFirstLogic() {
63  			}
64  			
65  		};
66  		
67  		LogicModule logic;
68  		
69  		public NetworkLoggingAgent(IAgentId agentId, IComponentBus eventBus, IAgentLogger logger) {
70  			super(agentId, eventBus, logger);
71  			logger.addDefaultNetworkHandler();
72  			logic = new LogicModule(this, myLogic);
73  		}
74  		
75  	}
76  	
77  	public static NetworkLoggingAgent createNewAgent() {
78  		IAgentId agentId = new AgentId();
79  		IAgentLogger agentLogger = new AgentLogger(agentId);
80                  agentLogger.setLevel(Level.ALL);
81  		IComponentBus bus = new ComponentBus(agentLogger);
82  		return new NetworkLoggingAgent(agentId, bus, agentLogger);
83  	}
84  	
85  	public static void main(String[] args) {
86  	
87  		NetworkLoggingAgent agent1 = createNewAgent();
88  		NetworkLoggingAgent agent2 = createNewAgent();
89  		NetworkLoggingAgent agent3 = createNewAgent();
90                  NetworkLoggingAgent agent4 = createNewAgent();
91  		
92  		agent1.start();
93  		agent2.start();
94  		agent3.start();
95                  agent4.start();
96  		
97  		///////////////////////////////////////////////
98  		
99  	        IAgentId agent1Id = agent1.getComponentId();
100 		IAgentId agent2Id = agent2.getComponentId();
101 		IAgentId agent3Id = agent3.getComponentId();
102                 IAgentId agent4Id = agent4.getComponentId();
103 
104                 //When an agent is removed, we don't want to read its logs anymore...
105                 boolean a1logged=true;
106                 boolean a2logged=true;
107                 boolean a3logged=true;
108                 boolean a4logged=true;
109 
110 
111             try {
112             Socket cl1 = new Socket(InetAddress.getByName("localhost"), 12345);
113             new ObjectOutputStream(cl1.getOutputStream()).writeObject(agent1Id);
114 
115             Socket cl2 = new Socket(InetAddress.getByName("localhost"), 12345);
116             new ObjectOutputStream(cl2.getOutputStream()).writeObject(agent2Id);
117 
118             Socket cl3 = new Socket(InetAddress.getByName("localhost"), 12345);
119             new ObjectOutputStream(cl3.getOutputStream()).writeObject(agent3Id);
120 
121             Socket cl4 = new Socket(InetAddress.getByName("localhost"), 12345);
122             new ObjectOutputStream(cl4.getOutputStream()).writeObject(agent4Id);
123 
124             int i=0;
125             while (true) {
126                 try {
127                     if(a1logged)
128                     for(NetworkLogEnvelope envelope: (LinkedBlockingQueue<NetworkLogEnvelope>)(new ObjectInputStream(cl1.getInputStream()).readObject())){
129                         System.out.println("client 1's log: "+envelope.toString());
130                     }
131 
132                     if(a2logged)
133                     for(NetworkLogEnvelope envelope: (LinkedBlockingQueue<NetworkLogEnvelope>)(new ObjectInputStream(cl2.getInputStream()).readObject())){
134                         System.out.println("client 2's log: "+envelope.toString());
135                     }
136 
137                     if(a3logged)
138                     for(NetworkLogEnvelope envelope: (LinkedBlockingQueue<NetworkLogEnvelope>)(new ObjectInputStream(cl3.getInputStream()).readObject())){
139                         System.out.println("client 3's log: "+envelope.toString());
140                     }
141 
142                     if(a4logged)
143                     for(NetworkLogEnvelope envelope: (LinkedBlockingQueue<NetworkLogEnvelope>)(new ObjectInputStream(cl4.getInputStream()).readObject())){
144                         System.out.println("client 4's log: "+envelope.toString());
145                     }
146                     /* Testing removing agent...it works it seems.
147                     i++;
148                     if(i>=20)
149                     {
150                         NetworkLogManager.getNetworkLogManager().removeAgent(agent4Id);
151                         a4logged=false;
152                         NetworkLogManager.getNetworkLogManager().removeAgent(agent3Id);
153                         a3logged=false; 
154                         NetworkLogManager.getNetworkLogManager().removeAgent(agent2Id);
155                         a2logged=false;
156                         i=-500;
157                     }
158                     else{System.out.println(i);}*/
159 
160 
161                 } catch (StreamCorruptedException e) {System.out.println(e.toString());break;
162                 } catch (ClassNotFoundException e){ System.out.println(e.toString());break;
163                 } 
164 
165             }
166             System.out.println("logging finished");
167 
168 
169         } catch (UnknownHostException ex) {
170             Logger.getLogger(TestAgents.class.getName()).log(Level.SEVERE, null, ex);
171         } catch (IOException ex) {
172             Logger.getLogger(TestAgents.class.getName()).log(Level.SEVERE, null, ex);
173         }
174 
175 		
176 		try {
177 			Thread.sleep(5000);
178 		} catch (InterruptedException e) {
179 			e.printStackTrace();
180 		}
181 		agent1.kill();
182 		//agent2.kill();
183 		//agent3.kill();
184 		
185 		// kill threads that are receiving logs from agents
186 		
187 		Pogamut.getPlatform().close();
188 		
189 		
190 	}
191 	
192 }