package context.arch.comm; import java.net.Socket; import context.arch.comm.protocol.ProtocolException; import context.arch.comm.protocol.RequestData; /** * This interface specifies all the methods a CommunicationsServer object must support * allowing the details of the specific protocol used to be abstracted away. * * @see context.arch.comm.CommunicationsObject */ public interface CommunicationsServer { /** * Abstract method to call when starting a CommunicationsServer object */ public abstract void start(); /** * Abstract method to call when stopping a CommunicationsServer object */ public abstract void quit(); /** * Abstract method to get the communications protocol being used * * @return the protocol being used */ public abstract String getProtocol(); /** * This abstract method strips the protocol away from the received request * * @param socket The socket the request is being received on * @return the request with the protocol stripped away * @exception context.arch.comm.protocol.ProtocolException thrown if protocol can't be stripped away * @see #addReplyProtocol(String) * @see CommunicationsClient#addRequestProtocol(String,String) * @see CommunicationsClient#stripReplyProtocol(java.net.Socket) */ public abstract RequestData stripRequestProtocol(Socket socket) throws ProtocolException; /** * This abstract method strips the protocol away from the received request * * @param reply The reply to add the protocol to * @return the reply with the protocol added * @exception context.arch.comm.protocol.ProtocolException thrown if protocol can't be added * @see #stripRequestProtocol(java.net.Socket) * @see CommunicationsClient#addRequestProtocol(String,String) * @see CommunicationsClient#stripReplyProtocol(java.net.Socket) */ public abstract String addReplyProtocol(String reply) throws ProtocolException; /** * This abstract method handles incoming requests on a given socket * * @param socket The socket requests are coming in on */ public abstract void handleIncomingRequest(Socket socket); /** * This abstract method generates an error message if a request can't * be handled properly, to the point where a contextual error message * can still be sent as the reply * * @return DataObject containing the error message * @see #getFatalMessage() */ public abstract DataObject getErrorMessage(); /** * This abstract method generates an fatal message if a request can't * be handled properly, to the point where no contextual error message * can be sent as the reply * * @return String containing the fatal message * @see #getErrorMessage() */ public abstract String getFatalMessage(); }