/**
 * Copyright 2016-present Open Networking Laboratory
 * 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 org.onosproject.kafkaintegration.listener;

import org.onosproject.event.ListenerService;
import org.onosproject.kafkaintegration.api.dto.OnosEvent.Type;

/**
 * APIs for starting and stopping a ONOS Event listener.
 *
 */
public interface OnosEventListener {

    /**
     * Start the listener for the specific ONOS event type.
     *
     * @param event ONOS event type
     * @param service ONOS event listener for the specific event type
     */
    void startListener(Type event, ListenerService<?, ?> service);
    /**
     * Stop the Listener for the specific ONOS event type.
     *
     * @param event ONOS event type
     * @param service ONOS event listener for the specific event type
     */
    void stopListener(Type event, ListenerService<?, ?> service);

}
