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

org.jboss.aerogear.simplepush.SimplePushClient Maven / Gradle / Ivy

The newest version!
/**
 * JBoss, Home of Professional Open Source
 * Copyright Red Hat, Inc., and individual contributors.
 *
 * 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.jboss.aerogear.simplepush;


import net.wessendorf.websocket.SimpleWebSocketClient;
import net.wessendorf.websocket.WebSocketHandlerAdapter;
import org.jboss.aerogear.simplepush.protocol.Ack;
import org.jboss.aerogear.simplepush.protocol.MessageType;
import org.jboss.aerogear.simplepush.protocol.impl.*;
import org.jboss.aerogear.simplepush.protocol.impl.json.JsonUtil;
import org.jboss.aerogear.simplepush.util.UUIDUtil;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

/**
 * Simple Push Client
 */
public class SimplePushClient {

    private final SimpleWebSocketClient websocketClient;
    private RegistrationListener registrationListener;
    private MessageListener listener;
    private List registeredChannels = new ArrayList<>();

    public SimplePushClient(String simplePushServerURL) {

        try {
        websocketClient = new SimpleWebSocketClient(simplePushServerURL);
        websocketClient.setWebSocketHandler(new WebSocketHandlerAdapter() {

            @Override
            public void onOpen() {
            }

            @Override
            public void onMessage(String message) {
                final MessageType messageType = JsonUtil.parseFrame(message);
                switch (messageType.getMessageType()) {
                case REGISTER:
                    final RegisterResponseImpl registerResponse = JsonUtil.fromJson(message, RegisterResponseImpl.class);
                    if (registrationListener != null) {
                        registrationListener.onRegistered(registerResponse.getChannelId(), registerResponse.getPushEndpoint());
                    }
                    break;
                case NOTIFICATION:
                    final NotificationMessageImpl notificationMessage = JsonUtil.fromJson(message, NotificationMessageImpl.class);
                    for (Ack ack : notificationMessage.getAcks()) {
                        websocketClient.sendText(JsonUtil.toJson(ack));
                        listener.onMessage(ack);
                    }
                    break;
                case UNREGISTER:
                    UnregisterMessageImpl unregisterMessage = JsonUtil.fromJson(message, UnregisterMessageImpl.class);
                    registeredChannels.remove(unregisterMessage.getChannelId());
                    break;
                }
            }
        });
        }
        catch (URISyntaxException e) {
             throw new IllegalArgumentException("simplePushServerURL is an invalid URL");
        }
    }

    /**
     * Create a connection with the Simple Push Server.
     */
    public void connect() {
        websocketClient.connect();
        final HelloMessageImpl helloMessage = new HelloMessageImpl(UUIDUtil.newUAID());
        websocketClient.sendText(JsonUtil.toJson(helloMessage));
    }

    /**
     * Get the channel id by index.
     * 
     * @param index the index of the registered channel
     * @return the index or null
     */
    public String getChannelId(int index) {
        return registeredChannels.get(index);
    }

    /**
     * Register to a new channel for notification by the simple push server
     * 
     * @param registrationListener called when the registration is complete
     */
    public void register(RegistrationListener registrationListener) {
        this.registrationListener = registrationListener;
        String channelID = UUIDUtil.newUAID();
        registeredChannels.add(channelID);
        final String register = JsonUtil.toJson(new RegisterMessageImpl(channelID));
        websocketClient.sendText(register);
    }

    /**
     * Remove the registered channel
     * 
     * @param channelId the previously registered channel id
     */
    public void unregister(String channelId) {
        UnregisterMessageImpl unregisterMessage = new UnregisterMessageImpl(channelId);
        websocketClient.sendText(JsonUtil.toJson(unregisterMessage));
    }

    /**
     * Close the communication
     */
    public void close() {
        websocketClient.close();
    }

    public void addMessageListener(MessageListener listener) {
        this.listener = listener;
    }

    public SimpleWebSocketClient getWebsocketClient(){
        return websocketClient;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy