Package com.nabalive.server.web

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

package com.nabalive.server.web;

import com.google.code.morphia.query.Query;
import com.nabalive.application.core.Application;
import com.nabalive.application.core.ApplicationManager;
import com.nabalive.common.server.MessageService;
import com.nabalive.common.server.Packet;
import com.nabalive.data.core.dao.NabaztagDAO;
import com.nabalive.data.core.model.ApplicationConfig;
import com.nabalive.data.core.model.Nabaztag;
import com.nabalive.server.jabber.ConnectionManager;
import com.nabalive.server.jabber.Status;
import com.nabalive.server.jabber.packet.SleepPacket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.*;

import static com.google.common.base.Preconditions.checkNotNull;

/**
* Created by IntelliJ IDEA.
* User: Julien Cheype
* Date: 11/23/11
*/
@Component
public class ApplicationScheduler {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    private final static Random rand = new Random();
    @Autowired
    private ApplicationManager applicationManager;
    @Autowired
    private ConnectionManager connectionManager;
    @Autowired
    private NabaztagDAO nabaztagDAO;

    @Autowired
    private MessageService messageService;

    private final String CLOCK_APIKEY = "23FE2439-C6E4-4E8D-BE1B-423EA6106CFA";
    private final String MOOD_APIKEY = "BC330670-6D25-4FB7-8613-EFD384D035E1";
    private final String TAICHI_APIKEY = "872AC9F0-F513-4980-B4DA-7D57CCB8D20E";

    private ApplicationConfig findConfig(String apikey, List<ApplicationConfig> applicationConfigList) {
        for (ApplicationConfig config : applicationConfigList) {
            if (apikey.equalsIgnoreCase(config.getApplicationStoreApikey())) {
                return config;
            }
        }
        return null;
    }

    @Scheduled(cron = "0 0 * * * *")
    public void clock() {
        logger.debug("clock trigger");

        Application application = checkNotNull(applicationManager.getApplication(CLOCK_APIKEY)); // clock

        Query<Nabaztag> query = nabaztagDAO.createQuery().filter("applicationConfigList.applicationStoreApikey", CLOCK_APIKEY);
        Iterator<Nabaztag> iterator = nabaztagDAO.find(query).iterator();
        while (iterator.hasNext()) {
            Nabaztag nabaztag = iterator.next();
            Status status = connectionManager.get(nabaztag.getMacAddress());
            if (status != null && !status.isAsleep()) {
                try {
                    application.onStartup(nabaztag, findConfig(CLOCK_APIKEY, nabaztag.getApplicationConfigList()));
                } catch (Exception e) {
                    logger.debug("cannot send message", e);
                }
            }
        }
    }

    @Scheduled(fixedDelay = 300000)
    public void mood() {
        logger.debug("mood trigger");

        Application application = checkNotNull(applicationManager.getApplication(MOOD_APIKEY)); // mood

        Query<Nabaztag> query = nabaztagDAO.createQuery().filter("applicationConfigList.applicationStoreApikey", MOOD_APIKEY);
        Iterator<Nabaztag> iterator = nabaztagDAO.find(query).iterator();
        while (iterator.hasNext()) {
            Nabaztag nabaztag = iterator.next();
            Status status = connectionManager.get(nabaztag.getMacAddress());
            if (status != null && status.isIdle()) {
                if (rand.nextInt(4) == 0){
                    try {
                        application.onStartup(nabaztag, findConfig(MOOD_APIKEY, nabaztag.getApplicationConfigList()));
                    } catch (Exception e) {
                        logger.debug("cannot send message", e);
                    }
                }
            }
        }
    }


    @Scheduled(fixedDelay = 400000)
    public void taichi() {
        logger.debug("taichi trigger");

        Application application = checkNotNull(applicationManager.getApplication(TAICHI_APIKEY)); // taichi

        Query<Nabaztag> query = nabaztagDAO.createQuery().filter("applicationConfigList.applicationStoreApikey", TAICHI_APIKEY);
        Iterator<Nabaztag> iterator = nabaztagDAO.find(query).iterator();
        while (iterator.hasNext()) {
            Nabaztag nabaztag = iterator.next();
            Status status = connectionManager.get(nabaztag.getMacAddress());
            if (status != null && status.isIdle()) {
                if (rand.nextInt(4) == 0){
                    try {
                        application.onStartup(nabaztag, findConfig(TAICHI_APIKEY, nabaztag.getApplicationConfigList()));
                    } catch (Exception e) {
                        logger.debug("cannot send message", e);
                    }
                }
            }
        }
    }
   
    private void sendToAll(Query<Nabaztag> query, Packet p){
        Iterator<Nabaztag> iterator = nabaztagDAO.find(query).iterator();
        while (iterator.hasNext()) {
            Nabaztag nabaztag = iterator.next();
            if (connectionManager.containsKey(nabaztag.getMacAddress())) {
                messageService.sendMessage(nabaztag.getMacAddress(), p);
            }
        }
    }

    @Scheduled(cron = "0 * * * * *")
    public void scheduled() {
        logger.debug("scheduled");
        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);

        String scheduleKey = String.format("%02d:%02d-%d", hour, minute, day);

        logger.debug("scheduleKey: {}", scheduleKey);

        Query<Nabaztag> queryWakeUp = nabaztagDAO.createQuery().filter("wakeup", scheduleKey);
        sendToAll(queryWakeUp, new SleepPacket(SleepPacket.Action.WakeUp));

        Query<Nabaztag> querySleep = nabaztagDAO.createQuery().filter("sleep", scheduleKey);
        sendToAll(querySleep, new SleepPacket(SleepPacket.Action.Sleep));
    }
}
TOP

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

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.