All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cosylab.epics.caj.cas.handlers.ClearChannelResponse Maven / Gradle / Ivy

/*
 * Copyright (c) 2004 by Cosylab
 *
 * The full license specifying the redistribution, modification, usage and other
 * rights and obligations is included with the distribution of this project in
 * the file "LICENSE-CAJ". If the license is not included visit Cosylab web site,
 * .
 *
 * THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, NOT EVEN THE
 * IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, ASSUMES
 * _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE RESULTING FROM THE USE, MODIFICATION,
 * OR REDISTRIBUTION OF THIS SOFTWARE.
 */

package com.cosylab.epics.caj.cas.handlers;

import gov.aps.jca.CAStatus;
import gov.aps.jca.cas.ServerChannel;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.logging.Level;

import com.cosylab.epics.caj.cas.CAJServerContext;
import com.cosylab.epics.caj.cas.CASTransport;
import com.cosylab.epics.caj.cas.requests.ClearChannelRequest;
import com.cosylab.epics.caj.impl.Transport;

/**
 * CA clear channel request handler.
 * @author Matej Sekoranja
 * @version $id$
 */
public class ClearChannelResponse extends AbstractCASResponseHandler {

	/**
	 * @param context
	 */
	public ClearChannelResponse(CAJServerContext context) {
		super(context, "Clear channel request");
	}

	/**
	 * @see com.cosylab.epics.caj.impl.handlers.AbstractCAJResponseHandler#internalHandleResponse(java.net.InetSocketAddress, com.cosylab.epics.caj.impl.Transport, java.nio.ByteBuffer[])
	 */
	protected void internalHandleResponse(
		InetSocketAddress responseFrom,
		Transport transport,
		ByteBuffer[] response) {

		CASTransport casTransport = (CASTransport)transport;
		
		// get channel by SID
		ServerChannel channel = casTransport.getChannel(parameter1);
		if (channel == null) 
		{
			sendException(transport, parameter1, CAStatus.BADCHID, response[0], null);
			return;
		} 

		// destroy
		channel.destroy();
		
		// .. and unregister
		casTransport.unregisterChannel(parameter1);
		
		// send response back
		try
		{
			new ClearChannelRequest(transport, parameter1, parameter2).submit();
		} catch (Throwable th) {
			// it often happens that the client dies (closes TCP connection) and does not wait for this message
			//context.getLogger().log(Level.WARNING, "Exception caught when responding to event cancel request for channel with SID : " + parameter1, th);
		}
		
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy