package uc.protocols.client; import java.io.IOException; import java.net.ProtocolException; import java.util.Map; import logger.LoggerFactory; import org.apache.log4j.Level; import org.apache.log4j.Logger; import uc.protocols.ADCStatusMessage; import uc.protocols.hub.AbstractADCHubCommand; import uc.protocols.hub.Flag; public class STA extends AbstractADCClientProtocolCommand { private static final Logger logger = LoggerFactory.make(Level.DEBUG); public STA() { super(); setPattern(prefix+" ([012])(\\d{2}) ("+ADCTEXT+")(?: (.*))?",true); } public void handle(ClientProtocol client,String command) throws ProtocolException, IOException { logger.debug(command); int severity = Integer.valueOf(matcher.group(1)); int errorCode = Integer.valueOf(matcher.group(2)); String message = revReplaces(matcher.group(3)); Map<Flag,String> flagMap = AbstractADCHubCommand.getFlagMap(matcher.group(4)); ADCStatusMessage sm = new ADCStatusMessage(message,severity,errorCode); switch(errorCode) { case 53: if ("Slots full".equals(message)) { message = ""; } if (flagMap.containsKey(Flag.QP)) { message += flagMap.get(Flag.QP); } client.noSlotsAvailable(message); break; } if (severity == ADCStatusMessage.FATAL) { client.otherSentError(sm.getMessage() == null ? message: sm.getMessage()); } else { logger.debug("message received: "+sm.toString()); } } public static void sendSTA(ClientProtocol client,ADCStatusMessage sm) { client.sendUnmodifiedRaw("CSTA "+sm.toADCString()+"\n"); if (sm.getSeverity() == ADCStatusMessage.FATAL) { client.disconnect(sm); } } }