/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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 backtype.storm.multilang;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

import backtype.storm.task.TopologyContext;

/**
 * The ISerializer interface describes the methods that an object should implement to provide serialization and de-serialization capabilities to non-JVM
 * language components.
 */
public interface ISerializer extends Serializable {

    /**
     * This method sets the input and output streams of the serializer
     * 
     * @param processIn output stream to non-JVM component
     * @param processOut input stream from non-JVM component
     */
    void initialize(OutputStream processIn, InputStream processOut);

    /**
     * This method transmits the Storm config to the non-JVM process and receives its pid.
     * 
     * @param conf storm configuration
     * @param context topology context
     * @return process pid
     */
    Number connect(Map conf, TopologyContext context) throws IOException, NoOutputException;

    /**
     * This method receives a shell message from the non-JVM process
     * 
     * @return shell message
     */
    ShellMsg readShellMsg() throws IOException, NoOutputException;

    /**
     * This method sends a bolt message to a non-JVM bolt process
     * 
     * @param msg bolt message
     */
    void writeBoltMsg(BoltMsg msg) throws IOException;

    /**
     * This method sends a spout message to a non-JVM spout process
     * 
     * @param msg spout message
     */
    void writeSpoutMsg(SpoutMsg msg) throws IOException;

    /**
     * This method sends a list of task IDs to a non-JVM bolt process
     * 
     * @param taskIds list of task IDs
     */
    void writeTaskIds(List<Integer> taskIds) throws IOException;
}
