Package org.atmosphere.wasync.serial

Source Code of org.atmosphere.wasync.serial.SerializedClient$SerializedRequestBuilder

/*
* Copyright 2014 Jeanfrancois Arcand
*
* 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.atmosphere.wasync.serial;

import org.atmosphere.wasync.Client;
import org.atmosphere.wasync.FunctionResolver;
import org.atmosphere.wasync.Socket;
import org.atmosphere.wasync.impl.AtmosphereRequest.AtmosphereRequestBuilder;

/**
* {@code SerializedClient} is a {@link org.atmosphere.wasync.Client} that guarantees ordered message delivery, in-line with the
* {@link Socket#fire(Object)} invocation sequence.
* <p/>
* A sequence of fire calls over a {@code SerializedClient}'s socket (created through {@link SerializedClient#create()} :
* <blockquote><pre>
*     socket.fire("message1").fire("message2");
* </pre></blockquote>
* guarantees that {@code message1} arrives at the recipient-side before {@code message2}. By default, wAsync uses multiple underlying
* connections in delivering fire payloads. The {@code SerializedClient} guarantees that only one connection is used at any moment
* in time, while still providing an asynchronous fire interface to clients.
* <p/>
* {@code SerializedClient} instances can be configured by means of a {@link SerializedFireStage} in deciding on the exact
* staging semantics and the (non-functional) quality properties of a supporting stage. The default implementation provided is
* {@link DefaultSerializedFireStage}.
* <p/>
*
* @author Christian Bach
*/
public class SerializedClient implements Client<SerializedOptions, SerializedOptionsBuilder, SerializedClient.SerializedRequestBuilder> {

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket create(SerializedOptions options) {
        return new SerializedSocket(options);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket create() {
        return new SerializedSocket(
                new SerializedOptionsBuilder()
                        .serializedFireStage(new DefaultSerializedFireStage())
                        .build());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public SerializedOptionsBuilder newOptionsBuilder() {
        return new SerializedOptionsBuilder();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public SerializedRequestBuilder newRequestBuilder() {
        SerializedRequestBuilder b = new SerializedRequestBuilder();
        return SerializedRequestBuilder.class.cast(b.resolver(FunctionResolver.DEFAULT));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public SerializedRequestBuilder newRequestBuilder(Class<SerializedRequestBuilder> clazz) {
        AtmosphereRequestBuilder b;
        try {
            b = clazz.newInstance();
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return SerializedRequestBuilder.class.cast(b.resolver(FunctionResolver.DEFAULT));
    }

    public static class SerializedRequestBuilder extends AtmosphereRequestBuilder {
        public SerializedRequestBuilder() {
            super();
            enableProtocol(true);
        }
    }
}
TOP

Related Classes of org.atmosphere.wasync.serial.SerializedClient$SerializedRequestBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.