at.tfr.securefs.MessageHandlerBean.java Source code

Java tutorial

Introduction

Here is the source code for at.tfr.securefs.MessageHandlerBean.java

Source

/*
 * Copyright 2016 Thomas Frhbeck, fruehbeck(at)aon(dot)at.
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package at.tfr.securefs;

import at.tfr.securefs.api.json.Message;
import at.tfr.securefs.api.json.MessageSender;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.concurrent.ExecutionException;

import javax.annotation.PostConstruct;
import javax.crypto.NoSuchPaddingException;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.websocket.OnMessage;
import javax.websocket.Session;

import org.apache.commons.lang.StringUtils;
import org.jboss.logging.Logger;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import at.tfr.securefs.key.SecretKeySpecBean;
import at.tfr.securefs.xnio.MessageHandlerImpl;

@ApplicationScoped
public class MessageHandlerBean extends MessageHandlerImpl {

    private Logger log = Logger.getLogger(getClass());

    public MessageHandlerBean() {
    }

    @Inject
    public MessageHandlerBean(Configuration configuration, ObjectMapper objectMapper, SecretKeySpecBean sksBean) {
        super(configuration, objectMapper, sksBean);
    }

    @PostConstruct
    protected void init() {
    }

    @OnMessage
    public void handleMessage(String json, Session wsSession) throws JsonParseException, JsonMappingException,
            IOException, InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException,
            NoSuchPaddingException, InvalidAlgorithmParameterException, InterruptedException, ExecutionException {

        try {
            handleMessage(json, new WebSocketSender(wsSession));
        } catch (Exception e) {
            log.warn("cannot handle message=" + StringUtils.abbreviate(json, 100) + " : " + e, e);
        }
    }

    class WebSocketSender implements MessageSender {
        private Session session;

        public WebSocketSender(Session session) {
            this.session = session;
        }

        @Override
        public void send(Message message) {
            try {
                session.getBasicRemote().sendText(objectMapper.writeValueAsString(message));
            } catch (IOException e) {
                log.warn("cannot write message=" + message, e);
            }
        }
    }

}