Package com.nabalive.server.web

Source Code of com.nabalive.server.web.ConnectionWelcome

package com.nabalive.server.web;

import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import com.nabalive.common.server.Event;
import com.nabalive.common.server.EventListener;
import com.nabalive.common.server.MessageService;
import com.nabalive.data.core.dao.NabaztagDAO;
import com.nabalive.data.core.model.Nabaztag;
import com.nabalive.server.jabber.ConnectionManager;
import com.nabalive.server.jabber.packet.PingPacket;
import com.nabalive.server.jabber.packet.SleepPacket;
import com.nabalive.server.web.controller.NabaztagController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Created by IntelliJ IDEA.
* User: Julien Cheype
* Date: 12/13/11
*/

@Component
public class ConnectionWelcome implements EventListener {
    public final static String WELCOME_URL = "http://karotz.s3.amazonaws.com/nab/connection.mp3";
    private final Logger logger = LoggerFactory.getLogger(getClass());
    private final static Pattern schedulePattern = Pattern.compile("(\\d+):(\\d+)-(\\d)");

    @Autowired
    private ConnectionManager connectionManager;

    @Autowired
    NabaztagController nabaztagController;

    @PostConstruct
    public void init() {
        connectionManager.addEventListener(this);
    }

    @Autowired
    NabaztagDAO nabaztagDAO;

    @Autowired
    MessageService messageService;

    private List<Long> toSec(Set<String> scheduleSet) {
        List<Long> list = Ordering.natural().immutableSortedCopy(Lists.transform(new ArrayList<String>(scheduleSet), new Function<String, Long>() {
            @Override
            public Long apply(@Nullable String s) {
                Matcher matcher = schedulePattern.matcher(s);
                if (matcher.find()) {
                    int h = Integer.parseInt(matcher.group(1));
                    int m = Integer.parseInt(matcher.group(2));
                    int d = Integer.parseInt(matcher.group(3));

                    return new Long(d * 3600L * 24L * h * 3600L * m * 60L);
                }
                return null;
            }
        }));

        return list;
    }

    public boolean checkSleep(Nabaztag nabaztag) {
        Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int day = cal.get(Calendar.DAY_OF_WEEK);
        long secFromWeek = day * 3600L * 24L * hour * 3600L * minute * 60L;

        List<Long> sleepList = toSec(nabaztag.getSleep());
        List<Long> wakeupList = toSec(nabaztag.getWakeup());

        long lastSleep = 0;
        for (long sleep : sleepList) {
            if (sleep < secFromWeek)
                lastSleep = sleep;
        }

        long lastWakeup = 0;
        for (long wakeup : wakeupList) {
            if (wakeup < secFromWeek)
                lastWakeup = wakeup;
        }


        if (lastWakeup == 0 && lastSleep == 0) {
            if (!sleepList.isEmpty())
                lastSleep = sleepList.get(sleepList.size() - 1);
            if (!wakeupList.isEmpty())
                lastWakeup = wakeupList.get(wakeupList.size() - 1);
        }

        logger.debug("lastSleep {}", lastSleep);
        logger.debug("lastWakeup {}", lastWakeup);

        if (lastSleep > lastWakeup) {
            return true;
        }
        return false;
    }

    @Override
    public void onEvent(String sender, Event event) throws Exception {
        logger.debug("event type {}", event.type);
        logger.debug("event type {}", event.content);
        if (event.type == Event.Type.UNBIND_RESOURCE && event.content.contains("<resource>boot</resource></unbind>")) {
            Nabaztag nabaztag = nabaztagDAO.findOne("macAddress", sender);
            logger.debug("WELCOME: unbind {}", nabaztag);

            messageService.sendMessage(sender, new PingPacket(60));

            if (nabaztag == null) {
                logger.debug("WELCOME: SENDING SOUND");
                String command = "CH http://www.nabalive.com/api/chor/rand/5\nMW\n" +
                        "ST " + WELCOME_URL + "\nMW\n";
                messageService.sendMessage(sender, command);
            } else {
                boolean isSleep = checkSleep(nabaztag);
                logger.debug("WELCOME: ISSLEEP :" + isSleep);
                if (isSleep) {
                    logger.debug("WELCOME: SENDING SLEEP");
                    messageService.sendMessage(nabaztag.getMacAddress(), new SleepPacket(SleepPacket.Action.Sleep));
                }
            }
        }
    }
}
TOP

Related Classes of com.nabalive.server.web.ConnectionWelcome

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.