/*
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you 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.wso2.siddhi.extension.input.transport.tcp;
import org.wso2.siddhi.annotation.Example;
import org.wso2.siddhi.annotation.Extension;
import org.wso2.siddhi.core.config.ExecutionPlanContext;
import org.wso2.siddhi.core.event.Event;
import org.wso2.siddhi.core.exception.ConnectionUnavailableException;
import org.wso2.siddhi.core.stream.input.source.Source;
import org.wso2.siddhi.core.stream.input.source.SourceEventListener;
import org.wso2.siddhi.core.util.config.ConfigReader;
import org.wso2.siddhi.core.util.transport.OptionHolder;
import org.wso2.siddhi.query.api.definition.StreamDefinition;
import org.wso2.siddhi.tcp.transport.callback.StreamListener;
import java.util.Map;
@Extension(
name = "tcp",
namespace = "source",
description = "TBD",
examples = @Example(description = "TBD", syntax = "TBD")
)
public class TCPSource extends Source {
static String CONTEXT = "context";
private SourceEventListener sourceEventListener;
private String context;
private StreamDefinition streamDefinition;
@Override
public void init(SourceEventListener sourceEventListener, OptionHolder optionHolder, ConfigReader configReader, ExecutionPlanContext
executionPlanContext) {
this.sourceEventListener = sourceEventListener;
context = optionHolder.validateAndGetStaticValue(CONTEXT,
executionPlanContext.getName() + "/" + sourceEventListener.getStreamDefinition().getId());
streamDefinition = StreamDefinition.id(context);
streamDefinition.getAttributeList().addAll(sourceEventListener.getStreamDefinition().getAttributeList());
}
@Override
public void connect() throws ConnectionUnavailableException {
TCPServer.getInstance().start();
TCPServer.getInstance().addStreamListener(new StreamListener() {
@Override
public StreamDefinition getStreamDefinition() {
return streamDefinition;
}
@Override
public void onEvent(Event event) {
sourceEventListener.onEvent(event);
}
@Override
public void onEvents(Event[] events) {
sourceEventListener.onEvent(events);
}
});
}
@Override
public void disconnect() {
TCPServer.getInstance().removeStreamListener(streamDefinition.getId());
}
@Override
public void destroy() {
TCPServer.getInstance().stop();
}
@Override
public void pause() {
TCPServer.getInstance().isPaused(true);
}
@Override
public void resume() {
TCPServer.getInstance().isPaused(false);
}
@Override
public Map<String, Object> currentState() {
return null;
}
@Override
public void restoreState(Map<String, Object> state) {
//no state
}
}