/** * */ package ecologylab.oodss.messages; import java.io.IOException; import java.net.BindException; import java.net.InetAddress; import java.net.UnknownHostException; import ecologylab.collections.Scope; import ecologylab.oodss.distributed.client.NIOClient; import ecologylab.oodss.distributed.common.SessionObjects; import ecologylab.oodss.distributed.exception.MessageTooLargeException; import ecologylab.oodss.distributed.server.DoubleThreadedNIOServer; import ecologylab.oodss.distributed.server.clientsessionmanager.SessionHandle; import ecologylab.serialization.annotations.simpl_inherit; /** * A request that indicates that the client wishes to be permanently disconnected from the server. * * @author Zachary O. Toups (zach@ecologylab.net) */ @simpl_inherit public class DisconnectRequest<SCOPE extends Scope> extends RequestMessage<SCOPE> { public static final DisconnectRequest REUSABLE_INSTANCE = new DisconnectRequest(); /** * */ public DisconnectRequest() { super(); } /** * @see ecologylab.oodss.messages.RequestMessage#performService(ecologylab.collections.Scope) */ @Override public ResponseMessage performService(SCOPE localScope) { debug("**** running disconnect request ****"); SessionHandle handle = (SessionHandle) localScope.get(SessionObjects.SESSION_HANDLE); if (handle != null) handle.invalidate(); return OkResponse.reusableInstance; } public static void main(String[] args) throws BindException, UnknownHostException, IOException, MessageTooLargeException { DoubleThreadedNIOServer server = DoubleThreadedNIOServer.getInstance( 10000, InetAddress.getLocalHost(), DefaultServicesTranslations.get(), new Scope(), 9999, 99999); server.start(); System.err.println("c1 instantiate"); NIOClient c1 = new NIOClient( "128.194.147.181", 10000, DefaultServicesTranslations.get(), new Scope()); System.err.println("c1 connect"); c1.connect(); System.err.println("c2 instantiate"); NIOClient c2 = new NIOClient( "128.194.147.181", 10000, DefaultServicesTranslations.get(), new Scope()); System.err.println("c2 connect"); c2.connect(); System.err.println("c1 disconnect"); c1.sendMessage(new DisconnectRequest()); System.err.println("c2 disconnect"); c2.sendMessage(new DisconnectRequest()); System.err.println("c1 disconnect again"); c1.sendMessage(new DisconnectRequest()); } }