1 46 47 package org.mr.kernel.control; 48 49 50 import java.util.ArrayList ; 51 import java.util.List ; 52 import java.util.Set ; 53 54 import org.mr.MantaAgent; 55 import org.mr.MantaAgentConstants; 56 import org.mr.MantaException; 57 import org.mr.core.protocol.MantaBusMessage; 58 import org.mr.core.protocol.MantaBusMessageConsts; 59 import org.mr.core.util.SystemTime; 60 import org.mr.kernel.services.MantaService; 61 import org.mr.kernel.services.ServiceActor; 62 import org.mr.kernel.services.ServiceConsumer; 63 import org.mr.kernel.world.WorldModeler; 64 65 66 72 public class ControlSignalMessageSender { 73 74 93 public void advertiseService(ServiceActor actor, MantaAgent agent) throws MantaException { 94 95 WorldModeler world = agent.getSingletonRepository().getWorldModeler(); 96 MantaService service = MantaAgent.getInstance().getService(actor.getServiceName(), actor.getServiceType()); 97 if (service == null) { throw new MantaException("No such Service " + actor.getServiceName(), MantaException.ID_INVALID_ARGUMENTS); } 98 99 ControlSignal control = new ControlSignal(ControlSignal.OPERATION_TYPE_ADVERTISE); 101 if (!service.isServiceUpdated()) { 102 control.getParams().put(ControlSignal.SERVICE_UPDATE_NEEDED, MantaBusMessageConsts.HEADER_VALUE_TRUE); 103 service.setServiceUpdated(true); 104 } 105 106 107 108 Set agents = world.getAgents(world.getDefaultDomainName()); 109 int size = agents.size(); 110 List agentList = new ArrayList (agents); 111 if (size == 0) return; 113 114 for (int i = 0; i < size; i++) { 115 MantaBusMessage msg = MantaBusMessage.getInstance(); 116 msg.setMessageType(MantaBusMessageConsts.MESSAGE_TYPE_CONTROL); 117 msg.setPayload(control); 118 String agentName = (String ) agentList.get(i); 119 if (!agentName.equals(agent.getAgentName())) { 120 ServiceConsumer adderss = new ServiceConsumer(agentName,world.getDefaultDomainName(), ControlSignalMessageConsumer.CONTROL_PSEUDO_SERVICE_NAME,(byte)0,MantaAgentConstants.AUTO_ACK); 121 adderss.setID("ps:"+agentName); 122 msg.setRecipient(adderss); 123 124 agent.send(msg, actor, MantaAgentConstants.NON_PERSISTENT, MantaAgentConstants.HIGH, MantaAgentConstants.CONTROL_MESSAGES_TTL+SystemTime.gmtCurrentTimeMillis()); 125 126 } 127 } 128 129 130 } 132 133 144 public void recallService(ServiceActor serviceActor, MantaAgent agent) throws MantaException { 145 146 WorldModeler world = agent.getSingletonRepository().getWorldModeler(); 147 MantaService service =agent.getService(serviceActor.getServiceName(), serviceActor.getServiceType()); 148 if (service == null) { throw new MantaException("No such Service " + serviceActor.getServiceName(), MantaException.ID_INVALID_ARGUMENTS); } 149 151 ControlSignal control = new ControlSignal(ControlSignal.OPERATION_TYPE_RECALL); 153 154 155 156 Set agents = world.getAgents(world.getDefaultDomainName()); 157 int size = agents.size(); 158 List agentList = new ArrayList (agents); 159 if (size == 0) return; 161 162 for (int i = 0; i < size; i++) { 163 MantaBusMessage cbm = MantaBusMessage.getInstance(); 164 cbm.setMessageType(MantaBusMessageConsts.MESSAGE_TYPE_CONTROL); 165 cbm.setPayload(control); 166 String agentName = (String ) agentList.get(i); 167 ServiceConsumer adderss = new ServiceConsumer(agentName,agent.getDomainName(), ControlSignalMessageConsumer.CONTROL_PSEUDO_SERVICE_NAME,(byte)0,MantaAgentConstants.AUTO_ACK); 168 adderss.setID("ps:"+agentName); 169 cbm.setRecipient(adderss); 170 agent.send(cbm, serviceActor, MantaAgentConstants.NON_PERSISTENT, MantaAgentConstants.HIGH, MantaAgentConstants.CONTROL_MESSAGES_TTL+SystemTime.gmtCurrentTimeMillis()); 171 172 } 173 174 175 176 } 178 179 public void recallDurableSubscription(ServiceActor serviceActor, MantaAgent agent) throws MantaException { 180 181 WorldModeler world = agent.getSingletonRepository().getWorldModeler(); 182 MantaService service = agent.getService(serviceActor.getServiceName(), serviceActor.getServiceType()); 183 if (service == null) { throw new MantaException("No such Service " + serviceActor.getServiceName(), MantaException.ID_INVALID_ARGUMENTS); } 184 185 ControlSignal control = new ControlSignal(ControlSignal.OPERATION_TYPE_UNSUBSCRIBE_DURABLE); 187 188 189 190 Set agents = world.getAgents(world.getDefaultDomainName()); 191 int size = agents.size(); 192 List agentList = new ArrayList (agents); 193 if (size == 0) return; 195 196 for (int i = 0; i < size; i++) { 197 MantaBusMessage cbm = MantaBusMessage.getInstance(); 198 cbm.setMessageType(MantaBusMessageConsts.MESSAGE_TYPE_CONTROL); 199 cbm.setPayload(control); 200 String agentName = (String ) agentList.get(i); 201 ServiceConsumer adderss = new ServiceConsumer(agentName,agent.getDomainName(), ControlSignalMessageConsumer.CONTROL_PSEUDO_SERVICE_NAME,(byte)0,MantaAgentConstants.AUTO_ACK); 202 adderss.setID("ps:"+agentName); 203 cbm.setRecipient(adderss); 204 agent.send(cbm, serviceActor, MantaAgentConstants.NON_PERSISTENT, MantaAgentConstants.HIGH, MantaAgentConstants.CONTROL_MESSAGES_TTL+SystemTime.gmtCurrentTimeMillis()); 205 206 } 207 208 209 } 210 } | Popular Tags |