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

org.red5.server.net.rtmp.status.StatusObject Maven / Gradle / Ivy

/*
 * RED5 Open Source Media Server - https://github.com/Red5/
 * 
 * Copyright 2006-2016 by respective authors (see below). All rights reserved.
 * 
 * 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.red5.server.net.rtmp.status;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.red5.annotations.Anonymous;
import org.red5.io.object.ICustomSerializable;
import org.red5.io.object.Output;
import org.red5.io.object.Serializer;

/**
 * Status object that is sent to client with every status event
 * 
 * @author The Red5 Project
 * @author Luke Hubbard, Codegent Ltd ([email protected])
 */
@Anonymous
public class StatusObject implements Serializable, ICustomSerializable, Externalizable {

    private static final long serialVersionUID = 8817297676191096283L;

    public static final String ERROR = "error";

    public static final String STATUS = "status";

    public static final String WARNING = "warning";

    protected String code;

    protected String level;

    protected String description = "";

    protected Object application;

    protected Map additional;

    /** Constructs a new StatusObject. */
    public StatusObject() {

    }

    public StatusObject(String code, String level) {
        this.code = code;
        this.level = level;
    }

    public StatusObject(String code, String level, String description) {
        this.code = code;
        this.level = level;
        this.description = description;
    }

    /**
     * Getter for property 'code'.
     *
     * @return Value for property 'code'.
     */
    public String getCode() {
        return code;
    }

    /**
     * Setter for property 'code'.
     *
     * @param code
     *            Value to set for property 'code'.
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * Getter for property 'description'.
     *
     * @return Value for property 'description'.
     */
    public String getDescription() {
        return description;
    }

    /**
     * Setter for property 'description'.
     *
     * @param description
     *            Value to set for property 'description'.
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * Getter for property 'level'.
     *
     * @return Value for property 'level'.
     */
    public String getLevel() {
        return level;
    }

    /**
     * Setter for property 'level'.
     *
     * @param level
     *            Value to set for property 'level'.
     */
    public void setLevel(String level) {
        this.level = level;
    }

    /**
     * Setter for property 'application'.
     *
     * @param application
     *            Value to set for property 'application'.
     */
    public void setApplication(Object application) {
        this.application = application;
    }

    /**
     * Getter for property 'application'.
     *
     * @return Value for property 'application'.
     */
    public Object getApplication() {
        return application;
    }

    /** {@inheritDoc} */
    @Override
    public String toString() {
        return String.format("Status code: %s level: %s description: %s", code, level, description);
    }

    /**
     * Generate Status object that can be returned through a RTMP channel.
     * 
     * @return status
     */
    public Status asStatus() {
        return new Status(getCode(), getLevel(), getDescription());
    }

    public void setAdditional(String name, Object value) {
        if ("code,level,description,application".indexOf(name) != -1) {
            throw new RuntimeException("the name \"" + name + "\" is reserved");
        }
        if (additional == null) {
            additional = new HashMap();
        }
        additional.put(name, value);
    }

    public void serialize(Output output) {
        output.putString("level");
        output.writeString(getLevel());
        output.putString("code");
        output.writeString(getCode());
        output.putString("description");
        output.writeString(getDescription());
        if (application != null) {
            output.putString("application");
            Serializer.serialize(output, application);
        }
        if (additional != null) {
            // Add additional parameters
            for (Map.Entry entry : additional.entrySet()) {
                output.putString(entry.getKey());
                Serializer.serialize(output, entry.getValue());
            }
        }
    }

    @SuppressWarnings("unchecked")
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        code = (String) in.readObject();
        description = (String) in.readObject();
        level = (String) in.readObject();
        additional = (Map) in.readObject();
        application = in.readObject();
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(code);
        out.writeObject(description);
        out.writeObject(level);
        if (application != null) {
            out.writeObject(additional);
        }
        if (additional != null) {
            out.writeObject(application);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy