Package com.github.ghetolay.jwamp.server

Source Code of com.github.ghetolay.jwamp.server.TestServer

/**
*Copyright [2012] [Ghetolay]
*
*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 com.github.ghetolay.jwamp.server;

import java.io.InputStream;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.eclipse.jetty.websocket.api.UpgradeRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.github.ghetolay.jwamp.DefaultWampParameter;
import com.github.ghetolay.jwamp.WampMessageHandler;
import com.github.ghetolay.jwamp.WampWebSocket;
import com.github.ghetolay.jwamp.jetty.JettyWebSocketListener;
import com.github.ghetolay.jwamp.jetty.WampJettyFactory;
import com.github.ghetolay.jwamp.jetty.WampWebSocketHandler;
import com.github.ghetolay.jwamp.rpc.DefinedMethodRPCManager;
import com.github.ghetolay.jwamp.server.rpc.TestDefinedAction;

/**
* Jetty Server, with JWAMP enabled, suitable for test case use.
*/
public class TestServer implements JettyWebSocketListener
{
    protected final Logger log = LoggerFactory.getLogger(getClass());
    private Server server;
    private ServerConnector connector;
    private URI serverUri;
    private Map<String, WampWebSocket> connections = new HashMap<String, WampWebSocket>();
   
    public void start() throws Exception
    {
        server = new Server();

        connector = new ServerConnector(server);
        connector.setPort(0);
        server.addConnector(connector);

        WampJettyFactory wampFact = WampJettyFactory.getInstance();

        try (InputStream is = getClass().getResourceAsStream("/wamp-server.xml"))
        {
            WampWebSocketHandler wampHandler = wampFact.newWebsocketHandler(new Parameters(is),this);
            // wampFact.getSerializer().setDesiredFormat(WampSerializer.format.BINARY);
            server.setHandler(wampHandler);
        }
       
        // Start server
        server.start();
       
        // Pick up real port, prepare serverUri for test cases
        String host = connector.getHost();
        if(host == null) {
            host = "localhost";
        }
        serverUri = new URI("ws",null,host,connector.getLocalPort(),"/",null,null);
    }
   
    /**
     * Restart server on same port as before
     */
    public void restart() throws Exception
    {
        int port = connector.getLocalPort();
        server.stop();
        connector.setPort(port);
        server.start();
    }
   
    public URI getServerURI()
    {
        return serverUri;
    }

    public void stopConnections()
    {
        for (Entry<String, WampWebSocket> entry : connections.entrySet())
            entry.getValue().getConnection().close(StatusCode.SHUTDOWN,"");
    }

    public void stop() throws Exception
    {
        server.stop();
    }

    public void newWebSocket(UpgradeRequest request, WampWebSocket wws)
    {
        connections.put(wws.getConnection().getSessionId(),wws);
    }

    public void closedWebSocket(String sessionId)
    {
        connections.remove(sessionId);
    }

    private class Parameters extends DefaultWampParameter.SimpleServerParameter
    {
        public Parameters(InputStream is) throws Exception
        {
            super(is);
        }

        @Override
        public Collection<WampMessageHandler> getHandlers()
        {
            Collection<WampMessageHandler> handlers = super.getHandlers();

            handlers.add(new DefinedMethodRPCManager(new TestDefinedAction()));

            return handlers;
        }
    }
}
TOP

Related Classes of com.github.ghetolay.jwamp.server.TestServer

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.