/*
 * Copyright 1999-2011 Alibaba Group.
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.alibaba.dubbo.rpc;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.Adaptive;
import com.alibaba.dubbo.common.extension.SPI;

/**
 * Protocol. (API/SPI, Singleton, ThreadSafe)
 * 
 * @author william.liangf
 */
@SPI("dubbo")
public interface Protocol {
    
    /**
     * get default port.
     * 
     * @return default port.
     */
    int getDefaultPort();

	/**
	 * export.
	 * 
	 * @param <T>
	 * @param invoker
	 * @return exporter
	 * @throws RpcException
	 */
    @Adaptive
	<T> Exporter<T> export(Invoker<T> invoker) throws RpcException;

    /**
     * refer.
     * 
     * @param <T>
     * @param type
     * @param url
     * @return invoker
     * @throws RpcException
     */
    @Adaptive
    <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException;

	/**
	 * destory.
	 */
	void destroy();

}